Contract
0xD4d871419714B778eBec2E22C7c53572b573706e
7
Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x9a94d64a0c7e8889ca8adf75f585b13a73e164d894336695eb7c773f3237f7c7 | 0x60806040 | 28896698 | 146 days 14 hrs ago | 0xfa659696deb10971df4accd18014f0bac66c01a4 | IN | Create: Battle | 0 MATIC | 0.074311096534 |
[ Download CSV Export ]
Contract Name:
Battle
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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 onlyOwner { 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 ); } }
// 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); }
// 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 ); }
// 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); } }
// 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"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"}]
Contract Creation Code
6080604052620151806001556103206003601c6101000a81548163ffffffff021916908363ffffffff1602179055503480156200003b57600080fd5b506040516200610038038062006100833981810160405281019062000061919062000241565b62000081620000756200010b60201b60201c565b6200011360201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000288565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020982620001dc565b9050919050565b6200021b81620001fc565b81146200022757600080fd5b50565b6000815190506200023b8162000210565b92915050565b600080604083850312156200025b576200025a620001d7565b5b60006200026b858286016200022a565b92505060206200027e858286016200022a565b9150509250929050565b615e6880620002986000396000f3fe6080604052600436106101145760003560e01c80638da5cb5b116100a0578063e2784c3a11610064578063e2784c3a14610374578063eb1892231461039f578063f2fde38b146103ca578063f84ddf0b146103f3578063fd9e2c751461041e57610114565b80638da5cb5b1461028d5780638de19482146102b8578063a142b451146102f5578063c3fe3e2814610332578063d65ab5f21461035d57610114565b80634311de8f116100e75780634311de8f146101c95780635391bcef146101e057806355ad056314610209578063715018a61461023257806383ffe5741461024957610114565b8063117a5b90146101195780631249c58b146101595780631f5a208814610163578063302a3f88146101a0575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b9190613863565b610447565b60405161015094939291906138e8565b60405180910390f35b6101616104af565b005b34801561016f57600080fd5b5061018a60048036038101906101859190613959565b6109f4565b60405161019791906139a1565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c291906139f5565b610a34565b005b3480156101d557600080fd5b506101de6110eb565b005b3480156101ec57600080fd5b50610207600480360381019061020291906139f5565b611240565b005b34801561021557600080fd5b50610230600480360381019061022b9190613959565b6122e7565b005b34801561023e57600080fd5b50610247612970565b005b34801561025557600080fd5b50610270600480360381019061026b9190613959565b612984565b604051610284989796959493929190613ace565b60405180910390f35b34801561029957600080fd5b506102a2612a3c565b6040516102af9190613b8d565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613ba8565b612a65565b6040516102ec9190613be8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613959565b612ad8565b6040516103299190613cae565b60405180910390f35b34801561033e57600080fd5b50610347612b6b565b6040516103549190613cc9565b60405180910390f35b34801561036957600080fd5b50610372612b7f565b005b34801561038057600080fd5b506103896131a1565b60405161039691906139a1565b60405180910390f35b3480156103ab57600080fd5b506103b461327a565b6040516103c19190613cf3565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613d3a565b613280565b005b3480156103ff57600080fd5b50610408613304565b6040516104159190613be8565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613863565b61331a565b005b60056020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900461ffff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905084565b62030d405a116104f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104eb90613dc4565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055990613e30565b60405180910390fd5b600034146105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059c90613e9c565b60405180910390fd5b61032063ffffffff16600360189054906101000a900463ffffffff1663ffffffff1610610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90613f08565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19336003601881819054906101000a900463ffffffff1661066490613f57565b91906101000a81548163ffffffff021916908363ffffffff16021790556040518363ffffffff1660e01b815260040161069e929190613fbf565b600060405180830381600087803b1580156106b857600080fd5b505af11580156106cc573d6000803e3d6000fd5b50505050604051806101200160405280600360189054906101000a900463ffffffff1663ffffffff168152602001600063ffffffff168152602001600060ff168152602001600061ffff168152602001600061ffff1681526020016000600181111561073b5761073a613a48565b5b81526020016000800b81526020016000800b8152602001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1a9a2946040518163ffffffff1660e01b815260040160e06040518083038186803b1580156107ba57600080fd5b505afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190614144565b81525060066000600360189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff021916908360ff16021790555060608201518160000160096101000a81548161ffff021916908361ffff160217905550608082015181600001600b6101000a81548161ffff021916908361ffff16021790555060a082015181600001600d6101000a81548160ff0219169083600181111561090657610905613a48565b5b021790555060c082015181600001600e6101000a81548160ff021916908360000b60ff16021790555060e082015181600001600f6101000a81548160ff021916908360000b60ff1602179055506101008201518160010190600761096b92919061373b565b50905050600360189054906101000a900463ffffffff1663ffffffff167f2319cc2b0bc1d09c88f78e00243fd18260e511f6ee883ec77360f2724d4ba7e960066000600360189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206001016040516109ea9190614e91565b60405180910390a2565b600080600660008463ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff16149050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610aa69190614eac565b60206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190614edc565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390614f55565b60405180910390fd5b6000600660008563ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614fc1565b60405180910390fd5b610bcb6131a1565b610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c019061502d565b60405180910390fd5b6000610c14613374565b61ffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90615099565b60405180910390fd5b60008260000b1480610c6d575060008160000b145b80610c7b575060088260000b145b80610c89575060088160000b145b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90615105565b60405180910390fd5b6000600283610cd79190615154565b60000b148015610cf657506000600282610cf19190615154565b60000b145b610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c906151d1565b60405180910390fd5b600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061523d565b60405180910390fd5b8260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600681819054906101000a900460ff16610ea09061525d565b91906101000a81548160ff021916908360ff16021790555060056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600781819054906101000a900460ff16610efb9061525d565b91906101000a81548160ff021916908360ff160217905550600460009054906101000a900461ffff16600660008563ffffffff1663ffffffff16815260200190815260200160002060000160096101000a81548161ffff021916908361ffff16021790555081600660008563ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555080600660008563ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550600460009054906101000a900461ffff1661ffff168363ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d345168484611023613374565b600163ffffffff6110349190615287565b60405161104494939291906152bb565b60405180910390a3601060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff1614156110e6576001544261109d9190615300565b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff1602179055505b505050565b6110f36133d4565b600360189054906101000a900463ffffffff1663ffffffff16600360149054906101000a900463ffffffff1663ffffffff1610611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90615380565b60405180910390fd5b6000606460336000600360149054906101000a900463ffffffff16600360189054906101000a900463ffffffff1661119d9190615287565b63ffffffff166111ad91906153a0565b6111b791906153a0565b6111c191906153fa565b9050600360189054906101000a900463ffffffff16600360146101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561123c573d6000803e3d6000fd5b5050565b62030d405a11611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90613dc4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016112f79190614eac565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190614edc565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614f55565b60405180910390fd5b6113a56131a1565b6113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db9061502d565b60405180910390fd5b60006113ee613374565b61ffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90615477565b60405180910390fd5b61143b613374565b61ffff16600660008563ffffffff1663ffffffff168152602001908152602001600020600001600b9054906101000a900461ffff1661ffff16106114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab906154e3565b60405180910390fd5b600460009054906101000a900461ffff1661ffff16600660008563ffffffff1663ffffffff16815260200190815260200160002060000160099054906101000a900461ffff1661ffff161461153e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115359061554f565b60405180910390fd5b63ffffffff8016600660008563ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1614156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906155bb565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613e30565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260000b12158015611664575060018260000b13155b801561169357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160000b12155b80156116a3575060018160000b13155b6116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990615627565b60405180910390fd5b60008260000b1480156116f8575060008160000b145b15611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90615693565b60405180910390fd5b6000600660008563ffffffff1663ffffffff168152602001908152602001600020604051806101200160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff1660ff1660ff1681526020016000820160099054906101000a900461ffff1661ffff1661ffff16815260200160008201600b9054906101000a900461ffff1661ffff1661ffff16815260200160008201600d9054906101000a900460ff16600181111561183357611832613a48565b5b600181111561184557611844613a48565b5b815260200160008201600e9054906101000a900460000b60000b60000b815260200160008201600f9054906101000a900460000b60000b60000b8152602001600182016007806020026040519081016040528092919082600780156118e5576020028201916000905b82829054906101000a900460000b60000b815260200190600101906020826000010492830192600103820291508084116118ae5790505b50505050508152505090506000838260c0015161190291906156b3565b90506000838360e0015161191691906156b3565b905060008260000b12158015611930575060088260000b13155b8015611940575060008160000b12155b8015611950575060088160000b13155b61198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690615774565b60405180910390fd5b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460c0015160000b60000b815260200190815260200160002060008460e0015160000b60000b815260200190815260200160002060006101000a81549063ffffffff0219169055600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611c1b578660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008560000b60000b815260200190815260200160002060008460000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555082600660008963ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555081600660008963ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550611b79613374565b600660008963ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600460009054906101000a900461ffff1661ffff168763ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d345168585611bfc613374565b6000604051611c0e94939291906157cf565b60405180910390a36122de565b600180811115611c2e57611c2d613a48565b5b600660008363ffffffff1663ffffffff168152602001908152602001600020600001600d9054906101000a900460ff166001811115611c7057611c6f613a48565b5b1415611f44576000846020015163ffffffff1614611d675760066000856020015163ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549060ff02191690556000820160096101000a81549061ffff021916905560008201600b6101000a81549061ffff021916905560008201600d6101000a81549060ff021916905560008201600e6101000a81549060ff021916905560008201600f6101000a81549060ff0219169055600182016000611d6491906137d8565b50505b80600660008963ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008560000b60000b815260200190815260200160002060008460000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555082600660008963ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555081600660008963ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff160217905550611ea3613374565b600660008963ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600460009054906101000a900461ffff1661ffff168763ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d345168585611f26613374565b86604051611f3794939291906152bb565b60405180910390a36122dd565b611f4c613374565b60056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055506000611f9c8883613452565b90508063ffffffff168863ffffffff1614156121e75763ffffffff600660008463ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508760056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008660000b60000b815260200190815260200160002060008560000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555083600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600e6101000a81548160ff021916908360000b60ff16021790555082600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600f6101000a81548160ff021916908360000b60ff1602179055506120f2613374565b600660008a63ffffffff1663ffffffff168152602001908152602001600020600001600b6101000a81548161ffff021916908361ffff160217905550600660008963ffffffff1663ffffffff168152602001908152602001600020600001600881819054906101000a900460ff166121699061525d565b91906101000a81548160ff021916908360ff160217905550600460009054906101000a900461ffff1661ffff168863ffffffff167fe6f09939850f0b815b655899c68919edaa9d092ee2ab13d2e26ba02795d3451686866121c8613374565b60006040516121da94939291906157cf565b60405180910390a3612280565b63ffffffff600660008a63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550600660008363ffffffff1663ffffffff168152602001908152602001600020600001600881819054906101000a900460ff166122679061525d565b91906101000a81548160ff021916908360ff1602179055505b60056000600460009054906101000a900461ffff1661ffff168152602001908152602001600020600001600781819054906101000a900460ff166122c390615814565b91906101000a81548160ff021916908360ff160217905550505b5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016123599190614eac565b60206040518083038186803b15801561237157600080fd5b505afa158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190614edc565b73ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690614f55565b60405180910390fd5b6000600660008363ffffffff1663ffffffff168152602001908152602001600020604051806101200160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff1660ff1660ff1681526020016000820160099054906101000a900461ffff1661ffff1661ffff16815260200160008201600b9054906101000a900461ffff1661ffff1661ffff16815260200160008201600d9054906101000a900460ff1660018111156124fa576124f9613a48565b5b600181111561250c5761250b613a48565b5b815260200160008201600e9054906101000a900460000b60000b60000b815260200160008201600f9054906101000a900460000b60000b60000b8152602001600182016007806020026040519081016040528092919082600780156125ac576020028201916000905b82829054906101000a900460000b60000b815260200190600101906020826000010492830192600103820291508084116125755790505b5050505050815250509050600460009054906101000a900461ffff1661ffff16816060015161ffff1610806125e657506125e46131a1565b155b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c9061588a565b60405180910390fd5b63ffffffff8016600660008463ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff16106126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906158f6565b60405180910390fd5b6000600160056000846060015161ffff16815260200190815260200160002060000160079054906101000a900460ff1660ff161415612744576064603360646126ee9190615300565b600060056000866060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff1661272991906153a0565b61273391906153a0565b61273d91906153fa565b905061289d565b600060056000846060015161ffff16815260200190815260200160002060000160079054906101000a900460ff1660056000856060015161ffff16815260200190815260200160002060000160069054906101000a900460ff166127a89190615916565b60ff1690506000811115612839576064603360646127c69190615300565b82600060056000886060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff16876040015160ff1661280a91906153a0565b61281491906153a0565b61281e91906153fa565b61282891906153a0565b61283291906153fa565b915061289b565b6064603360646128499190615300565b600060056000876060015161ffff16815260200190815260200160002060000160069054906101000a900460ff1660ff1661288491906153a0565b61288e91906153a0565b61289891906153fa565b91505b505b63ffffffff600660008563ffffffff1663ffffffff16815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550816060015161ffff167f4530ccbd0ece362625255023d43232c27b1d71e8140e8adf2611b2faeaa6c725848360405161291c92919061594a565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561296a573d6000803e3d6000fd5b50505050565b6129786133d4565b612982600061366f565b565b60066020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900460ff16908060000160099054906101000a900461ffff169080600001600b9054906101000a900461ffff169080600001600d9054906101000a900460ff169080600001600e9054906101000a900460000b9080600001600f9054906101000a900460000b905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060009054906101000a900463ffffffff16905092915050565b612ae06137df565b600660008363ffffffff1663ffffffff168152602001908152602001600020600101600780602002604051908101604052809291908260078015612b5f576020028201916000905b82829054906101000a900460000b60000b81526020019060010190602082600001049283019260010382029150808411612b285790505b50505050509050919050565b600460009054906101000a900461ffff1681565b612b876133d4565b621312d05a11612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc390613dc4565b60405180910390fd5b612bd46131a1565b15612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906159bf565b60405180910390fd5b6004600081819054906101000a900461ffff1680929190612c34906159df565b91906101000a81548161ffff021916908361ffff160217905550504260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff1602179055506000600390505b60058160000b1361315d576000600390505b60058160000b136131495760048260000b148015612cd2575060048160000b145b15612cdc57613136565b6003601c81819054906101000a900463ffffffff16612cfa90613f57565b91906101000a81548163ffffffff021916908363ffffffff160217905560056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060010160008460000b60000b815260200190815260200160002060008360000b60000b815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550600160056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160046101000a81548161ffff021916908361ffff1602179055506040518061012001604052806003601c9054906101000a900463ffffffff1663ffffffff168152602001600063ffffffff168152602001600060ff168152602001600460009054906101000a900461ffff1661ffff168152602001600061ffff168152602001600180811115612e4c57612e4b613a48565b5b81526020018360000b81526020018260000b8152602001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395ac90bc6003601c9054906101000a900463ffffffff166040518263ffffffff1660e01b8152600401612ed09190613be8565b60e06040518083038186803b158015612ee857600080fd5b505afa158015612efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f209190614144565b815250600660006003601c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff021916908360ff16021790555060608201518160000160096101000a81548161ffff021916908361ffff160217905550608082015181600001600b6101000a81548161ffff021916908361ffff16021790555060a082015181600001600d6101000a81548160ff0219169083600181111561303457613033613a48565b5b021790555060c082015181600001600e6101000a81548160ff021916908360000b60ff16021790555060e082015181600001600f6101000a81548160ff021916908360000b60ff1602179055506101008201518160010190600761309992919061373b565b50905050600460009054906101000a900461ffff1661ffff166003601c9054906101000a900463ffffffff1663ffffffff167fd49926ad2a6053895c9f78d2b83a0756b93b355502742abb3ad232d57d2b5a7e600660006003601c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060010160405161312d9190614e91565b60405180910390a35b808061314190615a0a565b915050612cb1565b50808061315590615a0a565b915050612c9f565b50600460009054906101000a900461ffff1661ffff167f8513252461c0e1f231971630c9c54812f2bac1be5103aba1b9703356fd75b2d960405160405180910390a2565b600080600460009054906101000a900461ffff1661ffff1614158015613275575060006131cc613374565b61ffff1614806132745750600660056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160049054906101000a900461ffff1661ffff166132209190615a34565b613228613374565b61ffff1611806132725750600260056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160079054906101000a900460ff1660ff16105b155b5b905090565b60015481565b6132886133d4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ef90615afc565b60405180910390fd5b6133018161366f565b50565b600360189054906101000a900463ffffffff1681565b6133226133d4565b61332a6131a1565b1561336a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613361906159bf565b60405180910390fd5b8060018190555050565b600060015460056000600460009054906101000a900461ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16426133c59190615300565b6133cf91906153fa565b905090565b6133dc613733565b73ffffffffffffffffffffffffffffffffffffffff166133fa612a3c565b73ffffffffffffffffffffffffffffffffffffffff1614613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790615b68565b60405180910390fd5b565b600080600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2dd56068787600660008b63ffffffff1663ffffffff16815260200190815260200160002060010160066000600660008e63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020600101600660008c63ffffffff1663ffffffff16815260200190815260200160002060010160066000600660008f63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206001016040518763ffffffff1660e01b81526004016135a596959493929190615b88565b6102206040518083038186803b1580156135be57600080fd5b505afa1580156135d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f69190615ce9565b925092509250613604613374565b61ffff168563ffffffff168763ffffffff167fad047a50d558ba74fa27ce9da836615f3ff4224b51e765c8faf974bdd16b9a1d858588600460009054906101000a900461ffff1660405161365b9493929190615de9565b60405180910390a482935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b826007601f016020900481019282156137c75791602002820160005b8382111561379857835183826101000a81548160ff021916908360000b60ff1602179055509260200192600101602081600001049283019260010302613757565b80156137c55782816101000a81549060ff0219169055600101602081600001049283019260010302613798565b505b5090506137d49190613801565b5090565b5060009055565b6040518060e00160405280600790602082028036833780820191505090505090565b5b8082111561381a576000816000905550600101613802565b5090565b6000604051905090565b600080fd5b6000819050919050565b6138408161382d565b811461384b57600080fd5b50565b60008135905061385d81613837565b92915050565b60006020828403121561387957613878613828565b5b60006138878482850161384e565b91505092915050565b600063ffffffff82169050919050565b6138a981613890565b82525050565b600061ffff82169050919050565b6138c6816138af565b82525050565b600060ff82169050919050565b6138e2816138cc565b82525050565b60006080820190506138fd60008301876138a0565b61390a60208301866138bd565b61391760408301856138d9565b61392460608301846138d9565b95945050505050565b61393681613890565b811461394157600080fd5b50565b6000813590506139538161392d565b92915050565b60006020828403121561396f5761396e613828565b5b600061397d84828501613944565b91505092915050565b60008115159050919050565b61399b81613986565b82525050565b60006020820190506139b66000830184613992565b92915050565b60008160000b9050919050565b6139d2816139bc565b81146139dd57600080fd5b50565b6000813590506139ef816139c9565b92915050565b600080600060608486031215613a0e57613a0d613828565b5b6000613a1c86828701613944565b9350506020613a2d868287016139e0565b9250506040613a3e868287016139e0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613a8857613a87613a48565b5b50565b6000819050613a9982613a77565b919050565b6000613aa982613a8b565b9050919050565b613ab981613a9e565b82525050565b613ac8816139bc565b82525050565b600061010082019050613ae4600083018b6138a0565b613af1602083018a6138a0565b613afe60408301896138d9565b613b0b60608301886138bd565b613b1860808301876138bd565b613b2560a0830186613ab0565b613b3260c0830185613abf565b613b3f60e0830184613abf565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7782613b4c565b9050919050565b613b8781613b6c565b82525050565b6000602082019050613ba26000830184613b7e565b92915050565b60008060408385031215613bbf57613bbe613828565b5b6000613bcd858286016139e0565b9250506020613bde858286016139e0565b9150509250929050565b6000602082019050613bfd60008301846138a0565b92915050565b600060079050919050565b600081905092915050565b6000819050919050565b613c2c816139bc565b82525050565b6000613c3e8383613c23565b60208301905092915050565b6000602082019050919050565b613c6081613c03565b613c6a8184613c0e565b9250613c7582613c19565b8060005b83811015613ca6578151613c8d8782613c32565b9650613c9883613c4a565b925050600181019050613c79565b505050505050565b600060e082019050613cc36000830184613c57565b92915050565b6000602082019050613cde60008301846138bd565b92915050565b613ced8161382d565b82525050565b6000602082019050613d086000830184613ce4565b92915050565b613d1781613b6c565b8114613d2257600080fd5b50565b600081359050613d3481613d0e565b92915050565b600060208284031215613d5057613d4f613828565b5b6000613d5e84828501613d25565b91505092915050565b600082825260208201905092915050565b7f676173206661696c736166650000000000000000000000000000000000000000600082015250565b6000613dae600c83613d67565b9150613db982613d78565b602082019050919050565b60006020820190508181036000830152613ddd81613da1565b9050919050565b7f6e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b6000613e1a600c83613d67565b9150613e2582613de4565b602082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f4645455f454e5452590000000000000000000000000000000000000000000000600082015250565b6000613e86600983613d67565b9150613e9182613e50565b602082019050919050565b60006020820190508181036000830152613eb581613e79565b9050919050565b7f737570706c79206c696d69740000000000000000000000000000000000000000600082015250565b6000613ef2600c83613d67565b9150613efd82613ebc565b602082019050919050565b60006020820190508181036000830152613f2181613ee5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f6282613890565b915063ffffffff821415613f7957613f78613f28565b5b600182019050919050565b6000819050919050565b6000613fa9613fa4613f9f84613890565b613f84565b61382d565b9050919050565b613fb981613f8e565b82525050565b6000604082019050613fd46000830185613b7e565b613fe16020830184613fb0565b9392505050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61403682613fed565b810181811067ffffffffffffffff8211171561405557614054613ffe565b5b80604052505050565b600061406861381e565b9050614074828261402d565b919050565b600067ffffffffffffffff82111561409457614093613ffe565b5b602082029050919050565b600080fd5b6000815190506140b3816139c9565b92915050565b60006140cc6140c784614079565b61405e565b905080602084028301858111156140e6576140e561409f565b5b835b8181101561410f57806140fb88826140a4565b8452602084019350506020810190506140e8565b5050509392505050565b600082601f83011261412e5761412d613fe8565b5b600761413b8482856140b9565b91505092915050565b600060e0828403121561415a57614159613828565b5b600061416884828501614119565b91505092915050565b600060079050919050565b6000819050919050565b60008160001c9050919050565b60008160000b9050919050565b60006141b36141ae83614186565b614193565b9050919050565b60008160081c9050919050565b60006141da6141d5836141ba565b614193565b9050919050565b60008160101c9050919050565b60006142016141fc836141e1565b614193565b9050919050565b60008160181c9050919050565b600061422861422383614208565b614193565b9050919050565b60008160201c9050919050565b600061424f61424a8361422f565b614193565b9050919050565b60008160281c9050919050565b600061427661427183614256565b614193565b9050919050565b60008160301c9050919050565b600061429d6142988361427d565b614193565b9050919050565b60008160381c9050919050565b60006142c46142bf836142a4565b614193565b9050919050565b60008160401c9050919050565b60006142eb6142e6836142cb565b614193565b9050919050565b60008160481c9050919050565b600061431261430d836142f2565b614193565b9050919050565b60008160501c9050919050565b600061433961433483614319565b614193565b9050919050565b60008160581c9050919050565b600061436061435b83614340565b614193565b9050919050565b60008160601c9050919050565b600061438761438283614367565b614193565b9050919050565b60008160681c9050919050565b60006143ae6143a98361438e565b614193565b9050919050565b60008160701c9050919050565b60006143d56143d0836143b5565b614193565b9050919050565b60008160781c9050919050565b60006143fc6143f7836143dc565b614193565b9050919050565b60008160801c9050919050565b600061442361441e83614403565b614193565b9050919050565b60008160881c9050919050565b600061444a6144458361442a565b614193565b9050919050565b60008160901c9050919050565b600061447161446c83614451565b614193565b9050919050565b60008160981c9050919050565b600061449861449383614478565b614193565b9050919050565b60008160a01c9050919050565b60006144bf6144ba8361449f565b614193565b9050919050565b60008160a81c9050919050565b60006144e66144e1836144c6565b614193565b9050919050565b60008160b01c9050919050565b600061450d614508836144ed565b614193565b9050919050565b60008160b81c9050919050565b600061453461452f83614514565b614193565b9050919050565b60008160c01c9050919050565b600061455b6145568361453b565b614193565b9050919050565b60008160c81c9050919050565b600061458261457d83614562565b614193565b9050919050565b60008160d01c9050919050565b60006145a96145a483614589565b614193565b9050919050565b60008160d81c9050919050565b60006145d06145cb836145b0565b614193565b9050919050565b60008160e01c9050919050565b60006145f76145f2836145d7565b614193565b9050919050565b60008160e81c9050919050565b600061461e614619836145fe565b614193565b9050919050565b60008160f01c9050919050565b600061464561464083614625565b614193565b9050919050565b60008160f81c9050919050565b600061466c6146678361464c565b614193565b9050919050565b61467c81614171565b6146868184613c0e565b9250826146928361417c565b600080156149be575b836001602003820110156149bd5781546146bd876146b8836141a0565b613c23565b6020870196506146d5876146d0836141c7565b613c23565b6020870196506146ed876146e8836141ee565b613c23565b6020870196506147058761470083614215565b613c23565b60208701965061471d876147188361423c565b613c23565b6020870196506147358761473083614263565b613c23565b60208701965061474d876147488361428a565b613c23565b60208701965061476587614760836142b1565b613c23565b60208701965061477d87614778836142d8565b613c23565b60208701965061479587614790836142ff565b613c23565b6020870196506147ad876147a883614326565b613c23565b6020870196506147c5876147c08361434d565b613c23565b6020870196506147dd876147d883614374565b613c23565b6020870196506147f5876147f08361439b565b613c23565b60208701965061480d87614808836143c2565b613c23565b60208701965061482587614820836143e9565b613c23565b60208701965061483d8761483883614410565b613c23565b6020870196506148558761485083614437565b613c23565b60208701965061486d876148688361445e565b613c23565b6020870196506148858761488083614485565b613c23565b60208701965061489d87614898836144ac565b613c23565b6020870196506148b5876148b0836144d3565b613c23565b6020870196506148cd876148c8836144fa565b613c23565b6020870196506148e5876148e083614521565b613c23565b6020870196506148fd876148f883614548565b613c23565b602087019650614915876149108361456f565b613c23565b60208701965061492d8761492883614596565b613c23565b60208701965061494587614940836145bd565b613c23565b60208701965061495d87614958836145e4565b613c23565b602087019650614975876149708361460b565b613c23565b60208701965061498d8761498883614632565b613c23565b6020870196506149a5876149a083614659565b613c23565b6020870196506001830192505060208101905061469b565b5b600115614e895781546001156149ed576149e0876149db836141a0565b613c23565b6020870196506001820191505b600115614a1357614a0687614a01836141c7565b613c23565b6020870196506001820191505b600115614a3957614a2c87614a27836141ee565b613c23565b6020870196506001820191505b600115614a5f57614a5287614a4d83614215565b613c23565b6020870196506001820191505b600115614a8557614a7887614a738361423c565b613c23565b6020870196506001820191505b600115614aab57614a9e87614a9983614263565b613c23565b6020870196506001820191505b600115614ad157614ac487614abf8361428a565b613c23565b6020870196506001820191505b600015614af757614aea87614ae5836142b1565b613c23565b6020870196506001820191505b600015614b1d57614b1087614b0b836142d8565b613c23565b6020870196506001820191505b600015614b4357614b3687614b31836142ff565b613c23565b6020870196506001820191505b600015614b6957614b5c87614b5783614326565b613c23565b6020870196506001820191505b600015614b8f57614b8287614b7d8361434d565b613c23565b6020870196506001820191505b600015614bb557614ba887614ba383614374565b613c23565b6020870196506001820191505b600015614bdb57614bce87614bc98361439b565b613c23565b6020870196506001820191505b600015614c0157614bf487614bef836143c2565b613c23565b6020870196506001820191505b600015614c2757614c1a87614c15836143e9565b613c23565b6020870196506001820191505b600015614c4d57614c4087614c3b83614410565b613c23565b6020870196506001820191505b600015614c7357614c6687614c6183614437565b613c23565b6020870196506001820191505b600015614c9957614c8c87614c878361445e565b613c23565b6020870196506001820191505b600015614cbf57614cb287614cad83614485565b613c23565b6020870196506001820191505b600015614ce557614cd887614cd3836144ac565b613c23565b6020870196506001820191505b600015614d0b57614cfe87614cf9836144d3565b613c23565b6020870196506001820191505b600015614d3157614d2487614d1f836144fa565b613c23565b6020870196506001820191505b600015614d5757614d4a87614d4583614521565b613c23565b6020870196506001820191505b600015614d7d57614d7087614d6b83614548565b613c23565b6020870196506001820191505b600015614da357614d9687614d918361456f565b613c23565b6020870196506001820191505b600015614dc957614dbc87614db783614596565b613c23565b6020870196506001820191505b600015614def57614de287614ddd836145bd565b613c23565b6020870196506001820191505b600015614e1557614e0887614e03836145e4565b613c23565b6020870196506001820191505b600015614e3b57614e2e87614e298361460b565b613c23565b6020870196506001820191505b600015614e6157614e5487614e4f83614632565b613c23565b6020870196506001820191505b600015614e8757614e7a87614e7583614659565b613c23565b6020870196506001820191505b505b505050505050565b600060e082019050614ea66000830184614673565b92915050565b6000602082019050614ec16000830184613fb0565b92915050565b600081519050614ed681613d0e565b92915050565b600060208284031215614ef257614ef1613828565b5b6000614f0084828501614ec7565b91505092915050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b6000614f3f600583613d67565b9150614f4a82614f09565b602082019050919050565b60006020820190508181036000830152614f6e81614f32565b9050919050565b7f656e746572656400000000000000000000000000000000000000000000000000600082015250565b6000614fab600783613d67565b9150614fb682614f75565b602082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f67616d65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000615017600f83613d67565b915061502282614fe1565b602082019050919050565b600060208201905081810360008301526150468161500a565b9050919050565b7f6e6f7420656e7472792074696d65000000000000000000000000000000000000600082015250565b6000615083600e83613d67565b915061508e8261504d565b602082019050919050565b600060208201905081810360008301526150b281615076565b9050919050565b7f6564676500000000000000000000000000000000000000000000000000000000600082015250565b60006150ef600483613d67565b91506150fa826150b9565b602082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515f826139bc565b915061516a836139bc565b92508261517a57615179615125565b5b828207905092915050565b7f706f736974696f6e000000000000000000000000000000000000000000000000600082015250565b60006151bb600883613d67565b91506151c682615185565b602082019050919050565b600060208201905081810360008301526151ea816151ae565b9050919050565b7f6f63637570696564000000000000000000000000000000000000000000000000600082015250565b6000615227600883613d67565b9150615232826151f1565b602082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b6000615268826138cc565b915060ff82141561527c5761527b613f28565b5b600182019050919050565b600061529282613890565b915061529d83613890565b9250828210156152b0576152af613f28565b5b828203905092915050565b60006080820190506152d06000830187613abf565b6152dd6020830186613abf565b6152ea60408301856138bd565b6152f760608301846138a0565b95945050505050565b600061530b8261382d565b91506153168361382d565b92508282101561532957615328613f28565b5b828203905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b600061536a600983613d67565b915061537582615334565b602082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b60006153ab8261382d565b91506153b68361382d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ef576153ee613f28565b5b828202905092915050565b60006154058261382d565b91506154108361382d565b9250826154205761541f615125565b5b828204905092915050565b7f7374696c6c20656e7472792074696d6500000000000000000000000000000000600082015250565b6000615461601083613d67565b915061546c8261542b565b602082019050919050565b6000602082019050818103600083015261549081615454565b9050919050565b7f616c7265616479206d6f76656400000000000000000000000000000000000000600082015250565b60006154cd600d83613d67565b91506154d882615497565b602082019050919050565b600060208201905081810360008301526154fc816154c0565b9050919050565b7f6e6f7420696e2067616d65000000000000000000000000000000000000000000600082015250565b6000615539600b83613d67565b915061554482615503565b602082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b7f746f6b656e206465616400000000000000000000000000000000000000000000600082015250565b60006155a5600a83613d67565b91506155b08261556f565b602082019050919050565b600060208201905081810360008301526155d481615598565b9050919050565b7f72616e6765000000000000000000000000000000000000000000000000000000600082015250565b6000615611600583613d67565b915061561c826155db565b602082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f73746174696f6e61727900000000000000000000000000000000000000000000600082015250565b600061567d600a83613d67565b915061568882615647565b602082019050919050565b600060208201905081810360008301526156ac81615670565b9050919050565b60006156be826139bc565b91506156c9836139bc565b925081607f038313600083121516156156e5576156e4613f28565b5b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8003831260008312161561571d5761571c613f28565b5b828201905092915050565b7f626f756e64730000000000000000000000000000000000000000000000000000600082015250565b600061575e600683613d67565b915061576982615728565b602082019050919050565b6000602082019050818103600083015261578d81615751565b9050919050565b6000819050919050565b60006157b96157b46157af84615794565b613f84565b613890565b9050919050565b6157c98161579e565b82525050565b60006080820190506157e46000830187613abf565b6157f16020830186613abf565b6157fe60408301856138bd565b61580b60608301846157c0565b95945050505050565b600061581f826138cc565b9150600082141561583357615832613f28565b5b600182039050919050565b7f6e6f74207965742077696e6e6572000000000000000000000000000000000000600082015250565b6000615874600e83613d67565b915061587f8261583e565b602082019050919050565b600060208201905081810360008301526158a381615867565b9050919050565b7f6e6f2077696e6e696e6773000000000000000000000000000000000000000000600082015250565b60006158e0600b83613d67565b91506158eb826158aa565b602082019050919050565b6000602082019050818103600083015261590f816158d3565b9050919050565b6000615921826138cc565b915061592c836138cc565b92508282101561593f5761593e613f28565b5b828203905092915050565b600060408201905061595f60008301856138a0565b61596c6020830184613ce4565b9392505050565b7f67616d6520616374697665000000000000000000000000000000000000000000600082015250565b60006159a9600b83613d67565b91506159b482615973565b602082019050919050565b600060208201905081810360008301526159d88161599c565b9050919050565b60006159ea826138af565b915061ffff8214156159ff576159fe613f28565b5b600182019050919050565b6000615a15826139bc565b9150607f821415615a2957615a28613f28565b5b600182019050919050565b6000615a3f8261382d565b9150615a4a8361382d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615a7f57615a7e613f28565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615ae6602683613d67565b9150615af182615a8a565b604082019050919050565b60006020820190508181036000830152615b1581615ad9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615b52602083613d67565b9150615b5d82615b1c565b602082019050919050565b60006020820190508181036000830152615b8181615b45565b9050919050565b60006103c082019050615b9e60008301896138a0565b615bab60208301886138a0565b615bb86040830187614673565b615bc6610120830186614673565b615bd4610200830185614673565b615be26102e0830184614673565b979650505050505050565b600081519050615bfc8161392d565b92915050565b600067ffffffffffffffff821115615c1d57615c1c613ffe565b5b602082029050919050565b6000819050919050565b615c3b81615c28565b8114615c4657600080fd5b50565b600081519050615c5881615c32565b92915050565b6000615c71615c6c84615c02565b61405e565b90508060208402830185811115615c8b57615c8a61409f565b5b835b81811015615cb45780615ca08882615c49565b845260208401935050602081019050615c8d565b5050509392505050565b600082601f830112615cd357615cd2613fe8565b5b6008615ce0848285615c5e565b91505092915050565b60008060006102208486031215615d0357615d02613828565b5b6000615d1186828701615bed565b9350506020615d2286828701615cbe565b925050610120615d3486828701615cbe565b9150509250925092565b600060089050919050565b600081905092915050565b6000819050919050565b615d6781615c28565b82525050565b6000615d798383615d5e565b60208301905092915050565b6000602082019050919050565b615d9b81615d3e565b615da58184615d49565b9250615db082615d54565b8060005b83811015615de1578151615dc88782615d6d565b9650615dd383615d85565b925050600181019050615db4565b505050505050565b600061024082019050615dff6000830187615d92565b615e0d610100830186615d92565b615e1b6102008301856138a0565b615e296102208301846138bd565b9594505050505056fea26469706673582212200efbb93371da029b4b6e1879fc36022431979d222cf5a15b5945691d20a9319464736f6c634300080900330000000000000000000000000ad3bf0033bbf43e758dda0000ba3c49c1613f0f000000000000000000000000f56d8be50c3b133c860ce8d2eef974654d574bb8
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
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|