Contract 0xD4d871419714B778eBec2E22C7c53572b573706e 7

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xa290286bd9d85be5e3478c704564adf1a9489033ab9c91441b0effcad15d0aadMint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0x4fd804dffdad503c7ec86a861e7839d355fe9cf8418062373993ab19028e23a0Mint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0xc244b7ef7c852307dd6472e37bbf4939c5baab4326f069a258f04423053af84eMint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0xd8b905ef6c9f09f4c3e17ae2b17dd073969832e0ff8713cb087530e750a07a83Mint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0x2365685fbb1f159ce68788f295fd7eba7e02a96b4a649cb34727eed2e7309c56Mint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0x47604ad5fc38627f706be8caac051bd2513a45b9e88aa40b049f913105c319fbMint356459202022-11-15 17:33:16126 days 18 hrs ago0xb9d2c7da0e4c0e98ebebd5adcbbc98706da1608c IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.002736332468 127.029036196
0x0c53207f5ab748cb1c809d49f3ca9fb60c19ece441dc42468bfa8b99b8a10cb7Mint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0x66e05bfa3540586826c24d9b19daefd502d3e5d18b082ae8d8499e28589d6e61Mint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0xc80ce4c6fab114c121e7a77ce005b9984320255d40d32db3e70541f3cc50fe9cMint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0xc4bdccf158b033163e0079565eb9006435e815ddb267a633effd25545db6fa8fMint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0xddc7abe76b9adb91cf62f9625e76b7a885e2489b18259531271a155ae17e7bf5Mint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0x7a691bbba74cf86bd8e7581a4a0a0e7026a9cbafb06b561f263d0a400b041583Mint356412082022-11-15 14:50:08126 days 21 hrs ago0xe2b88db9f8831278188959ddd5f03ca1ac0754e6 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00288822652 134.080428969
0x6c577dce251cae31e3478d550d7c215a71f93ab03e547a895b50f3e25fc5a397Start Game350449072022-10-31 23:18:34141 days 13 hrs ago0x5e4fb0ee90ee94deae0100df44ab784040886735 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.039644368515 34.681574002
0x96e7b07c217bd6a8c8e5dd347b024233b90521ba93918de3fe5129326e01c68bMint350381882022-10-31 19:22:48141 days 17 hrs ago0x87b2dc356091c794490cbbf661384c7e6343ea61 IN 0xd4d871419714b778ebec2e22c7c53572b573706e2 MATIC0.000923493474 42.76224644
0x17485dd1ab67fce386de75f90ba54fbbf9389800994b48f84cf05dde6bcf69bbMint350357192022-10-31 17:54:09141 days 18 hrs ago0x9c229e9878c3dd8fb5fc18e62562067dc1c8c0c4 IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.001358168051 57.025152252
0x6ede6eb835f4e9e57559243c523985415b1a20b82f6702042c47c5aa4c82581bMint350352702022-10-31 17:38:26141 days 18 hrs ago0xe8ce8248ad8b87d56163c24d21772785f811544f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00222601897793.463449511
0x196b73a33f43421bd51cdb67124deee171fa8b223b923703fcdb29831e601274Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x269814f367940d281885f93df1ed2313c592c3f53eea2cb12c8333a503e0953eMint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0xab46417a222f7be1bb9ee383b9640c72f0bb9a32bac8583d82cc85794f6dda34Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x0c00eb8d8a3d4cb6a8256a141325259d7dfc5586084388a66de9e89ca5e70cf4Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x2259287edab731b155ab697dd79b8fde84416105f7774f12b0331208ba9be9edMint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x6367b70d95d1142dc97f3572592b632ab660c1636f9788c29e3affba4b64e950Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x60b83e28fbe9cfa986027415f03aa9023afadae6b873d335de20c9a122ce36c8Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x486cfbb0a629ab09ae29c22df13992d5853af310534e2efff3069b81b97b1571Mint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
0x0bfc18388a11f881f5ad1fb68b8ceedd3172499d56a426dc0d6059854765681cMint350346382022-10-31 17:15:29141 days 19 hrs ago0xbd9967d59846a76a7cea1c278bbb9e5e3e912d2f IN 0xd4d871419714b778ebec2e22c7c53572b573706e0 MATIC0.00142902 60
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Battle

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Battle.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/IBattleToken.sol";
import "./interfaces/IBattleDice.sol";

enum PieceType {
    PLAYER,
    WEAPON
}

struct Piece {
    uint32 id; // tokenId of player, or ID of weapon
    uint32 data; // id of weapon if held by player
    uint8 data2; // kills
    uint16 game; // game that this piece belongs to
    uint16 lastMove; // last move if it a player
    PieceType pieceType; // PLAYER, WEAPON
    int8 x; // x pos
    int8 y; // y pos
    int8[7] stats; // array of weapon or player stats
}

struct Game {
    uint32 startTime; // timestamp of beginning of game
    uint16 lastBattle; // turn number of the last battle
    uint8 players; // number of players
    uint8 remaining; // number of remaining players
    mapping(int8 => mapping(int8 => uint32)) board; // board game
}

uint256 constant FEE_ENTRY = 0 ether;
uint256 constant STALEMATE_TURNS = 6;
uint256 constant PERCENT_OWNER = 51;
uint32 constant TOKEN_MAX = 800;

/// @author AnAllergyToAnalogy
/// @title Big Head Club Doomies Main Contract
/// @notice Main Doomies contract, it has all the externally-facing battle and mint functions (not ERC721 stuff tho)
contract Battle is Ownable {

    event NewGame(uint16 indexed game);

    event Move(
        uint32 indexed tokenId,
        int8 x,
        int8 y,
        uint16 indexed game,
        uint16 turn,
        uint32 data
    );
    event BattleLog(
        uint32 indexed player1,
        uint32 indexed player2,
        int256[8] rolls1,
        int256[8] rolls2,
        uint32 winner,
        uint16 indexed game,
        uint16 turn
    );
    event Mint(
        uint32 indexed tokenId,
        int8[7] stats
    );
    event NewWeapon(
        uint32 indexed pieceId,
        int8[7] stats,
        uint16 indexed game
    );
    event WithdrawWinnings(
        uint32 tokenId,
        uint16 indexed game,
        uint256 amount
    );

    uint256 public turnTime = 1 days;
    address token;
    address dice;
    uint32 ownerWithdrawn;
    uint32 public lastTokenId;
    uint32 lastWeaponId = TOKEN_MAX;

    //This exposes a public method like this:
    // function game() public view returns(uint);
    //  returns the current game number
    uint16 public game;

    //This exposes a public method like this:
    // function games(uint _game) public view returns(Game);
    //  it will return the Game struct for the given game number, not including the board
    mapping(uint256 => Game) public games;

    //This exposes a public method like this:
    // function pieces(uint _pieceId) public view returns(Piece);
    //  it will return the Piece struct for the given id, not including the stats array
    mapping(uint32 => Piece) public pieces;




    constructor(address _token, address _dice) {
        token = _token;
        dice = _dice;
    }

    // Enters token into game
    //  takes the following params:
    //      tokenId: id of token
    //      startX:  x coord to start form
    //      startY:  y coord to start form

    //  player must own the token
    //  token can't have been entered into this or a previous game
    //  game has to be active,
    //  has to be entry time of the game (ie, turn = 0)
    //  has to be on the edge of map, only on every second space
    //  has to be on an empty tile

    //Emits the following events
    // from main contract
    //   event Move(tokenId, startX, startY, game number, turn number, type(uint32).max - 1);
    //    you can infer that a Move event is an 'enter game' event by either lookin at turn number == 0
    //                                                          or the data property = type(uint32).max - 1
    function enterGame(
        uint32 tokenId,
        int8 startX,
        int8 startY
    ) public {
        require(IBattleToken(token).ownerOf(tokenId) == msg.sender, "owner");

        require(pieces[tokenId].game == 0, "entered");

        require(gameIsActive(), "game not active");
        require(turnNumber() == 0, "not entry time");

        require(
            startX == 0 || startY == 0 || startX == 8 || startY == 8,
            "edge"
        );
        require(startX % 2 == 0 && startY % 2 == 0, "position");
        require(games[game].board[startX][startY] == 0, "occupied");

        games[game].board[startX][startY] = tokenId;
        ++games[game].players;
        ++games[game].remaining;

        pieces[tokenId].game = game;
        pieces[tokenId].x = startX;
        pieces[tokenId].y = startY;

        emit Move(
            tokenId,
            startX,
            startY,
            game,
            turnNumber(),
            type(uint32).max - 1
        );

        if (games[game].players == 16) {
            games[game].startTime = uint32(block.timestamp - turnTime);
        }
    }

    //Mints token,
    // Requires msg value of FEE_ENTRY
    //  will fail if token max has been reached
    //  this rolls the stats of the token

    //Emits the following events
    // from Token contract:
    //      Transfer( 0x0, msg.sender, tokenId)
    // from main contract
    //      event Mint(tokenId, int8[7] stats );
    function mint() public payable {
        require(gasleft() > 200000, "gas failsafe");

        require(msg.sender == tx.origin, "no contracts");
        require(msg.value == FEE_ENTRY, "FEE_ENTRY");
        require(lastTokenId < TOKEN_MAX, "supply limit");

        IBattleToken(token).mint(msg.sender, ++lastTokenId);

        pieces[lastTokenId] = Piece(
            lastTokenId,
            0,
            0,
            0,
            0,
            PieceType.PLAYER,
            0,
            0,
            IBattleDice(dice).rollPlayerStats()
        );

        emit Mint(lastTokenId, pieces[lastTokenId].stats);
    }

    //Moves a token
    //  takes the following params:
    //      tokenId: id of the token
    //      dx: how far to move in x direction
    //      dy: how far to move in y direction

    //  player must own the token
    //  game must be active
    //  can't be in entry time (ie turnNumber = 0)
    //  can't have moved this turn
    //  can't do it if token has died
    //  can't do it if not in this game
    //  can't do it if sender is a contract
    //  can't do it trying to move more than 1 square away
    //  can't not move at all in tx
    //  can't move off map

    //Emits the following events
    // from main contract

    // if the player moves to an empty square, a weapon square, or an occupied square and then succeeds at the battle:
    //  emit Move(tokenId, toX, toY, game number, turn number, 0);

    // if there is a battle, it will emit the following event BEFORE the Move event
    //  emit BattleLog(player id, opponent id, player's rolls,  opponent's rolls, id of victor, turn number, game number);
    //   where rolls are arrays of the dice rolls for each player for each stat.
    //      in the case where it's a draw, the winner will have a 1 in their final slot. otherwise that's unused.

    function move(
        uint32 tokenId,
        int8 dx,
        int8 dy
    ) public {
        require(gasleft() > 200000, "gas failsafe");
        require(IBattleToken(token).ownerOf(tokenId) == msg.sender, "owner");

        require(gameIsActive(), "game not active");
        require(turnNumber() != 0, "still entry time");
        require(pieces[tokenId].lastMove < turnNumber(), "already moved");
        require(pieces[tokenId].game == game, "not in game");
        require(pieces[tokenId].data != type(uint32).max, "token dead");

        require(msg.sender == tx.origin, "no contracts");
        require(dx >= -1 && dx <= 1 && dy >= -1 && dy <= 1, "range");
        require(!(dx == 0 && dy == 0), "stationary");

        Piece memory piece = pieces[tokenId];

        int8 toX = piece.x + dx;
        int8 toY = piece.y + dy;

        require(toX >= 0 && toX <= 8 && toY >= 0 && toY <= 8, "bounds");

        delete games[game].board[piece.x][piece.y];

        uint32 target = games[game].board[toX][toY];

        if (target == 0) {
            //space empty, Just move
            games[game].board[toX][toY] = tokenId;
            pieces[tokenId].x = toX;
            pieces[tokenId].y = toY;
            pieces[tokenId].lastMove = turnNumber();

            emit Move(tokenId, toX, toY, game, turnNumber(), 0);
        } else if (pieces[target].pieceType == PieceType.WEAPON) {
            //Weapon, pickup
            if (piece.data != 0) {
                //kill the current weapon
                delete pieces[piece.data];
            }
            pieces[tokenId].data = target;

            games[game].board[toX][toY] = tokenId;
            pieces[tokenId].x = toX;
            pieces[tokenId].y = toY;
            pieces[tokenId].lastMove = turnNumber();

            emit Move(tokenId, toX, toY, game, turnNumber(), target);
        } else {
            //Player, battle

            games[game].lastBattle = turnNumber();

            uint32 victor = _battle(tokenId, target);

            if (tokenId == victor) {
                //player wins

                //flag enemy token as dead
                pieces[target].data = type(uint32).max;

                games[game].board[toX][toY] = tokenId;
                pieces[tokenId].x = toX;
                pieces[tokenId].y = toY;
                pieces[tokenId].lastMove = turnNumber();

                ++pieces[tokenId].data2;

                emit Move(tokenId, toX, toY, game, turnNumber(), 0);
            } else {
                //enemy wins
                pieces[tokenId].data = type(uint32).max;

                ++pieces[target].data2;
            }
            --games[game].remaining;
        }
    }

    function withdrawWinnings(uint32 tokenId) public {
        require(IBattleToken(token).ownerOf(tokenId) == msg.sender, "owner");

        Piece memory piece = pieces[tokenId];

        require(piece.game < game || !gameIsActive(), "not yet winner");
        require(pieces[tokenId].data < type(uint32).max, "no winnings");

        uint256 toWithdraw;

        if (games[piece.game].remaining == 1) {
            //Single Winner
            toWithdraw =
            (games[piece.game].players *
            FEE_ENTRY *
            (100 - PERCENT_OWNER)) /
            100;
        } else {
            uint256 eliminated = games[piece.game].players -
            games[piece.game].remaining;
            if (eliminated > 0) {
                toWithdraw =
                (((uint256(piece.data2) *
                games[piece.game].players *
                FEE_ENTRY) / eliminated) * (100 - PERCENT_OWNER)) /
                100;
            } else {
                toWithdraw =
                (games[piece.game].players *
                FEE_ENTRY *
                (100 - PERCENT_OWNER)) /
                100;
            }
        }

        pieces[tokenId].data = type(uint32).max;

        emit WithdrawWinnings(tokenId, piece.game, toWithdraw);

        payable(msg.sender).transfer(toWithdraw);
    }

    function ownerWithdraw() public onlyOwner {
        require(ownerWithdrawn < lastTokenId, "withdrawn");

        uint256 toWithdraw = (uint256(lastTokenId - ownerWithdrawn) *
        FEE_ENTRY *
        PERCENT_OWNER) / 100;

        ownerWithdrawn = lastTokenId;

        payable(msg.sender).transfer(toWithdraw);
    }

    function updateTurnTime(uint256 _turnTime) public onlyOwner {
        require(!gameIsActive(), "game active");
        turnTime = _turnTime;
    }

    // call this to start the game
    //  can't be called by non contract owner
    //  cant be called if game in progress
    function startGame() public {
        require(gasleft() > 1250000, "gas failsafe");

        require(!gameIsActive(), "game active");
        game++;

        games[game].startTime = uint32(block.timestamp);

        for (int8 x = 3; x <= 5; x++) {
            for (int8 y = 3; y <= 5; y++) {
                if (x == 4 && y == 4) continue;

                games[game].board[x][y] = ++lastWeaponId;
                games[game].lastBattle = 1;

                pieces[lastWeaponId] = Piece(
                    lastWeaponId,
                    0,
                    0,
                    game,
                    0,
                    PieceType.WEAPON,
                    x,
                    y,
                    IBattleDice(dice).rollWeaponStats(lastWeaponId)
                );

                emit NewWeapon(lastWeaponId, pieces[lastWeaponId].stats, game);
            }
        }
        emit NewGame(game);
    }

    // returns true if game is currently active
    function gameIsActive() public view returns (bool) {
        return
        game != 0 &&
        (turnNumber() == 0 ||
        !(turnNumber() > games[game].lastBattle + STALEMATE_TURNS ||
        games[game].remaining < 2));
    }

    // returns a 9x9 array of current board, with ids of pieces
    function getTile(int8 x, int8 y) public view returns (uint32) {
        return games[game].board[x][y];

    }

    // return stats array of a given piece
    function getStats(uint32 pieceId) public view returns (int8[7] memory) {
        return pieces[pieceId].stats;
    }

    // returns true if a token hasnt been put in a game
    function tokenIsUnused(uint32 tokenId) public view returns (bool) {
        return pieces[tokenId].game == 0;
    }

    function _battle(uint32 player1, uint32 player2) internal returns (uint32) {
        (
            uint32 victor,
            int256[8] memory rolls1,
            int256[8] memory rolls2
        ) = IBattleDice(dice).battle(
                player1,
                player2,
                pieces[player1].stats,
                pieces[pieces[player1].data].stats,
                pieces[player2].stats,
                pieces[pieces[player2].data].stats
            );
        emit BattleLog(
            player1,
            player2,
            rolls1,
            rolls2,
            victor,
            turnNumber(),
            game
        );

        return victor;
    }

    // returns the current turn number of the current game
    function turnNumber() private view returns (uint16) {
        return
            uint16(
                (block.timestamp - uint256(games[game].startTime)) / turnTime
            );
    }


}

File 2 of 5 : IBattleDice.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

interface IBattleDice {
    function rollPlayerStats() external view returns (int8[7] memory stats);

    function rollWeaponStats(uint32 salt)
        external
        view
        returns (int8[7] memory stats);

    function battle(
        uint32 player1,
        uint32 player2,
        int8[7] memory stats1,
        int8[7] memory weapon1,
        int8[7] memory stats2,
        int8[7] memory weapon2
    )
        external
        view
        returns (
            uint32 victor,
            int256[8] memory rolls1,
            int256[8] memory rolls2
        );
}

File 3 of 5 : IBattleToken.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

interface IBattleToken {
    function mint(address to, uint256 tokenId) external;

    function burn(uint256 tokenId) external;

    function ownerOf(uint256 tokenId) external view returns (address);
}

File 4 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_dice","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"player1","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"player2","type":"uint32"},{"indexed":false,"internalType":"int256[8]","name":"rolls1","type":"int256[8]"},{"indexed":false,"internalType":"int256[8]","name":"rolls2","type":"int256[8]"},{"indexed":false,"internalType":"uint32","name":"winner","type":"uint32"},{"indexed":true,"internalType":"uint16","name":"game","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"turn","type":"uint16"}],"name":"BattleLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"tokenId","type":"uint32"},{"indexed":false,"internalType":"int8[7]","name":"stats","type":"int8[7]"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"tokenId","type":"uint32"},{"indexed":false,"internalType":"int8","name":"x","type":"int8"},{"indexed":false,"internalType":"int8","name":"y","type":"int8"},{"indexed":true,"internalType":"uint16","name":"game","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"turn","type":"uint16"},{"indexed":false,"internalType":"uint32","name":"data","type":"uint32"}],"name":"Move","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"game","type":"uint16"}],"name":"NewGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"pieceId","type":"uint32"},{"indexed":false,"internalType":"int8[7]","name":"stats","type":"int8[7]"},{"indexed":true,"internalType":"uint16","name":"game","type":"uint16"}],"name":"NewWeapon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"tokenId","type":"uint32"},{"indexed":true,"internalType":"uint16","name":"game","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawWinnings","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"int8","name":"startX","type":"int8"},{"internalType":"int8","name":"startY","type":"int8"}],"name":"enterGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"game","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint16","name":"lastBattle","type":"uint16"},{"internalType":"uint8","name":"players","type":"uint8"},{"internalType":"uint8","name":"remaining","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"pieceId","type":"uint32"}],"name":"getStats","outputs":[{"internalType":"int8[7]","name":"","type":"int8[7]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int8","name":"x","type":"int8"},{"internalType":"int8","name":"y","type":"int8"}],"name":"getTile","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTokenId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"int8","name":"dx","type":"int8"},{"internalType":"int8","name":"dy","type":"int8"}],"name":"move","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"pieces","outputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint32","name":"data","type":"uint32"},{"internalType":"uint8","name":"data2","type":"uint8"},{"internalType":"uint16","name":"game","type":"uint16"},{"internalType":"uint16","name":"lastMove","type":"uint16"},{"internalType":"enum PieceType","name":"pieceType","type":"uint8"},{"internalType":"int8","name":"x","type":"int8"},{"internalType":"int8","name":"y","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"tokenIsUnused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_turnTime","type":"uint256"}],"name":"updateTurnTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"withdrawWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052620151806001556103206003601c6101000a81548163ffffffff021916908363ffffffff1602179055503480156200003b57600080fd5b50604051620060f8380380620060f8833981810160405281019062000061919062000241565b62000081620000756200010b60201b60201c565b6200011360201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000288565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020982620001dc565b9050919050565b6200021b81620001fc565b81146200022757600080fd5b50565b6000815190506200023b8162000210565b92915050565b600080604083850312156200025b576200025a620001d7565b5b60006200026b858286016200022a565b92505060206200027e858286016200022a565b9150509250929050565b615e6080620002986000396000f3fe6080604052600436106101145760003560e01c80638da5cb5b116100a0578063e2784c3a11610064578063e2784c3a14610374578063eb1892231461039f578063f2fde38b146103ca578063f84ddf0b146103f3578063fd9e2c751461041e57610114565b80638da5cb5b1461028d5780638de19482146102b8578063a142b451146102f5578063c3fe3e2814610332578063d65ab5f21461035d57610114565b80634311de8f116100e75780634311de8f146101c95780635391bcef146101e057806355ad056314610209578063715018a61461023257806383ffe5741461024957610114565b8063117a5b90146101195780631249c58b146101595780631f5a208814610163578063302a3f88146101a0575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b919061385b565b610447565b60405161015094939291906138e0565b60405180910390f35b6101616104af565b005b34801561016f57600080fd5b5061018a60048036038101906101859190613951565b6109f4565b6040516101979190613999565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c291906139ed565b610a34565b005b3480156101d557600080fd5b506101de6110eb565b005b3480156101ec57600080fd5b50610207600480360381019061020291906139ed565b611240565b005b34801561021557600080fd5b50610230600480360381019061022b9190613951565b6122e7565b005b34801561023e57600080fd5b50610247612970565b005b34801561025557600080fd5b50610270600480360381019061026b9190613951565b612984565b604051610284989796959493929190613ac6565b60405180910390f35b34801561029957600080fd5b506102a2612a3c565b6040516102af9190613b85565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613ba0565b612a65565b6040516102ec9190613be0565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613951565b612ad8565b6040516103299190613ca6565b60405180910390f35b34801561033e57600080fd5b50610347612b6b565b6040516103549190613cc1565b60405180910390f35b34801561036957600080fd5b50610372612b7f565b005b34801561038057600080fd5b50610389613199565b6040516103969190613999565b60405180910390f35b3480156103ab57600080fd5b506103b4613272565b6040516103c19190613ceb565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613d32565b613278565b005b3480156103ff57600080fd5b506104086132fc565b6040516104159190613be0565b60405180910390f35b34801561042a57600080fd5b506104456004803603810190610440919061385b565b613312565b005b60056020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900461ffff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905084565b62030d405a116104f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104eb90613dbc565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055990613e28565b60405180910390fd5b600034146105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059c90613e94565b60405180910390fd5b61032063ffffffff16600360189054906101000a900463ffffffff1663ffffffff1610610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90613f00565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19336003601881819054906101000a900463ffffffff1661066490613f4f565b91906101000a81548163ffffffff021916908363ffffffff16021790556040518363ffffffff1660e01b815260040161069e929190613fb7565b600060405180830381600087803b1580156106b857600080fd5b505af11580156106cc573d6000803e3d6000fd5b50505050604051806101200160405280600360189054906101000a900463ffffffff1663ffffffff168152602001600063ffffffff168152602001600060ff168152602001600061ffff168152602001600061ffff1681526020016000600181111561073b5761073a613a40565b5b81526020016000800b81526020016000800b8152602001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1a9a2946040518163ffffffff1660e01b815260040160e06040518083038186803b1580156107ba57600080fd5b505afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f2919061413c565b81525060066000600360189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff021916908360ff16021790555060608201518160000160096101000a81548161ffff021916908361ffff160217905550608082015181600001600b6101000a81548161ffff021916908361ffff16021790555060a082015181600001600d6101000a81548160ff0219169083600181111561090657610905613a40565b5b021790555060c082015181600001600e6101000a81548160ff021916908360000b60ff16021790555060e082015181600001600f6101000a81548160ff021916908360000b60ff1602179055506101008201518160010190600761096b929190613733565b50905050600360189054906101000a900463ffffffff1663ffffffff167f2319cc2b0bc1d09c88f78e00243fd18260e511f6ee883ec77360f2724d4ba7e960066000600360189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206001016040516109ea9190614e89565b60405180910390a2565b600080600660008463ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff16149050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610aa69190614ea4565b60206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190614ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390614f4d565b60405180910390fd5b6000600660008563ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614fb9565b60405180910390fd5b610bcb613199565b610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190615025565b60405180910390fd5b6000610c1461336c565b61ffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90615091565b60405180910390fd5b60008260000b1480610c6d575060008160000b145b80610c7b575060088260000b145b80610c89575060088160000b145b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906150fd565b60405180910390fd5b6000600283610cd7919061514c565b60000b148015610cf657506000600282610cf1919061514c565b60000b145b610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c906151c9565b60405180910390fd5b600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90615235565b60405180910390fd5b8260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600681819054906101000a900460ff16610ea090615255565b91906101000a81548160ff021916908360ff16021790555060056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600781819054906101000a900460ff16610efb90615255565b91906101000a81548160ff021916908360ff160217905550600460009054906101000a900461ffff16600660008563ffffffff1663ffffffff16815260200190815260200160002060000160096101000a81548161ffff021916908361ffff16021790555081600660008563ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555080600660008563ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550600460009054906101000a900461ffff1661ffff168363ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d34516848461102361336c565b600163ffffffff611034919061527f565b60405161104494939291906152b3565b60405180910390a3601060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff1614156110e6576001544261109d91906152f8565b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff1602179055505b505050565b6110f36133cc565b600360189054906101000a900463ffffffff1663ffffffff16600360149054906101000a900463ffffffff1663ffffffff1610611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90615378565b60405180910390fd5b6000606460336000600360149054906101000a900463ffffffff16600360189054906101000a900463ffffffff1661119d919061527f565b63ffffffff166111ad9190615398565b6111b79190615398565b6111c191906153f2565b9050600360189054906101000a900463ffffffff16600360146101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561123c573d6000803e3d6000fd5b5050565b62030d405a11611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90613dbc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016112f79190614ea4565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190614ed4565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614f4d565b60405180910390fd5b6113a5613199565b6113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90615025565b60405180910390fd5b60006113ee61336c565b61ffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061546f565b60405180910390fd5b61143b61336c565b61ffff16600660008563ffffffff1663ffffffff168152602001908152602001600020600001600b9054906101000a900461ffff1661ffff16106114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab906154db565b60405180910390fd5b600460009054906101000a900461ffff1661ffff16600660008563ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff161461153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590615547565b60405180910390fd5b63ffffffff8016600660008563ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1614156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906155b3565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613e28565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260000b12158015611664575060018260000b13155b801561169357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160000b12155b80156116a3575060018160000b13155b6116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d99061561f565b60405180910390fd5b60008260000b1480156116f8575060008160000b145b15611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f9061568b565b60405180910390fd5b6000600660008563ffffffff1663ffffffff168152602001908152602001600020604051806101200160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff1660ff1660ff1681526020016000820160099054906101000a900461ffff1661ffff1661ffff16815260200160008201600b9054906101000a900461ffff1661ffff1661ffff16815260200160008201600d9054906101000a900460ff16600181111561183357611832613a40565b5b600181111561184557611844613a40565b5b815260200160008201600e9054906101000a900460000b60000b60000b815260200160008201600f9054906101000a900460000b60000b60000b8152602001600182016007806020026040519081016040528092919082600780156118e5576020028201916000905b82829054906101000a900460000b60000b815260200190600101906020826000010492830192600103820291508084116118ae5790505b50505050508152505090506000838260c0015161190291906156ab565b90506000838360e0015161191691906156ab565b905060008260000b12158015611930575060088260000b13155b8015611940575060008160000b12155b8015611950575060088160000b13155b61198f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119869061576c565b60405180910390fd5b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460c0015160000b60000b815260200190815260200160002060008460e0015160000b60000b815260200190815260200160002060006101000a81549063ffffffff0219169055600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611c1b578660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008560000b60000b815260200190815260200160002060008460000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555082600660008963ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555081600660008963ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550611b7961336c565b600660008963ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600460009054906101000a900461ffff1661ffff168763ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d345168585611bfc61336c565b6000604051611c0e94939291906157c7565b60405180910390a36122de565b600180811115611c2e57611c2d613a40565b5b600660008363ffffffff1663ffffffff168152602001908152602001600020600001600d9054906101000a900460ff166001811115611c7057611c6f613a40565b5b1415611f44576000846020015163ffffffff1614611d675760066000856020015163ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549060ff02191690556000820160096101000a81549061ffff021916905560008201600b6101000a81549061ffff021916905560008201600d6101000a81549060ff021916905560008201600e6101000a81549060ff021916905560008201600f6101000a81549060ff0219169055600182016000611d6491906137d0565b50505b80600660008963ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008560000b60000b815260200190815260200160002060008460000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555082600660008963ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555081600660008963ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550611ea361336c565b600660008963ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600460009054906101000a900461ffff1661ffff168763ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d345168585611f2661336c565b86604051611f3794939291906152b3565b60405180910390a36122dd565b611f4c61336c565b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055506000611f9c888361344a565b90508063ffffffff168863ffffffff1614156121e75763ffffffff600660008463ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508760056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008660000b60000b815260200190815260200160002060008560000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555083600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555082600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff1602179055506120f261336c565b600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600660008963ffffffff1663ffffffff168152602001908152602001600020600001600881819054906101000a900460ff1661216990615255565b91906101000a81548160ff021916908360ff160217905550600460009054906101000a900461ffff1661ffff168863ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d3451686866121c861336c565b60006040516121da94939291906157c7565b60405180910390a3612280565b63ffffffff600660008a63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550600660008363ffffffff1663ffffffff168152602001908152602001600020600001600881819054906101000a900460ff1661226790615255565b91906101000a81548160ff021916908360ff1602179055505b60056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600781819054906101000a900460ff166122c39061580c565b91906101000a81548160ff021916908360ff160217905550505b5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016123599190614ea4565b60206040518083038186803b15801561237157600080fd5b505afa158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190614ed4565b73ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690614f4d565b60405180910390fd5b6000600660008363ffffffff1663ffffffff168152602001908152602001600020604051806101200160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff1660ff1660ff1681526020016000820160099054906101000a900461ffff1661ffff1661ffff16815260200160008201600b9054906101000a900461ffff1661ffff1661ffff16815260200160008201600d9054906101000a900460ff1660018111156124fa576124f9613a40565b5b600181111561250c5761250b613a40565b5b815260200160008201600e9054906101000a900460000b60000b60000b815260200160008201600f9054906101000a900460000b60000b60000b8152602001600182016007806020026040519081016040528092919082600780156125ac576020028201916000905b82829054906101000a900460000b60000b815260200190600101906020826000010492830192600103820291508084116125755790505b5050505050815250509050600460009054906101000a900461ffff1661ffff16816060015161ffff1610806125e657506125e4613199565b155b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90615882565b60405180910390fd5b63ffffffff8016600660008463ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff16106126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906158ee565b60405180910390fd5b6000600160056000846060015161ffff16815260200190815260200160002060000160079054906101000a900460ff1660ff161415612744576064603360646126ee91906152f8565b600060056000866060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff166127299190615398565b6127339190615398565b61273d91906153f2565b905061289d565b600060056000846060015161ffff16815260200190815260200160002060000160079054906101000a900460ff1660056000856060015161ffff16815260200190815260200160002060000160069054906101000a900460ff166127a8919061590e565b60ff1690506000811115612839576064603360646127c691906152f8565b82600060056000886060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff16876040015160ff1661280a9190615398565b6128149190615398565b61281e91906153f2565b6128289190615398565b61283291906153f2565b915061289b565b60646033606461284991906152f8565b600060056000876060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff166128849190615398565b61288e9190615398565b61289891906153f2565b91505b505b63ffffffff600660008563ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550816060015161ffff167f4530ccbd0ece362625255023d43232c27b1d71e8140e8adf2611b2faeaa6c725848360405161291c929190615942565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561296a573d6000803e3d6000fd5b50505050565b6129786133cc565b6129826000613667565b565b60066020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900460ff16908060000160099054906101000a900461ffff169080600001600b9054906101000a900461ffff169080600001600d9054906101000a900460ff169080600001600e9054906101000a900460000b9080600001600f9054906101000a900460000b905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff16905092915050565b612ae06137d7565b600660008363ffffffff1663ffffffff168152602001908152602001600020600101600780602002604051908101604052809291908260078015612b5f576020028201916000905b82829054906101000a900460000b60000b81526020019060010190602082600001049283019260010382029150808411612b285790505b50505050509050919050565b600460009054906101000a900461ffff1681565b621312d05a11612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb90613dbc565b60405180910390fd5b612bcc613199565b15612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c03906159b7565b60405180910390fd5b6004600081819054906101000a900461ffff1680929190612c2c906159d7565b91906101000a81548161ffff021916908361ffff160217905550504260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff1602179055506000600390505b60058160000b13613155576000600390505b60058160000b136131415760048260000b148015612cca575060048160000b145b15612cd45761312e565b6003601c81819054906101000a900463ffffffff16612cf290613f4f565b91906101000a81548163ffffffff021916908363ffffffff160217905560056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550600160056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055506040518061012001604052806003601c9054906101000a900463ffffffff1663ffffffff168152602001600063ffffffff168152602001600060ff168152602001600460009054906101000a900461ffff1661ffff168152602001600061ffff168152602001600180811115612e4457612e43613a40565b5b81526020018360000b81526020018260000b8152602001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395ac90bc6003601c9054906101000a900463ffffffff166040518263ffffffff1660e01b8152600401612ec89190613be0565b60e06040518083038186803b158015612ee057600080fd5b505afa158015612ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f18919061413c565b815250600660006003601c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff021916908360ff16021790555060608201518160000160096101000a81548161ffff021916908361ffff160217905550608082015181600001600b6101000a81548161ffff021916908361ffff16021790555060a082015181600001600d6101000a81548160ff0219169083600181111561302c5761302b613a40565b5b021790555060c082015181600001600e6101000a81548160ff021916908360000b60ff16021790555060e082015181600001600f6101000a81548160ff021916908360000b60ff16021790555061010082015181600101906007613091929190613733565b50905050600460009054906101000a900461ffff1661ffff166003601c9054906101000a900463ffffffff1663ffffffff167fd49926ad2a6053895c9f78d2b83a0756b93b355502742abb3ad232d57d2b5a7e600660006003601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206001016040516131259190614e89565b60405180910390a35b808061313990615a02565b915050612ca9565b50808061314d90615a02565b915050612c97565b50600460009054906101000a900461ffff1661ffff167f8513252461c0e1f231971630c9c54812f2bac1be5103aba1b9703356fd75b2d960405160405180910390a2565b600080600460009054906101000a900461ffff1661ffff161415801561326d575060006131c461336c565b61ffff16148061326c5750600660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160049054906101000a900461ffff1661ffff166132189190615a2c565b61322061336c565b61ffff16118061326a5750600260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160079054906101000a900460ff1660ff16105b155b5b905090565b60015481565b6132806133cc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790615af4565b60405180910390fd5b6132f981613667565b50565b600360189054906101000a900463ffffffff1681565b61331a6133cc565b613322613199565b15613362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613359906159b7565b60405180910390fd5b8060018190555050565b600060015460056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16426133bd91906152f8565b6133c791906153f2565b905090565b6133d461372b565b73ffffffffffffffffffffffffffffffffffffffff166133f2612a3c565b73ffffffffffffffffffffffffffffffffffffffff1614613448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343f90615b60565b60405180910390fd5b565b600080600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2dd56068787600660008b63ffffffff1663ffffffff16815260200190815260200160002060010160066000600660008e63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020600101600660008c63ffffffff1663ffffffff16815260200190815260200160002060010160066000600660008f63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206001016040518763ffffffff1660e01b815260040161359d96959493929190615b80565b6102206040518083038186803b1580156135b657600080fd5b505afa1580156135ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ee9190615ce1565b9250925092506135fc61336c565b61ffff168563ffffffff168763ffffffff167fad047a50d558ba74fa27ce9da836615f3ff4224b51e765c8faf974bdd16b9a1d858588600460009054906101000a900461ffff166040516136539493929190615de1565b60405180910390a482935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b826007601f016020900481019282156137bf5791602002820160005b8382111561379057835183826101000a81548160ff021916908360000b60ff160217905550926020019260010160208160000104928301926001030261374f565b80156137bd5782816101000a81549060ff0219169055600101602081600001049283019260010302613790565b505b5090506137cc91906137f9565b5090565b5060009055565b6040518060e00160405280600790602082028036833780820191505090505090565b5b808211156138125760008160009055506001016137fa565b5090565b6000604051905090565b600080fd5b6000819050919050565b61383881613825565b811461384357600080fd5b50565b6000813590506138558161382f565b92915050565b60006020828403121561387157613870613820565b5b600061387f84828501613846565b91505092915050565b600063ffffffff82169050919050565b6138a181613888565b82525050565b600061ffff82169050919050565b6138be816138a7565b82525050565b600060ff82169050919050565b6138da816138c4565b82525050565b60006080820190506138f56000830187613898565b61390260208301866138b5565b61390f60408301856138d1565b61391c60608301846138d1565b95945050505050565b61392e81613888565b811461393957600080fd5b50565b60008135905061394b81613925565b92915050565b60006020828403121561396757613966613820565b5b60006139758482850161393c565b91505092915050565b60008115159050919050565b6139938161397e565b82525050565b60006020820190506139ae600083018461398a565b92915050565b60008160000b9050919050565b6139ca816139b4565b81146139d557600080fd5b50565b6000813590506139e7816139c1565b92915050565b600080600060608486031215613a0657613a05613820565b5b6000613a148682870161393c565b9350506020613a25868287016139d8565b9250506040613a36868287016139d8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613a8057613a7f613a40565b5b50565b6000819050613a9182613a6f565b919050565b6000613aa182613a83565b9050919050565b613ab181613a96565b82525050565b613ac0816139b4565b82525050565b600061010082019050613adc600083018b613898565b613ae9602083018a613898565b613af660408301896138d1565b613b0360608301886138b5565b613b1060808301876138b5565b613b1d60a0830186613aa8565b613b2a60c0830185613ab7565b613b3760e0830184613ab7565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6f82613b44565b9050919050565b613b7f81613b64565b82525050565b6000602082019050613b9a6000830184613b76565b92915050565b60008060408385031215613bb757613bb6613820565b5b6000613bc5858286016139d8565b9250506020613bd6858286016139d8565b9150509250929050565b6000602082019050613bf56000830184613898565b92915050565b600060079050919050565b600081905092915050565b6000819050919050565b613c24816139b4565b82525050565b6000613c368383613c1b565b60208301905092915050565b6000602082019050919050565b613c5881613bfb565b613c628184613c06565b9250613c6d82613c11565b8060005b83811015613c9e578151613c858782613c2a565b9650613c9083613c42565b925050600181019050613c71565b505050505050565b600060e082019050613cbb6000830184613c4f565b92915050565b6000602082019050613cd660008301846138b5565b92915050565b613ce581613825565b82525050565b6000602082019050613d006000830184613cdc565b92915050565b613d0f81613b64565b8114613d1a57600080fd5b50565b600081359050613d2c81613d06565b92915050565b600060208284031215613d4857613d47613820565b5b6000613d5684828501613d1d565b91505092915050565b600082825260208201905092915050565b7f676173206661696c736166650000000000000000000000000000000000000000600082015250565b6000613da6600c83613d5f565b9150613db182613d70565b602082019050919050565b60006020820190508181036000830152613dd581613d99565b9050919050565b7f6e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b6000613e12600c83613d5f565b9150613e1d82613ddc565b602082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f4645455f454e5452590000000000000000000000000000000000000000000000600082015250565b6000613e7e600983613d5f565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f737570706c79206c696d69740000000000000000000000000000000000000000600082015250565b6000613eea600c83613d5f565b9150613ef582613eb4565b602082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f5a82613888565b915063ffffffff821415613f7157613f70613f20565b5b600182019050919050565b6000819050919050565b6000613fa1613f9c613f9784613888565b613f7c565b613825565b9050919050565b613fb181613f86565b82525050565b6000604082019050613fcc6000830185613b76565b613fd96020830184613fa8565b9392505050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61402e82613fe5565b810181811067ffffffffffffffff8211171561404d5761404c613ff6565b5b80604052505050565b6000614060613816565b905061406c8282614025565b919050565b600067ffffffffffffffff82111561408c5761408b613ff6565b5b602082029050919050565b600080fd5b6000815190506140ab816139c1565b92915050565b60006140c46140bf84614071565b614056565b905080602084028301858111156140de576140dd614097565b5b835b8181101561410757806140f3888261409c565b8452602084019350506020810190506140e0565b5050509392505050565b600082601f83011261412657614125613fe0565b5b60076141338482856140b1565b91505092915050565b600060e0828403121561415257614151613820565b5b600061416084828501614111565b91505092915050565b600060079050919050565b6000819050919050565b60008160001c9050919050565b60008160000b9050919050565b60006141ab6141a68361417e565b61418b565b9050919050565b60008160081c9050919050565b60006141d26141cd836141b2565b61418b565b9050919050565b60008160101c9050919050565b60006141f96141f4836141d9565b61418b565b9050919050565b60008160181c9050919050565b600061422061421b83614200565b61418b565b9050919050565b60008160201c9050919050565b600061424761424283614227565b61418b565b9050919050565b60008160281c9050919050565b600061426e6142698361424e565b61418b565b9050919050565b60008160301c9050919050565b600061429561429083614275565b61418b565b9050919050565b60008160381c9050919050565b60006142bc6142b78361429c565b61418b565b9050919050565b60008160401c9050919050565b60006142e36142de836142c3565b61418b565b9050919050565b60008160481c9050919050565b600061430a614305836142ea565b61418b565b9050919050565b60008160501c9050919050565b600061433161432c83614311565b61418b565b9050919050565b60008160581c9050919050565b600061435861435383614338565b61418b565b9050919050565b60008160601c9050919050565b600061437f61437a8361435f565b61418b565b9050919050565b60008160681c9050919050565b60006143a66143a183614386565b61418b565b9050919050565b60008160701c9050919050565b60006143cd6143c8836143ad565b61418b565b9050919050565b60008160781c9050919050565b60006143f46143ef836143d4565b61418b565b9050919050565b60008160801c9050919050565b600061441b614416836143fb565b61418b565b9050919050565b60008160881c9050919050565b600061444261443d83614422565b61418b565b9050919050565b60008160901c9050919050565b600061446961446483614449565b61418b565b9050919050565b60008160981c9050919050565b600061449061448b83614470565b61418b565b9050919050565b60008160a01c9050919050565b60006144b76144b283614497565b61418b565b9050919050565b60008160a81c9050919050565b60006144de6144d9836144be565b61418b565b9050919050565b60008160b01c9050919050565b6000614505614500836144e5565b61418b565b9050919050565b60008160b81c9050919050565b600061452c6145278361450c565b61418b565b9050919050565b60008160c01c9050919050565b600061455361454e83614533565b61418b565b9050919050565b60008160c81c9050919050565b600061457a6145758361455a565b61418b565b9050919050565b60008160d01c9050919050565b60006145a161459c83614581565b61418b565b9050919050565b60008160d81c9050919050565b60006145c86145c3836145a8565b61418b565b9050919050565b60008160e01c9050919050565b60006145ef6145ea836145cf565b61418b565b9050919050565b60008160e81c9050919050565b6000614616614611836145f6565b61418b565b9050919050565b60008160f01c9050919050565b600061463d6146388361461d565b61418b565b9050919050565b60008160f81c9050919050565b600061466461465f83614644565b61418b565b9050919050565b61467481614169565b61467e8184613c06565b92508261468a83614174565b600080156149b6575b836001602003820110156149b55781546146b5876146b083614198565b613c1b565b6020870196506146cd876146c8836141bf565b613c1b565b6020870196506146e5876146e0836141e6565b613c1b565b6020870196506146fd876146f88361420d565b613c1b565b6020870196506147158761471083614234565b613c1b565b60208701965061472d876147288361425b565b613c1b565b6020870196506147458761474083614282565b613c1b565b60208701965061475d87614758836142a9565b613c1b565b60208701965061477587614770836142d0565b613c1b565b60208701965061478d87614788836142f7565b613c1b565b6020870196506147a5876147a08361431e565b613c1b565b6020870196506147bd876147b883614345565b613c1b565b6020870196506147d5876147d08361436c565b613c1b565b6020870196506147ed876147e883614393565b613c1b565b60208701965061480587614800836143ba565b613c1b565b60208701965061481d87614818836143e1565b613c1b565b6020870196506148358761483083614408565b613c1b565b60208701965061484d876148488361442f565b613c1b565b6020870196506148658761486083614456565b613c1b565b60208701965061487d876148788361447d565b613c1b565b60208701965061489587614890836144a4565b613c1b565b6020870196506148ad876148a8836144cb565b613c1b565b6020870196506148c5876148c0836144f2565b613c1b565b6020870196506148dd876148d883614519565b613c1b565b6020870196506148f5876148f083614540565b613c1b565b60208701965061490d8761490883614567565b613c1b565b602087019650614925876149208361458e565b613c1b565b60208701965061493d87614938836145b5565b613c1b565b60208701965061495587614950836145dc565b613c1b565b60208701965061496d8761496883614603565b613c1b565b602087019650614985876149808361462a565b613c1b565b60208701965061499d8761499883614651565b613c1b565b60208701965060018301925050602081019050614693565b5b600115614e815781546001156149e5576149d8876149d383614198565b613c1b565b6020870196506001820191505b600115614a0b576149fe876149f9836141bf565b613c1b565b6020870196506001820191505b600115614a3157614a2487614a1f836141e6565b613c1b565b6020870196506001820191505b600115614a5757614a4a87614a458361420d565b613c1b565b6020870196506001820191505b600115614a7d57614a7087614a6b83614234565b613c1b565b6020870196506001820191505b600115614aa357614a9687614a918361425b565b613c1b565b6020870196506001820191505b600115614ac957614abc87614ab783614282565b613c1b565b6020870196506001820191505b600015614aef57614ae287614add836142a9565b613c1b565b6020870196506001820191505b600015614b1557614b0887614b03836142d0565b613c1b565b6020870196506001820191505b600015614b3b57614b2e87614b29836142f7565b613c1b565b6020870196506001820191505b600015614b6157614b5487614b4f8361431e565b613c1b565b6020870196506001820191505b600015614b8757614b7a87614b7583614345565b613c1b565b6020870196506001820191505b600015614bad57614ba087614b9b8361436c565b613c1b565b6020870196506001820191505b600015614bd357614bc687614bc183614393565b613c1b565b6020870196506001820191505b600015614bf957614bec87614be7836143ba565b613c1b565b6020870196506001820191505b600015614c1f57614c1287614c0d836143e1565b613c1b565b6020870196506001820191505b600015614c4557614c3887614c3383614408565b613c1b565b6020870196506001820191505b600015614c6b57614c5e87614c598361442f565b613c1b565b6020870196506001820191505b600015614c9157614c8487614c7f83614456565b613c1b565b6020870196506001820191505b600015614cb757614caa87614ca58361447d565b613c1b565b6020870196506001820191505b600015614cdd57614cd087614ccb836144a4565b613c1b565b6020870196506001820191505b600015614d0357614cf687614cf1836144cb565b613c1b565b6020870196506001820191505b600015614d2957614d1c87614d17836144f2565b613c1b565b6020870196506001820191505b600015614d4f57614d4287614d3d83614519565b613c1b565b6020870196506001820191505b600015614d7557614d6887614d6383614540565b613c1b565b6020870196506001820191505b600015614d9b57614d8e87614d8983614567565b613c1b565b6020870196506001820191505b600015614dc157614db487614daf8361458e565b613c1b565b6020870196506001820191505b600015614de757614dda87614dd5836145b5565b613c1b565b6020870196506001820191505b600015614e0d57614e0087614dfb836145dc565b613c1b565b6020870196506001820191505b600015614e3357614e2687614e2183614603565b613c1b565b6020870196506001820191505b600015614e5957614e4c87614e478361462a565b613c1b565b6020870196506001820191505b600015614e7f57614e7287614e6d83614651565b613c1b565b6020870196506001820191505b505b505050505050565b600060e082019050614e9e600083018461466b565b92915050565b6000602082019050614eb96000830184613fa8565b92915050565b600081519050614ece81613d06565b92915050565b600060208284031215614eea57614ee9613820565b5b6000614ef884828501614ebf565b91505092915050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b6000614f37600583613d5f565b9150614f4282614f01565b602082019050919050565b60006020820190508181036000830152614f6681614f2a565b9050919050565b7f656e746572656400000000000000000000000000000000000000000000000000600082015250565b6000614fa3600783613d5f565b9150614fae82614f6d565b602082019050919050565b60006020820190508181036000830152614fd281614f96565b9050919050565b7f67616d65206e6f74206163746976650000000000000000000000000000000000600082015250565b600061500f600f83613d5f565b915061501a82614fd9565b602082019050919050565b6000602082019050818103600083015261503e81615002565b9050919050565b7f6e6f7420656e7472792074696d65000000000000000000000000000000000000600082015250565b600061507b600e83613d5f565b915061508682615045565b602082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b7f6564676500000000000000000000000000000000000000000000000000000000600082015250565b60006150e7600483613d5f565b91506150f2826150b1565b602082019050919050565b60006020820190508181036000830152615116816150da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615157826139b4565b9150615162836139b4565b9250826151725761517161511d565b5b828207905092915050565b7f706f736974696f6e000000000000000000000000000000000000000000000000600082015250565b60006151b3600883613d5f565b91506151be8261517d565b602082019050919050565b600060208201905081810360008301526151e2816151a6565b9050919050565b7f6f63637570696564000000000000000000000000000000000000000000000000600082015250565b600061521f600883613d5f565b915061522a826151e9565b602082019050919050565b6000602082019050818103600083015261524e81615212565b9050919050565b6000615260826138c4565b915060ff82141561527457615273613f20565b5b600182019050919050565b600061528a82613888565b915061529583613888565b9250828210156152a8576152a7613f20565b5b828203905092915050565b60006080820190506152c86000830187613ab7565b6152d56020830186613ab7565b6152e260408301856138b5565b6152ef6060830184613898565b95945050505050565b600061530382613825565b915061530e83613825565b92508282101561532157615320613f20565b5b828203905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b6000615362600983613d5f565b915061536d8261532c565b602082019050919050565b6000602082019050818103600083015261539181615355565b9050919050565b60006153a382613825565b91506153ae83613825565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153e7576153e6613f20565b5b828202905092915050565b60006153fd82613825565b915061540883613825565b9250826154185761541761511d565b5b828204905092915050565b7f7374696c6c20656e7472792074696d6500000000000000000000000000000000600082015250565b6000615459601083613d5f565b915061546482615423565b602082019050919050565b600060208201905081810360008301526154888161544c565b9050919050565b7f616c7265616479206d6f76656400000000000000000000000000000000000000600082015250565b60006154c5600d83613d5f565b91506154d08261548f565b602082019050919050565b600060208201905081810360008301526154f4816154b8565b9050919050565b7f6e6f7420696e2067616d65000000000000000000000000000000000000000000600082015250565b6000615531600b83613d5f565b915061553c826154fb565b602082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b7f746f6b656e206465616400000000000000000000000000000000000000000000600082015250565b600061559d600a83613d5f565b91506155a882615567565b602082019050919050565b600060208201905081810360008301526155cc81615590565b9050919050565b7f72616e6765000000000000000000000000000000000000000000000000000000600082015250565b6000615609600583613d5f565b9150615614826155d3565b602082019050919050565b60006020820190508181036000830152615638816155fc565b9050919050565b7f73746174696f6e61727900000000000000000000000000000000000000000000600082015250565b6000615675600a83613d5f565b91506156808261563f565b602082019050919050565b600060208201905081810360008301526156a481615668565b9050919050565b60006156b6826139b4565b91506156c1836139b4565b925081607f038313600083121516156156dd576156dc613f20565b5b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8003831260008312161561571557615714613f20565b5b828201905092915050565b7f626f756e64730000000000000000000000000000000000000000000000000000600082015250565b6000615756600683613d5f565b915061576182615720565b602082019050919050565b6000602082019050818103600083015261578581615749565b9050919050565b6000819050919050565b60006157b16157ac6157a78461578c565b613f7c565b613888565b9050919050565b6157c181615796565b82525050565b60006080820190506157dc6000830187613ab7565b6157e96020830186613ab7565b6157f660408301856138b5565b61580360608301846157b8565b95945050505050565b6000615817826138c4565b9150600082141561582b5761582a613f20565b5b600182039050919050565b7f6e6f74207965742077696e6e6572000000000000000000000000000000000000600082015250565b600061586c600e83613d5f565b915061587782615836565b602082019050919050565b6000602082019050818103600083015261589b8161585f565b9050919050565b7f6e6f2077696e6e696e6773000000000000000000000000000000000000000000600082015250565b60006158d8600b83613d5f565b91506158e3826158a2565b602082019050919050565b60006020820190508181036000830152615907816158cb565b9050919050565b6000615919826138c4565b9150615924836138c4565b92508282101561593757615936613f20565b5b828203905092915050565b60006040820190506159576000830185613898565b6159646020830184613cdc565b9392505050565b7f67616d6520616374697665000000000000000000000000000000000000000000600082015250565b60006159a1600b83613d5f565b91506159ac8261596b565b602082019050919050565b600060208201905081810360008301526159d081615994565b9050919050565b60006159e2826138a7565b915061ffff8214156159f7576159f6613f20565b5b600182019050919050565b6000615a0d826139b4565b9150607f821415615a2157615a20613f20565b5b600182019050919050565b6000615a3782613825565b9150615a4283613825565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615a7757615a76613f20565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615ade602683613d5f565b9150615ae982615a82565b604082019050919050565b60006020820190508181036000830152615b0d81615ad1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615b4a602083613d5f565b9150615b5582615b14565b602082019050919050565b60006020820190508181036000830152615b7981615b3d565b9050919050565b60006103c082019050615b966000830189613898565b615ba36020830188613898565b615bb0604083018761466b565b615bbe61012083018661466b565b615bcc61020083018561466b565b615bda6102e083018461466b565b979650505050505050565b600081519050615bf481613925565b92915050565b600067ffffffffffffffff821115615c1557615c14613ff6565b5b602082029050919050565b6000819050919050565b615c3381615c20565b8114615c3e57600080fd5b50565b600081519050615c5081615c2a565b92915050565b6000615c69615c6484615bfa565b614056565b90508060208402830185811115615c8357615c82614097565b5b835b81811015615cac5780615c988882615c41565b845260208401935050602081019050615c85565b5050509392505050565b600082601f830112615ccb57615cca613fe0565b5b6008615cd8848285615c56565b91505092915050565b60008060006102208486031215615cfb57615cfa613820565b5b6000615d0986828701615be5565b9350506020615d1a86828701615cb6565b925050610120615d2c86828701615cb6565b9150509250925092565b600060089050919050565b600081905092915050565b6000819050919050565b615d5f81615c20565b82525050565b6000615d718383615d56565b60208301905092915050565b6000602082019050919050565b615d9381615d36565b615d9d8184615d41565b9250615da882615d4c565b8060005b83811015615dd9578151615dc08782615d65565b9650615dcb83615d7d565b925050600181019050615dac565b505050505050565b600061024082019050615df76000830187615d8a565b615e05610100830186615d8a565b615e13610200830185613898565b615e216102208301846138b5565b9594505050505056fea26469706673582212205203c199dfd61b6693ef418ec8950c0b364091e3f400c48d8fd10ab17bb05c6f64736f6c634300080900330000000000000000000000000ad3bf0033bbf43e758dda0000ba3c49c1613f0f000000000000000000000000f56d8be50c3b133c860ce8d2eef974654d574bb8

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

0000000000000000000000000ad3bf0033bbf43e758dda0000ba3c49c1613f0f000000000000000000000000f56d8be50c3b133c860ce8d2eef974654d574bb8

-----Decoded View---------------
Arg [0] : _token (address): 0x0ad3bf0033bbf43e758dda0000ba3c49c1613f0f
Arg [1] : _dice (address): 0xf56d8be50c3b133c860ce8d2eef974654d574bb8

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000ad3bf0033bbf43e758dda0000ba3c49c1613f0f
Arg [1] : 000000000000000000000000f56d8be50c3b133c860ce8d2eef974654d574bb8


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.