Contract 0xbB9C55d014Ce22782374180f7525B0B05Eb152a2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x794ba0a6a9ce6a7f672044c5ec5b6e651c7d69018887f2305d3788124584b79eStake For331358562022-09-15 12:10:1012 days 21 hrs ago0x21e2a6fcca3d051928085c746043be57193178c7 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.003499739047 35.016999998
0xc41ddddae92e40468ccac92214607a16a09813a3f3aa0b417ac173acf353c905Get Random Numbe...324207552022-08-28 17:49:3830 days 15 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.008777259298 30.118209013
0xf0d7f943695694b3b8cb686de10992cc8ab659e515a3e65320ee1921932f7fe8Get Random Numbe...324207052022-08-28 17:47:5430 days 15 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.008742810002 30.00000001
0xfc6634f32f5a091549dbe11feee7235b02f07df745543c0ff5ac9a7b27817e39Get Random Numbe...290685662022-06-02 9:33:41117 days 23 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.009255810005 30.000000018
0x2ad8a0bb1566a17a923311749d89456061037cf84430d622103608ebf596e814Perfect Withdraw288741142022-05-28 13:57:11122 days 19 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002118459304 32.922937012
0x68ef62a22db831073494fca706c1b5b1ca5d3ab4783cb61c01137a7619f60003Get Random Numbe...284653972022-05-18 10:39:52132 days 22 hrs ago0x597fe345897558afe7e2f4e784e71457b5bb69d4 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.011301237199 38.799999998
0x03cc4e421e9573ae5a58b016804f02e87dc93708fdc1d8d021e352f0a449da45Get Random Numbe...284434422022-05-17 21:18:00133 days 12 hrs ago0x597fe345897558afe7e2f4e784e71457b5bb69d4 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.012901311253 41.826399999
0x30a67d924639ae520345558fe5844c57442a948adfa2b71e7abb0614e4bfe61bStake For284346632022-05-17 15:56:18133 days 17 hrs ago0x597fe345897558afe7e2f4e784e71457b5bb69d4 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.008533804223 85.396111589
0x5ff200610e85d4a3db27473b9f091b7953dd70d944385152e7d9523cd69cc300Stake For283128132022-05-14 15:42:23136 days 17 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.006920402337 69.25943092
0x0e5029b71efbbc6d065977747b7e8096aa27dde8db4536e6b78bb99d07e2d6e3Stake For282919822022-05-14 3:09:29137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002351053175 35.754200012
0xaf139a114de0615c702b6b30b1e8831f2fe341cf38d69660849bf1f108455cabWithdraw282919672022-05-14 3:08:25137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002361205428 34.115056835
0xa51e9f4eab334215cc767bee92afedaae54c4294bdb7a3538a837403cd90884fStake For282910542022-05-14 2:37:03137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002454417383 37.34658222
0x7d0efb270d891b2f052d22e542f746022d4d83f36b355df843b2d7bc50aa1f05Withdraw282909492022-05-14 2:33:29137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002449459957 35.390171759
0xc1b0c51054c1080e68cc38d6245fbb67cba5e947260d20ed66c5b4ecb49e2bacGet Random Numbe...282908632022-05-14 2:30:29137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.009775831214 33.54308836
0x9851201a76e00349f12095de6345b0962677ee623ec6227c5cd29886a0e2d293Get Random Numbe...282907832022-05-14 2:27:45137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.011406205754 31.697904782
0x10f0ebe5339c1ab0efca35ebcd6a1967ef19f7573a0179ba8be4a770eb16d8c9Stake For282907632022-05-14 2:27:05137 days 6 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.003060180733 30.626308383
0x4a0026cc600a2c450c2b41cfd65ae9a4512f09d725abd0d710c18aca406d4334Stake For282893402022-05-14 1:33:51137 days 7 hrs ago0x5eea5b30c7b35bb2b5ad177b477bb6ba77da849d IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.003018597209 30.202885715
0x107e0d73f763e55d31311bd7a0b3f3fce6d8b2668efa187fabe5c57bcc6137e2Withdraw282892622022-05-14 1:31:11137 days 7 hrs ago0x5798659253a33d32723a88ecbe5ef37bb8332d5d IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.002348559158 33.950000116
0xb467e86f7a343bba450fc0aef7ccd6dd6e6a4a51594e5bc63670177ab85c38c6Stake For282882942022-05-14 0:57:48137 days 8 hrs ago0x5798659253a33d32723a88ecbe5ef37bb8332d5d IN  0xbb9c55d014ce22782374180f7525b0b05eb152a20 MATIC0.003247400001 32.500000014
0x4953c00d0aa6ff7da4ef297eb11d72ae7df2e94fa83443f1815e48d5cf3bb3000x60c06040282853632022-05-13 23:14:53137 days 10 hrs ago0x5798659253a33d32723a88ecbe5ef37bb8332d5d IN  Create: ForgeGuess0 MATIC0.057592765565 32.50000173
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ForgeGuess

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-13
*/

// File: @chainlink/contracts/src/v0.8/VRFRequestIDBase.sol


pragma solidity ^0.8.0;

contract VRFRequestIDBase {
  /**
   * @notice returns the seed which is actually input to the VRF coordinator
   *
   * @dev To prevent repetition of VRF output due to repetition of the
   * @dev user-supplied seed, that seed is combined in a hash with the
   * @dev user-specific nonce, and the address of the consuming contract. The
   * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in
   * @dev the final seed, but the nonce does protect against repetition in
   * @dev requests which are included in a single block.
   *
   * @param _userSeed VRF seed input provided by user
   * @param _requester Address of the requesting contract
   * @param _nonce User-specific nonce at the time of the request
   */
  function makeVRFInputSeed(
    bytes32 _keyHash,
    uint256 _userSeed,
    address _requester,
    uint256 _nonce
  ) internal pure returns (uint256) {
    return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce)));
  }

  /**
   * @notice Returns the id for this request
   * @param _keyHash The serviceAgreement ID to be used for this request
   * @param _vRFInputSeed The seed to be passed directly to the VRF
   * @return The id for this request
   *
   * @dev Note that _vRFInputSeed is not the seed passed by the consuming
   * @dev contract, but the one generated by makeVRFInputSeed
   */
  function makeRequestId(bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) {
    return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed));
  }
}

// File: @chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol


pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

  function approve(address spender, uint256 value) external returns (bool success);

  function balanceOf(address owner) external view returns (uint256 balance);

  function decimals() external view returns (uint8 decimalPlaces);

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

  function symbol() external view returns (string memory tokenSymbol);

  function totalSupply() external view returns (uint256 totalTokensIssued);

  function transfer(address to, uint256 value) external returns (bool success);

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

// File: @chainlink/contracts/src/v0.8/VRFConsumerBase.sol


pragma solidity ^0.8.0;



/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constructor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator, _link) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash), and have told you the minimum LINK
 * @dev price for VRF service. Make sure your contract has sufficient LINK, and
 * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you
 * @dev want to generate randomness from.
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomness method.
 *
 * @dev The randomness argument to fulfillRandomness is the actual random value
 * @dev generated from your seed.
 *
 * @dev The requestId argument is generated from the keyHash and the seed by
 * @dev makeRequestId(keyHash, seed). If your contract could have concurrent
 * @dev requests open, you can use the requestId to track which seed is
 * @dev associated with which randomness. See VRFRequestIDBase.sol for more
 * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.)
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ. (Which is critical to making unpredictable randomness! See the
 * @dev next section.)
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the ultimate input to the VRF is mixed with the block hash of the
 * @dev block in which the request is made, user-provided seeds have no impact
 * @dev on its economic security properties. They are only included for API
 * @dev compatability with previous versions of this contract.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request.
 */
abstract contract VRFConsumerBase is VRFRequestIDBase {
  /**
   * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBase expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomness the VRF output
   */
  function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual;

  /**
   * @dev In order to keep backwards compatibility we have kept the user
   * seed field around. We remove the use of it because given that the blockhash
   * enters later, it overrides whatever randomness the used seed provides.
   * Given that it adds no security, and can easily lead to misunderstandings,
   * we have removed it from usage and can now provide a simpler API.
   */
  uint256 private constant USER_SEED_PLACEHOLDER = 0;

  /**
   * @notice requestRandomness initiates a request for VRF output given _seed
   *
   * @dev The fulfillRandomness method receives the output, once it's provided
   * @dev by the Oracle, and verified by the vrfCoordinator.
   *
   * @dev The _keyHash must already be registered with the VRFCoordinator, and
   * @dev the _fee must exceed the fee specified during registration of the
   * @dev _keyHash.
   *
   * @dev The _seed parameter is vestigial, and is kept only for API
   * @dev compatibility with older versions. It can't *hurt* to mix in some of
   * @dev your own randomness, here, but it's not necessary because the VRF
   * @dev oracle will mix the hash of the block containing your request into the
   * @dev VRF seed it ultimately uses.
   *
   * @param _keyHash ID of public key against which randomness is generated
   * @param _fee The amount of LINK to send with the request
   *
   * @return requestId unique ID for this request
   *
   * @dev The returned requestId can be used to distinguish responses to
   * @dev concurrent requests. It is passed as the first argument to
   * @dev fulfillRandomness.
   */
  function requestRandomness(bytes32 _keyHash, uint256 _fee) internal returns (bytes32 requestId) {
    LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER));
    // This is the seed passed to VRFCoordinator. The oracle will mix this with
    // the hash of the block containing this request to obtain the seed/input
    // which is finally passed to the VRF cryptographic machinery.
    uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]);
    // nonces[_keyHash] must stay in sync with
    // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above
    // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest).
    // This provides protection against the user repeating their input seed,
    // which would result in a predictable/duplicate output, if multiple such
    // requests appeared in the same block.
    nonces[_keyHash] = nonces[_keyHash] + 1;
    return makeRequestId(_keyHash, vRFSeed);
  }

  LinkTokenInterface internal immutable LINK;
  address private immutable vrfCoordinator;

  // Nonces for each VRF key from which randomness has been requested.
  //
  // Must stay in sync with VRFCoordinator[_keyHash][this]
  mapping(bytes32 => uint256) /* keyHash */ /* nonce */
    private nonces;

  /**
   * @param _vrfCoordinator address of VRFCoordinator contract
   * @param _link address of LINK token contract
   *
   * @dev https://docs.chain.link/docs/link-token-contracts
   */
  constructor(address _vrfCoordinator, address _link) {
    vrfCoordinator = _vrfCoordinator;
    LINK = LinkTokenInterface(_link);
  }

  // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
  // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
  // the origin of the call
  function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external {
    require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill");
    fulfillRandomness(requestId, randomness);
  }
}

// File: contracts/ForgeGuess.sol

// Forge Guess - Contract
//
// Forge Guess allows users to guess a number 1-97 and hope a random number 0-99 is lower.  
// Odds and bet maximums are calculated automatically at the contract level. Forge tokens using chainlink VRF.
// House edge of 0.5% - 10% depending on bet size.
//
// Forge Guess gives 100% of all profits to investors of the contract. 
// Invest Forge and become the house and make Forge when users use this contract!
// 2.5% Withdrawl fee goes 100% back to investors to promote longeviity!

pragma solidity ^0.8.7;


/**
 * Request testnet LINK and ETH here: https://faucets.chain.link/
 * Find information on LINK Token Contracts and get the latest ETH and LINK faucets here: https://docs.chain.link/docs/link-token-contracts/
 */
 interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ForgeGuess is VRFConsumerBase {

    bytes32 internal keyHash;
    uint256 internal fee;
    //Guess Storage
    uint256 public betid = 0;
    uint256 public betidIN = 0;
    mapping(uint256 => uint256) public betResults;
    mapping(uint256 => uint256) public blockNumForBetID;
    mapping(uint256 => uint256) public betAmt;
    mapping(uint256 => uint256) public betOdds;
    mapping(uint256 => uint256) public randomNumber;
    mapping(uint256 => address) public betee;
    mapping(uint256 => uint256) public winnings;
    mapping(address => int) public profitz;
    mapping(address => int) public profitzGuess;

    uint256 public randomResult;
    uint256 public unreleased = 0;
    uint256 public totalSupply = 1;
    
    mapping(address => uint256) private _balances;
    
    IERC20 public stakedToken = IERC20(0xF44fB43066F7ECC91058E3A614Fb8A15A2735276);
    
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event GuessNote(uint256 UsersGuess, uint256 amount, address indexed user, uint256 betID);
    event ShowAnswer(uint256 UsersGuess, uint256 Result, uint256 amountWagered, uint256 betID, address indexed AddressOfGuesser, uint256 AmountWon, uint256 chainlinkRandom);
    
    
    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    
    string constant _transferErrorMessage = "staked token transfer failed";
    
    /**
     * Constructor inherits VRFConsumerBase
     * 
     * Network: Mumbai
     * Chainlink VRF Coordinator address: 0x8C7382F9D8f56b33781fE506E897a4F1e2d17255
     * LINK token address:                0x326C977E6efc84E512bB9C30f76E30c160eD06FB
     * Key Hash: 0x6e75b569a01ef56d18cab6a8e71e6600d6ce853834d4a5748b720d06f878b3a4
     */
    constructor() 
        VRFConsumerBase(
            0x3d2341ADb2D31f1c5530cDC622016af293177AE0, // VRF Coordinator
            0xb0897686c545045aFc77CF20eC7A532E3120E0F1  // LINK Token
        )
    {
        
        keyHash = 0xf86195cf7690c55907b2b611ebb7343a6f649bff128701cc542f0569e2c549da;
        fee = 1 * 10 ** 14; // 0.0001 LINK
    }
    
    /** 
     * Requests randomness 
     */
    function getRandomNumber(uint256 guess, uint256 amt, uint256 extraLINK) public returns (bytes32 requestId) {
        uint256 esT = estOUTPUT(amt, guess);
        require(amt < esT, "You will loose money everytime at these settings");
        require(amt >= 10**18, "Min bet 1 Forge");
        require(extraLINK >= 1, "Must send at least the minimum 0.0001"); //Allows increase in fees to be handled
        require(MaxINForGuess(guess) >= amt , "Bankroll too low for this bet, Please lower bet"); //MaxBet Amounts   
        require(guess<98 && guess > 0, "Must guess between 1-98");
        require(stakedToken.transferFrom(msg.sender, address(this), amt), "Transfer must work");
        
        uint256 lBal = LINK.balanceOf(address(this));
        //Free chainlink for player rolls
        if(extraLINK > 1){
        LINK.transferFrom(msg.sender, address(this), (fee * (extraLINK-1)));
        }
        if(amt < (10 * 10 ** 18)){
            LINK.transferFrom(msg.sender, address(this), fee * extraLINK);
        }else if(amt < 50 * 10 ** 18 ){
            if(betidIN > 100000 || lBal < fee * 21){  //Must seed with 10 link = 100,000 * 0.0001 = 10 LINK
                LINK.transferFrom(msg.sender, address(this), fee * extraLINK);
            }
        }else if(guess <= 93)
        {
            if(lBal < fee*21 ){
                LINK.transferFrom(msg.sender, address(this), fee * extraLINK);
            }
        }else
        {
            if(lBal < fee*21 ){
                LINK.transferFrom(msg.sender, address(this), fee * extraLINK);
            }
        }
        betOdds[betidIN] = guess;
        betAmt[betidIN] = amt;
        betee[betidIN] = msg.sender;
        winnings[betidIN] = esT;
        profitzGuess[msg.sender] -= int(amt);
        blockNumForBetID[betidIN] = block.number;
        emit GuessNote(guess, amt, msg.sender, betidIN);
        betidIN++;
        unreleased +=  amt;
        return requestRandomness(keyHash, fee * extraLINK);
    }

    function lastBlockFilled() public view returns (uint256){
        if(betid == betidIN){
            return block.number;
        }
        return blockNumForBetID[betid];
    }

    // Max AMT for a certien guess
     function MaxINForGuess(uint256 guess) public view returns (uint256){
         //AT 50% chance u get 1/23 of bankroll to bet
         uint256 ret = ((IERC20(address(stakedToken)).balanceOf(address(this)) - unreleased) * guess) / (50 * 21);
         return ret;
     }

    function penalty () public view returns (uint num){

        uint tot = 0;
        for(uint x = betid; x<betidIN; x++){
            tot += winnings[x];
        }
      
      return tot;
    }
 
    //Incase of Chainlink failure
    function getBlank(uint256 extraLINK) public returns (bytes32 requestId) {
        LINK.transferFrom(msg.sender, address(this), fee * extraLINK);

        return requestRandomness(keyHash, fee * extraLINK);
    }

    /**
     * Callback function used by VRF Coordinator
     */
    function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
        if(betid >= betidIN){
            return;
        }
        
        require(betid < betidIN, "Must have new bets");
        
        randomNumber[betid] = randomness;
        betResults[betid] = randomness % 100;
        address Guesser = betee[betid];
        uint256 odds = betOdds[betid];
        uint256 betAmount = betAmt[betid];
        uint256 esT = winnings[betid];
        if(randomness%100 < odds){
            profitzGuess[Guesser] += int(esT);
            stakedToken.transfer(Guesser, esT);
        }else{
            stakedToken.transfer(Guesser, 1);
            profitzGuess[Guesser] += int(1);
            winnings[betid] = 1;
        }
        unreleased -= betAmount;
        emit ShowAnswer(odds, randomness%100, betAmount,  betid, Guesser, winnings[betid], randomness);
        betid++;
    }

    //Stake and become the house
    function stakeFor(address forWhom, uint256 amount) public virtual {
        IERC20 st = stakedToken;
        require(amount > 0, "Cannot stake 0");

        unchecked { 
            uint toAdd = (amount * totalSupply) / (IERC20(address(stakedToken)).balanceOf(address(this)) - unreleased);
            _balances[forWhom] += toAdd;
            totalSupply += toAdd;
            profitz[forWhom] -= int(amount);
        }
        
        require(st.transferFrom(msg.sender, address(this), amount), _transferErrorMessage);
            
        emit Staked(forWhom, amount);
    }

    function maxGuessPerInput(uint guess, uint amt) public view returns(uint){
        uint x = 0;
    
        for(x =0; x<90; x++){
            if(MaxINForGuess(98-x) < amt){
                amt = MaxINForGuess(99-x);
            }
            if(estOUTPUT(amt, 99 - x) > amt){
                break;
            }
        }
        return 99 - x;
    }

    //Output Amount of payout based on odds and bet
    function estOUTPUT(uint256 betAmount, uint256 odds) public view returns (uint256){
        uint256 ratioz = (IERC20(address(stakedToken)).balanceOf(address(this)) - unreleased) * 50 / (betAmount * odds);
        uint256 estOutput = 0;
            if(ratioz < 30){

            estOutput = (100 * 90 * betAmount)/(odds*100);

            }else if(ratioz < 50){

            estOutput = (100 * 93 * betAmount)/(odds * 100);
                
            }else if(ratioz < 100){

            estOutput = (100 * 96 * betAmount)/(odds * 100);
                
            }else if(ratioz < 200){

            estOutput = (100 * 98 * betAmount)/(odds * 100);
            
            }else if(ratioz < 400){

            estOutput = (100 * 99 * betAmount)/(odds * 100);

            }else if (ratioz < 1000){
                
            estOutput = (100 * 995 * betAmount)/(odds * 1000);

            }else {
                
            estOutput = (100 * 99 * betAmount)/(odds * 100);

            }
            
            return estOutput;

     }

    //Withdrawl Estimator
    function withEstimator(uint256 amountOut) public view returns (uint256) {
        uint256 v = (975 * uOut(amountOut) / 1000);
        return v;
    }
    
    //Withdrawl Estimator
    function currentForge(address forWhom) public view returns (uint256) {
        uint256 v = (975 * uOut(balanceOf(forWhom)) / 1000);
        return v;
    }
    

        
    
    //Prevents you from withdrawing if large bets in play
    function perfectWithdraw(uint maxLoss) public {
    
         withdraw(balanceOf(msg.sender), maxLoss);
       
        
    }

    function uOut(uint amount)public view returns (uint256 tot){
    
        uint256 stakeMinusUnreleased = (IERC20(address(stakedToken)).balanceOf(address(this)) - unreleased);
        
        uint256 amt = amount * stakeMinusUnreleased / totalSupply ;
        
        
         tot = amt -  ( amt * penalty() ) / stakeMinusUnreleased;

    return tot;
    }
    
    
    //2.5% fee on withdrawls back to holders
    //Withdrawl function for house
    //maxLoss as low as possible for best payouts.
    function withdraw(uint256 amount, uint256 maxLoss) public virtual {
          if(maxLoss<penalty()){
           return;
          }
        
        require(amount <= _balances[msg.sender], "withdraw: balance is lower");
        
        uint OutEst = uOut(amount);

        unchecked {
            _balances[msg.sender] -= amount;
            totalSupply = totalSupply - amount;
            profitz[msg.sender] += int(OutEst * 975 / 1000);
        }
        
        require(stakedToken.transfer(address(this), (OutEst * 25 / 1000)));
        require(stakedToken.transfer(msg.sender, ((OutEst * 975) / 1000)));
        
        emit Withdrawn(msg.sender, amount);
    }    

    function Profit(address user) public view returns(int) {
        uint256 withdrawable = withEstimator(balanceOf(user));
        int profit = profitz[user] + int(withdrawable);
        return profit;
    }

    function blockNumber() public view returns(uint) {
        return block.number;
    }
}


/*
*
* MIT License
* ===========
*
* Copyright (c) 2022 Forge
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.   
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UsersGuess","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"betID","type":"uint256"}],"name":"GuessNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UsersGuess","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Result","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWagered","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betID","type":"uint256"},{"indexed":true,"internalType":"address","name":"AddressOfGuesser","type":"address"},{"indexed":false,"internalType":"uint256","name":"AmountWon","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainlinkRandom","type":"uint256"}],"name":"ShowAnswer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"guess","type":"uint256"}],"name":"MaxINForGuess","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"Profit","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"betAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"betOdds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"betResults","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"betee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"betid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"betidIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blockNumForBetID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forWhom","type":"address"}],"name":"currentForge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"odds","type":"uint256"}],"name":"estOUTPUT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"extraLINK","type":"uint256"}],"name":"getBlank","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"guess","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"extraLINK","type":"uint256"}],"name":"getRandomNumber","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastBlockFilled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"guess","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"maxGuessPerInput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"penalty","outputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxLoss","type":"uint256"}],"name":"perfectWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"profitz","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"profitzGuess","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"randomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forWhom","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"uOut","outputs":[{"internalType":"uint256","name":"tot","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unreleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"withEstimator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxLoss","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060038190556004819055600f556001601055601280546001600160a01b03191673f44fb43066f7ecc91058e3a614fb8a15a273527617905534801561004a57600080fd5b50733d2341adb2d31f1c5530cdc622016af293177ae060a05273b0897686c545045afc77cf20ec7a532e3120e0f16080527ff86195cf7690c55907b2b611ebb7343a6f649bff128701cc542f0569e2c549da600155655af3107a400060025560805160a051611d5e6100ff6000396000818161152d0152611612015260008181610d6f01528181610df701528181610eab01528181610f8601528181610ff50152818161146901526115e30152611d5e6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80635d57ab281161010f578063afcf89aa116100a2578063e6d8b91d11610071578063e6d8b91d14610458578063edcbbef814610478578063f03d667214610498578063f970dd02146104a157600080fd5b8063afcf89aa146103e9578063b5ce35a9146103fc578063cc7a262e14610404578063d63bc5991461042f57600080fd5b80637c081f99116100de5780637c081f9914610390578063830c57dc146103a357806394985ddd146103b6578063984d63cf146103c957600080fd5b80635d57ab28146103215780635da9eabc146103415780636864af0c1461035457806370a082311461036757600080fd5b80633a64cfd5116101875780634ca7d044116101565780634ca7d044146102d55780634ea97c07146102e8578063530d3bc8146102fb57806357e871e71461031b57600080fd5b80633a64cfd51461028657806342619f6614610299578063441a3e70146102a257806345b90d70146102b557600080fd5b806314e5d13c116101c357806314e5d13c1461024c57806316462ad31461025f57806318160ddd146102685780632ee409081461027157600080fd5b806305be95b4146101f5578063068c0c631461021b5780630d82675e1461023b5780630edd2ffc14610244575b600080fd5b610208610203366004611a5b565b6104c1565b6040519081526020015b60405180910390f35b610208610229366004611a5b565b600c6020526000908152604090205481565b61020860045481565b610208610516565b61020861025a366004611a76565b61055c565b61020860035481565b61020860105481565b61028461027f366004611a98565b6105c1565b005b610208610294366004611ac2565b6107de565b610208600e5481565b6102846102b0366004611a76565b61087c565b6102086102c3366004611ac2565b60066020526000908152604090205481565b6102086102e3366004611adb565b610ab3565b6102846102f6366004611ac2565b6111b0565b610208610309366004611ac2565b60056020526000908152604090205481565b43610208565b61020861032f366004611ac2565b600b6020526000908152604090205481565b61020861034f366004611ac2565b6111cd565b610208610362366004611a76565b611293565b610208610375366004611a5b565b6001600160a01b031660009081526011602052604090205490565b61020861039e366004611a5b565b611431565b6102086103b1366004611ac2565b611465565b6102846103c4366004611a76565b611522565b6102086103d7366004611ac2565b60086020526000908152604090205481565b6102086103f7366004611ac2565b6115a8565b6102086115b7565b601254610417906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b61041761043d366004611ac2565b600a602052600090815260409020546001600160a01b031681565b610208610466366004611a5b565b600d6020526000908152604090205481565b610208610486366004611ac2565b60076020526000908152604090205481565b610208600f5481565b6102086104af366004611ac2565b60096020526000908152604090205481565b6000806104e66103f7846001600160a01b031660009081526011602052604090205490565b6001600160a01b0384166000908152600c60205260408120549192509061050e908390611b1d565b949350505050565b60035460009081905b600454811015610556576000818152600b60205260409020546105429083611b5e565b91508061054e81611b76565b91505061051f565b50919050565b6000805b605a8110156105b65782610578610294836062611b8f565b101561058f5761058c610294826063611b8f565b92505b8261059f81610362846063611b8f565b116105b657806105ae81611b76565b915050610560565b61050e816063611b8f565b6012546001600160a01b0316816106105760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b60448201526064015b60405180910390fd5b600f546012546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa15801561065d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106819190611ba6565b0360105484028161069457610694611bbf565b6001600160a01b03808716600090815260116020908152604080832080549690950495860190945560108054909501909455600c9093529181902080548690039055516323b872dd60e01b815290831691506323b872dd906106fe90339030908790600401611bd5565b6020604051808303816000875af115801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190611bf9565b6040518060400160405280601c81526020017f7374616b656420746f6b656e207472616e73666572206661696c656400000000815250906107955760405162461bcd60e51b81526004016106079190611c68565b50826001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516107d191815260200190565b60405180910390a2505050565b600f546012546040516370a0823160e01b8152306004820152600092839261041a928692916001600160a01b0316906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190611ba6565b6108619190611b8f565b61086b9190611c7b565b6108759190611c9a565b9392505050565b610884610516565b81101561088f575050565b336000908152601160205260409020548211156108ee5760405162461bcd60e51b815260206004820152601a60248201527f77697468647261773a2062616c616e6365206973206c6f7765720000000000006044820152606401610607565b60006108f9836111cd565b3360009081526011602052604090208054859003905560108054859003905590506103e86103cf8202336000908152600c6020526040902080549290910490910190556012546001600160a01b031663a9059cbb306103e861095c856019611c7b565b6109669190611c9a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611bf9565b6109de57600080fd5b6012546001600160a01b031663a9059cbb336103e86109ff856103cf611c7b565b610a099190611c9a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190611bf9565b610a8157600080fd5b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020016107d1565b600080610ac08486611293565b9050808410610b2a5760405162461bcd60e51b815260206004820152603060248201527f596f752077696c6c206c6f6f7365206d6f6e657920657665727974696d65206160448201526f742074686573652073657474696e677360801b6064820152608401610607565b670de0b6b3a7640000841015610b745760405162461bcd60e51b815260206004820152600f60248201526e4d696e20626574203120466f72676560881b6044820152606401610607565b6001831015610bd35760405162461bcd60e51b815260206004820152602560248201527f4d7573742073656e64206174206c6561737420746865206d696e696d756d20306044820152642e3030303160d81b6064820152608401610607565b83610bdd866107de565b1015610c435760405162461bcd60e51b815260206004820152602f60248201527f42616e6b726f6c6c20746f6f206c6f7720666f722074686973206265742c205060448201526e1b19585cd9481b1bddd95c8818995d608a1b6064820152608401610607565b606285108015610c535750600085115b610c9f5760405162461bcd60e51b815260206004820152601760248201527f4d757374206775657373206265747765656e20312d39380000000000000000006044820152606401610607565b6012546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610cd390339030908990600401611bd5565b6020604051808303816000875af1158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d169190611bf9565b610d575760405162461bcd60e51b81526020600482015260126024820152715472616e73666572206d75737420776f726b60701b6044820152606401610607565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190611ba6565b90506001841115610e99576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166323b872dd3330610e29600189611b8f565b600254610e369190611c7b565b6040518463ffffffff1660e01b8152600401610e5493929190611bd5565b6020604051808303816000875af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190611bf9565b505b678ac7230489e80000851015610f4f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd333087600254610ee89190611c7b565b6040518463ffffffff1660e01b8152600401610f0693929190611bd5565b6020604051808303816000875af1158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190611bf9565b50611095565b6802b5e3af16b1880000851015610fc857620186a06004541180610f7f5750600254610f7c906015611c7b565b81105b15610fc3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd333087600254610ee89190611c7b565b611095565b605d8611610fde57600254610f7c906015611c7b565b600254610fec906015611c7b565b811015611095577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd3330876002546110329190611c7b565b6040518463ffffffff1660e01b815260040161105093929190611bd5565b6020604051808303816000875af115801561106f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190611bf9565b505b6004805460009081526008602090815260408083208a9055835483526007825280832089905583548352600a825280832080546001600160a01b0319163390811790915593548352600b8252808320869055928252600d90529081208054879290611101908490611cae565b909155505060048054600090815260066020908152604091829020439055915481518981529283018890529082015233907fea3a2986b784b5ff3af1de7908eb0898970dec44692bec64512b80606842eaf69060600160405180910390a26004805490600061116f83611b76565b919050555084600f60008282546111869190611b5e565b925050819055506111a6600154856002546111a19190611c7b565b6115df565b9695505050505050565b336000908152601160205260409020546111ca908261087c565b50565b600f546012546040516370a0823160e01b8152306004820152600092839290916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112439190611ba6565b61124d9190611b8f565b9050600060105482856112609190611c7b565b61126a9190611c9a565b905081611275610516565b61127f9083611c7b565b6112899190611c9a565b61050e9082611b8f565b6000806112a08385611c7b565b600f546012546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611ba6565b6113199190611b8f565b611324906032611c7b565b61132e9190611c9a565b90506000601e82101561136357611346846064611c7b565b61135286612328611c7b565b61135c9190611c9a565b905061050e565b603282101561138357611377846064611c7b565b61135286612454611c7b565b60648210156113a357611397846064611c7b565b61135286612580611c7b565b60c88210156113c3576113b7846064611c7b565b61135286612648611c7b565b6101908210156113e4576113d8846064611c7b565b611352866126ac611c7b565b6103e8821015611407576113fa846103e8611c7b565b61135286620184ac611c7b565b611412846064611c7b565b61141e866126ac611c7b565b6114289190611c9a565b95945050505050565b6000806103e861145961034f856001600160a01b031660009081526011602052604090205490565b61086b906103cf611c7b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd3330856002546114a69190611c7b565b6040518463ffffffff1660e01b81526004016114c493929190611bd5565b6020604051808303816000875af11580156114e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115079190611bf9565b5061151c600154836002546111a19190611c7b565b92915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461159a5760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610607565b6115a48282611756565b5050565b6000806103e8611459846111cd565b6000600454600354036115c957504390565b5060035460009081526006602052604090205490565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634000aea07f00000000000000000000000000000000000000000000000000000000000000008486600060405160200161164f929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161167c93929190611ced565b6020604051808303816000875af115801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190611bf9565b5060008381526020818152604080832054815180840188905280830185905230606082015260808082018390528351808303909101815260a090910190925281519183019190912086845292909152611719906001611b5e565b600085815260208181526040918290209290925580518083018790528082018490528151808203830181526060909101909152805191012061050e565b60045460035410611765575050565b600454600354106117ad5760405162461bcd60e51b81526020600482015260126024820152714d7573742068617665206e6577206265747360701b6044820152606401610607565b60035460009081526009602052604090208190556117cc606482611d14565b6003805460009081526005602090815260408083209490945591548152600a82528281205460088352838220546007845284832054600b90945293909120546001600160a01b0390911692919082611825606487611d14565b10156118d5576001600160a01b0384166000908152600d602052604081208054839290611853908490611b1d565b909155505060125460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156118ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cf9190611bf9565b50611991565b60125460405163a9059cbb60e01b81526001600160a01b038681166004830152600160248301529091169063a9059cbb906044016020604051808303816000875af1158015611928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194c9190611bf9565b506001600160a01b0384166000908152600d60205260408120805460019290611976908490611b1d565b90915550506003546000908152600b60205260409020600190555b81600f60008282546119a39190611b8f565b90915550506001600160a01b0384167f0d6e0fdf39f428b885b593cb5e1ed182847a2ed801c2d36a89869aa69e8b785f846119df606489611d14565b6003546000818152600b60209081526040918290205482519586529085019390935283018790526060830152608082015260a0810188905260c00160405180910390a260038054906000611a3283611b76565b9190505550505050505050565b80356001600160a01b0381168114611a5657600080fd5b919050565b600060208284031215611a6d57600080fd5b61087582611a3f565b60008060408385031215611a8957600080fd5b50508035926020909101359150565b60008060408385031215611aab57600080fd5b611ab483611a3f565b946020939093013593505050565b600060208284031215611ad457600080fd5b5035919050565b600080600060608486031215611af057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b0384900385131615611b3f57611b3f611b07565b600160ff1b8390038412811615611b5857611b58611b07565b50500190565b60008219821115611b7157611b71611b07565b500190565b600060018201611b8857611b88611b07565b5060010190565b600082821015611ba157611ba1611b07565b500390565b600060208284031215611bb857600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215611c0b57600080fd5b8151801515811461087557600080fd5b6000815180845260005b81811015611c4157602081850181015186830182015201611c25565b81811115611c53576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006108756020830184611c1b565b6000816000190483118215151615611c9557611c95611b07565b500290565b600082611ca957611ca9611bbf565b500490565b60008083128015600160ff1b850184121615611ccc57611ccc611b07565b6001600160ff1b0384018313811615611ce757611ce7611b07565b50500390565b60018060a01b03841681528260208201526060604082015260006114286060830184611c1b565b600082611d2357611d23611bbf565b50069056fea2646970667358221220376320f457a27ca3329762357e07c6d2108cf4ccb7cee3e3136083119742a24a64736f6c634300080d0033

Deployed ByteCode Sourcemap

14304:10563:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24561:208;;;;;;:::i;:::-;;:::i;:::-;;;527:25:1;;;515:2;500:18;24561:208:0;;;;;;;;14853:38;;;;;;:::i;:::-;;;;;;;;;;;;;;14462:26;;;;;;19116:200;;;:::i;21223:363::-;;;;;;:::i;:::-;;:::i;14431:24::-;;;;;;15020:30;;;;;;20624:591;;;;;;:::i;:::-;;:::i;:::-;;18838:270;;;;;;:::i;:::-;;:::i;14950:27::-;;;;;;23860:689;;;;;;:::i;:::-;;:::i;14547:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16588:2016;;;;;;:::i;:::-;;:::i;23201:131::-;;;;;;:::i;:::-;;:::i;14495:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;24777:87;24844:12;24777:87;;14803:43;;;;;;:::i;:::-;;;;;;;;;;;;;;23340:368;;;;;;:::i;:::-;;:::i;21647:1081::-;;;;;;:::i;:::-;;:::i;15617:110::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15701:18:0;15674:7;15701:18;;;:9;:18;;;;;;;15617:110;22954:158;;;;;;:::i;:::-;;:::i;19360:215::-;;;;;;:::i;:::-;;:::i;12593:210::-;;;;;;:::i;:::-;;:::i;14653:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;22763:152;;;;;;:::i;:::-;;:::i;18612:181::-;;;:::i;15121:78::-;;;;;-1:-1:-1;;;;;15121:78:0;;;;;;-1:-1:-1;;;;;2376:32:1;;;2358:51;;2346:2;2331:18;15121:78:0;2198:217:1;14756:40:0;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14756:40:0;;;14898:43;;;;;;:::i;:::-;;;;;;;;;;;;;;14605:41;;;;;;:::i;:::-;;;;;;;;;;;;;;14984:29;;;;;;14702:47;;;;;;:::i;:::-;;;;;;;;;;;;;;24561:208;24611:3;24627:20;24650:30;24664:15;24674:4;-1:-1:-1;;;;;15701:18:0;15674:7;15701:18;;;:9;:18;;;;;;;15617:110;24650:30;-1:-1:-1;;;;;24704:13:0;;24691:10;24704:13;;;:7;:13;;;;;;24627:53;;-1:-1:-1;24691:10:0;24704:33;;24627:53;;24704:33;:::i;:::-;24691:46;24561:208;-1:-1:-1;;;;24561:208:0:o;19116:200::-;19215:5;;19157:8;;;;19202:80;19224:7;;19222:1;:9;19202:80;;;19259:11;;;;:8;:11;;;;;;19252:18;;;;:::i;:::-;;-1:-1:-1;19233:3:0;;;;:::i;:::-;;;;19202:80;;;-1:-1:-1;19305:3:0;19116:200;-1:-1:-1;19116:200:0:o;21223:363::-;21291:4;;21334:221;21346:2;21344:1;:4;21334:221;;;21394:3;21372:19;21386:4;21389:1;21386:2;:4;:::i;21372:19::-;:25;21369:89;;;21423:19;21437:4;21440:1;21437:2;:4;:::i;21423:19::-;21417:25;;21369:89;21500:3;21475:22;21500:3;21490:6;21495:1;21490:2;:6;:::i;21475:22::-;:28;21523:5;21472:72;21350:3;;;;:::i;:::-;;;;21334:221;;;21572:6;21577:1;21572:2;:6;:::i;20624:591::-;20713:11;;-1:-1:-1;;;;;20713:11:0;20743:10;20735:37;;;;-1:-1:-1;;;20735:37:0;;3635:2:1;20735:37:0;;;3617:21:1;3674:2;3654:18;;;3647:30;-1:-1:-1;;;3693:18:1;;;3686:44;3747:18;;20735:37:0;;;;;;;;;20906:10;;20865:11;;20850:53;;-1:-1:-1;;;20850:53:0;;20897:4;20850:53;;;2358:51:1;20811:10:0;;20906;-1:-1:-1;;;;;20865:11:0;;20850:38;;2331:18:1;;20850:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;20834:11;;20825:6;:20;20824:93;;;;;:::i;:::-;-1:-1:-1;;;;;20932:18:0;;;;;;;:9;:18;;;;;;;;:27;;20824:93;;;;20932:27;;;;;;20974:11;:20;;;;;;;;21009:7;:16;;;;;;;:31;;;;;;;21080:50;-1:-1:-1;;;21080:50:0;;:15;;;;-1:-1:-1;21080:15:0;;:50;;21096:10;;21116:4;;21033:6;;21080:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21132:21;;;;;;;;;;;;;;;;;21072:82;;;;;-1:-1:-1;;;21072:82:0;;;;;;;;:::i;:::-;;21191:7;-1:-1:-1;;;;;21184:23:0;;21200:6;21184:23;;;;527:25:1;;515:2;500:18;;383:175;21184:23:0;;;;;;;;20690:525;20624:591;;:::o;18838:270::-;19045:10;;19004:11;;18989:53;;-1:-1:-1;;;18989:53:0;;19036:4;18989:53;;;2358:51:1;18897:7:0;;;;19069;;19059:5;;19045:10;-1:-1:-1;;;;;19004:11:0;;18989:38;;2331:18:1;;18989:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;18988:76;;;;:::i;:::-;18987:90;;;;:::i;:::-;18973:104;18838:270;-1:-1:-1;;;18838:270:0:o;23860:689::-;23950:9;:7;:9::i;:::-;23942:7;:17;23939:55;;;23860:689;;:::o;23939:55::-;24042:10;24032:21;;;;:9;:21;;;;;;24022:31;;;24014:70;;;;-1:-1:-1;;;24014:70:0;;5961:2:1;24014:70:0;;;5943:21:1;6000:2;5980:18;;;5973:30;6039:28;6019:18;;;6012:56;6085:18;;24014:70:0;5759:350:1;24014:70:0;24105:11;24119:12;24124:6;24119:4;:12::i;:::-;24179:10;24169:21;;;;:9;:21;;;;;:31;;;;;;;24229:11;;;:20;;;24215:34;;24105:26;-1:-1:-1;24306:4:0;24300:3;24291:12;;24272:10;24264:19;;;;:7;:19;;;;;:47;;24291:19;;;;24264:47;;;;;24351:11;;-1:-1:-1;;;;;24351:11:0;:20;24380:4;24402;24388:11;:6;24397:2;24388:11;:::i;:::-;:18;;;;:::i;:::-;24351:57;;-1:-1:-1;;;;;;24351:57:0;;;;;;;-1:-1:-1;;;;;6306:32:1;;;24351:57:0;;;6288:51:1;6355:18;;;6348:34;6261:18;;24351:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24343:66;;;;;;24428:11;;-1:-1:-1;;;;;24428:11:0;:20;24449:10;24479:4;24463:12;:6;24472:3;24463:12;:::i;:::-;24462:21;;;;:::i;:::-;24428:57;;-1:-1:-1;;;;;;24428:57:0;;;;;;;-1:-1:-1;;;;;6306:32:1;;;24428:57:0;;;6288:51:1;6355:18;;;6348:34;6261:18;;24428:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24420:66;;;;;;24512:29;;527:25:1;;;24522:10:0;;24512:29;;515:2:1;500:18;24512:29:0;383:175:1;16588:2016:0;16676:17;16706:11;16720:21;16730:3;16735:5;16720:9;:21::i;:::-;16706:35;;16766:3;16760;:9;16752:70;;;;-1:-1:-1;;;16752:70:0;;6595:2:1;16752:70:0;;;6577:21:1;6634:2;6614:18;;;6607:30;6673:34;6653:18;;;6646:62;-1:-1:-1;;;6724:18:1;;;6717:46;6780:19;;16752:70:0;6393:412:1;16752:70:0;16848:6;16841:3;:13;;16833:41;;;;-1:-1:-1;;;16833:41:0;;7012:2:1;16833:41:0;;;6994:21:1;7051:2;7031:18;;;7024:30;-1:-1:-1;;;7070:18:1;;;7063:45;7125:18;;16833:41:0;6810:339:1;16833:41:0;16906:1;16893:9;:14;;16885:64;;;;-1:-1:-1;;;16885:64:0;;7356:2:1;16885:64:0;;;7338:21:1;7395:2;7375:18;;;7368:30;7434:34;7414:18;;;7407:62;-1:-1:-1;;;7485:18:1;;;7478:35;7530:19;;16885:64:0;7154:401:1;16885:64:0;17032:3;17008:20;17022:5;17008:13;:20::i;:::-;:27;;17000:88;;;;-1:-1:-1;;;17000:88:0;;7762:2:1;17000:88:0;;;7744:21:1;7801:2;7781:18;;;7774:30;7840:34;7820:18;;;7813:62;-1:-1:-1;;;7891:18:1;;;7884:45;7946:19;;17000:88:0;7560:411:1;17000:88:0;17133:2;17127:5;:8;:21;;;;;17147:1;17139:5;:9;17127:21;17119:57;;;;-1:-1:-1;;;17119:57:0;;8178:2:1;17119:57:0;;;8160:21:1;8217:2;8197:18;;;8190:30;8256:25;8236:18;;;8229:53;8299:18;;17119:57:0;7976:347:1;17119:57:0;17195:11;;:56;;-1:-1:-1;;;17195:56:0;;-1:-1:-1;;;;;17195:11:0;;;;:24;;:56;;17220:10;;17240:4;;17247:3;;17195:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17187:87;;;;-1:-1:-1;;;17187:87:0;;8530:2:1;17187:87:0;;;8512:21:1;8569:2;8549:18;;;8542:30;-1:-1:-1;;;8588:18:1;;;8581:48;8646:18;;17187:87:0;8328:342:1;17187:87:0;17310:29;;-1:-1:-1;;;17310:29:0;;17333:4;17310:29;;;2358:51:1;17295:12:0;;17310:4;-1:-1:-1;;;;;17310:14:0;;;;2331:18:1;;17310:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17295:44;;17408:1;17396:9;:13;17393:107;;;-1:-1:-1;;;;;17421:4:0;:17;;17439:10;17459:4;17474:11;17484:1;17474:9;:11;:::i;:::-;17467:3;;:19;;;;:::i;:::-;17421:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17393:107;17520:13;17513:3;:21;17510:682;;;17550:4;-1:-1:-1;;;;;17550:17:0;;17568:10;17588:4;17601:9;17595:3;;:15;;;;:::i;:::-;17550:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17510:682;;;17637:13;17631:3;:19;17628:564;;;17680:6;17670:7;;:16;:35;;;-1:-1:-1;17697:3:0;;:8;;17703:2;17697:8;:::i;:::-;17690:4;:15;17670:35;17667:190;;;17780:4;-1:-1:-1;;;;;17780:17:0;;17798:10;17818:4;17831:9;17825:3;;:15;;;;:::i;17667:190::-;17628:564;;;17885:2;17876:5;:11;17873:319;;17923:3;;:6;;17927:2;17923:6;:::i;17873:319::-;18077:3;;:6;;18081:2;18077:6;:::i;:::-;18070:4;:13;18067:114;;;18104:4;-1:-1:-1;;;;;18104:17:0;;18122:10;18142:4;18155:9;18149:3;;:15;;;;:::i;:::-;18104:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18067:114;18210:7;;;18202:16;;;;:7;:16;;;;;;;;:24;;;18244:7;;18237:15;;:6;:15;;;;;:21;;;18275:7;;18269:14;;:5;:14;;;;;:27;;-1:-1:-1;;;;;;18269:27:0;18286:10;18269:27;;;;;;18316:7;;18307:17;;:8;:17;;;;;:23;;;18341:24;;;:12;:24;;;;;:36;;18255:3;;18202:16;18341:36;;18255:3;;18341:36;:::i;:::-;;;;-1:-1:-1;;18405:7:0;;;18388:25;;;;:16;:25;;;;;;;;;18416:12;18388:40;;18478:7;;18444:42;;9149:25:1;;;9190:18;;;9183:34;;;9233:18;;;9226:34;18466:10:0;;18444:42;;9137:2:1;9122:18;18444:42:0;;;;;;;18497:7;:9;;;:7;:9;;;:::i;:::-;;;;;;18532:3;18517:10;;:18;;;;;;;:::i;:::-;;;;;;;;18553:43;18571:7;;18586:9;18580:3;;:15;;;;:::i;:::-;18553:17;:43::i;:::-;18546:50;16588:2016;-1:-1:-1;;;;;;16588:2016:0:o;23201:131::-;23284:10;15674:7;15701:18;;;:9;:18;;;;;;23265:40;;23297:7;23265:8;:40::i;:::-;23201:131;:::o;23340:368::-;23504:10;;23463:11;;23448:53;;-1:-1:-1;;;23448:53:0;;23495:4;23448:53;;;2358:51:1;23387:11:0;;;;23504:10;;-1:-1:-1;;;;;23463:11:0;;;;23448:38;;2331:18:1;;23448:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;23416:99;;23536:11;23582;;23559:20;23550:6;:29;;;;:::i;:::-;:43;;;;:::i;:::-;23536:57;;23661:20;23647:9;:7;:9::i;:::-;23641:15;;:3;:15;:::i;:::-;23639:42;;;;:::i;:::-;23632:49;;:3;:49;:::i;21647:1081::-;21720:7;;21833:16;21845:4;21833:9;:16;:::i;:::-;21813:10;;21772:11;;21757:53;;-1:-1:-1;;;21757:53:0;;21804:4;21757:53;;;2358:51:1;-1:-1:-1;;;;;21772:11:0;;;;21757:38;;2331:18:1;;21757:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;21756:73;;21827:2;21756:73;:::i;:::-;:94;;;;:::i;:::-;21739:111;;21861:17;21909:2;21900:6;:11;21897:776;;;21965:8;:4;21970:3;21965:8;:::i;:::-;21942:20;21953:9;21942:8;:20;:::i;:::-;21941:33;;;;:::i;:::-;21929:45;;21897:776;;;22009:2;22000:6;:11;21997:676;;;22065:10;:4;22072:3;22065:10;:::i;:::-;22042:20;22053:9;22042:8;:20;:::i;21997:676::-;22127:3;22118:6;:12;22115:558;;;22184:10;:4;22191:3;22184:10;:::i;:::-;22161:20;22172:9;22161:8;:20;:::i;22115:558::-;22246:3;22237:6;:12;22234:439;;;22303:10;:4;22310:3;22303:10;:::i;:::-;22280:20;22291:9;22280:8;:20;:::i;22234:439::-;22361:3;22352:6;:12;22349:324;;;22418:10;:4;22425:3;22418:10;:::i;:::-;22395:20;22406:9;22395:8;:20;:::i;22349:324::-;22465:4;22456:6;:13;22452:221;;;22540:11;:4;22547;22540:11;:::i;:::-;22516:21;22528:9;22516;:21;:::i;22452:221::-;22644:10;:4;22651:3;22644:10;:::i;:::-;22621:20;22632:9;22621:8;:20;:::i;:::-;22620:35;;;;:::i;:::-;22608:47;22708:9;-1:-1:-1;;;;;21647:1081:0:o;22954:158::-;23014:7;23034:9;23080:4;23053:24;23058:18;23068:7;-1:-1:-1;;;;;15701:18:0;15674:7;15701:18;;;:9;:18;;;;;;;15617:110;23053:24;23047:30;;:3;:30;:::i;19360:215::-;19413:17;19443:4;-1:-1:-1;;;;;19443:17:0;;19461:10;19481:4;19494:9;19488:3;;:15;;;;:::i;:::-;19443:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19524:43;19542:7;;19557:9;19551:3;;:15;;;;:::i;19524:43::-;19517:50;19360:215;-1:-1:-1;;19360:215:0:o;12593:210::-;12686:10;-1:-1:-1;;;;;12700:14:0;12686:28;;12678:72;;;;-1:-1:-1;;;12678:72:0;;9473:2:1;12678:72:0;;;9455:21:1;9512:2;9492:18;;;9485:30;9551:33;9531:18;;;9524:61;9602:18;;12678:72:0;9271:355:1;12678:72:0;12757:40;12775:9;12786:10;12757:17;:40::i;:::-;12593:210;;:::o;22763:152::-;22826:7;22846:9;22883:4;22865:15;22870:9;22865:4;:15::i;18612:181::-;18660:7;18691;;18682:5;;:16;18679:66;;-1:-1:-1;18721:12:0;;18612:181::o;18679:66::-;-1:-1:-1;18779:5:0;;18762:23;;;;:16;:23;;;;;;;18612:181::o;10710:1034::-;10787:17;10813:4;-1:-1:-1;;;;;10813:20:0;;10834:14;10850:4;10867:8;9540:1;10856:43;;;;;;;;9805:25:1;;;9861:2;9846:18;;9839:34;9793:2;9778:18;;9631:248;10856:43:0;;;;;;;;;;;;;10813:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11135:15:0;11218:16;;;;;;;;;;;;1034:51;;;;;11797:25:1;;;11838:18;;;11831:34;;;11211:4:0;11881:18:1;;;11874:60;11950:18;;;;11943:34;;;1034:51:0;;;;;;;;;;11769:19:1;;;;1034:51:0;;;1024:62;;;;;;;;;11672:16;;;;;;;:20;;11691:1;11672:20;:::i;:::-;11653:6;:16;;;;;;;;;;;;:39;;;;1604:41;;;;;12145:19:1;;;12180:12;;;12173:28;;;1604:41:0;;;;;;;;;12217:12:1;;;;1604:41:0;;;1594:52;;;;;11706:32;1484:168;19651:931;19758:7;;19749:5;;:16;19746:53;;19651:931;;:::o;19746:53::-;19835:7;;19827:5;;:15;19819:46;;;;-1:-1:-1;;;19819:46:0;;10477:2:1;19819:46:0;;;10459:21:1;10516:2;10496:18;;;10489:30;-1:-1:-1;;;10535:18:1;;;10528:48;10593:18;;19819:46:0;10275:342:1;19819:46:0;19899:5;;19886:19;;;;:12;:19;;;;;:32;;;19949:16;19962:3;19908:10;19949:16;:::i;:::-;19940:5;;;19929:17;;;;:10;:17;;;;;;;;:36;;;;20000:5;;19994:12;;:5;:12;;;;;;20032:7;:14;;;;;;20077:6;:13;;;;;;20115:8;:15;;;;;;;;-1:-1:-1;;;;;19994:12:0;;;;20032:14;20077:13;20032:14;20144;20155:3;20144:10;:14;:::i;:::-;:21;20141:277;;;-1:-1:-1;;;;;20181:21:0;;;;;;:12;:21;;;;;:33;;20210:3;;20181:21;:33;;20210:3;;20181:33;:::i;:::-;;;;-1:-1:-1;;20229:11:0;;:34;;-1:-1:-1;;;20229:34:0;;-1:-1:-1;;;;;6306:32:1;;;20229:34:0;;;6288:51:1;6355:18;;;6348:34;;;20229:11:0;;;;:20;;6261:18:1;;20229:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20141:277;;;20294:11;;:32;;-1:-1:-1;;;20294:32:0;;-1:-1:-1;;;;;6306:32:1;;;20294::0;;;6288:51:1;20294:11:0;6355:18:1;;;6348:34;20294:11:0;;;;:20;;6261:18:1;;20294:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;20341:21:0;;;;;;:12;:21;;;;;:31;;20370:1;;20341:21;:31;;20370:1;;20341:31;:::i;:::-;;;;-1:-1:-1;;20396:5:0;;20387:15;;;;:8;:15;;;;;20405:1;20387:19;;20141:277;20442:9;20428:10;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;20467:89:0;;;20478:4;20484:14;20495:3;20484:10;:14;:::i;:::-;20512:5;;20528:15;;;;:8;:15;;;;;;;;;;20467:89;;11313:25:1;;;11354:18;;;11347:34;;;;11397:18;;11390:34;;;11455:2;11440:18;;11433:34;11498:3;11483:19;;11476:35;11542:3;11527:19;;11520:35;;;11300:3;11285:19;20467:89:0;;;;;;;20567:5;:7;;;:5;:7;;;:::i;:::-;;;;;;19735:847;;;;19651:931;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;745:248::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;-1:-1:-1;;913:23:1;;;983:2;968:18;;;955:32;;-1:-1:-1;745:248:1:o;998:254::-;1066:6;1074;1127:2;1115:9;1106:7;1102:23;1098:32;1095:52;;;1143:1;1140;1133:12;1095:52;1166:29;1185:9;1166:29;:::i;:::-;1156:39;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;998:254:1:o;1257:180::-;1316:6;1369:2;1357:9;1348:7;1344:23;1340:32;1337:52;;;1385:1;1382;1375:12;1337:52;-1:-1:-1;1408:23:1;;1257:180;-1:-1:-1;1257:180:1:o;1442:316::-;1519:6;1527;1535;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;-1:-1:-1;;1627:23:1;;;1697:2;1682:18;;1669:32;;-1:-1:-1;1748:2:1;1733:18;;;1720:32;;1442:316;-1:-1:-1;1442:316:1:o;2628:127::-;2689:10;2684:3;2680:20;2677:1;2670:31;2720:4;2717:1;2710:15;2744:4;2741:1;2734:15;2760:265;2799:3;2827:9;;;2852:10;;-1:-1:-1;;;;;2871:27:1;;;2864:35;;2848:52;2845:78;;;2903:18;;:::i;:::-;-1:-1:-1;;;2950:19:1;;;2943:27;;2935:36;;2932:62;;;2974:18;;:::i;:::-;-1:-1:-1;;3010:9:1;;2760:265::o;3030:128::-;3070:3;3101:1;3097:6;3094:1;3091:13;3088:39;;;3107:18;;:::i;:::-;-1:-1:-1;3143:9:1;;3030:128::o;3163:135::-;3202:3;3223:17;;;3220:43;;3243:18;;:::i;:::-;-1:-1:-1;3290:1:1;3279:13;;3163:135::o;3303:125::-;3343:4;3371:1;3368;3365:8;3362:34;;;3376:18;;:::i;:::-;-1:-1:-1;3413:9:1;;3303:125::o;3776:184::-;3846:6;3899:2;3887:9;3878:7;3874:23;3870:32;3867:52;;;3915:1;3912;3905:12;3867:52;-1:-1:-1;3938:16:1;;3776:184;-1:-1:-1;3776:184:1:o;3965:127::-;4026:10;4021:3;4017:20;4014:1;4007:31;4057:4;4054:1;4047:15;4081:4;4078:1;4071:15;4097:375;-1:-1:-1;;;;;4355:15:1;;;4337:34;;4407:15;;;;4402:2;4387:18;;4380:43;4454:2;4439:18;;4432:34;;;;4287:2;4272:18;;4097:375::o;4477:277::-;4544:6;4597:2;4585:9;4576:7;4572:23;4568:32;4565:52;;;4613:1;4610;4603:12;4565:52;4645:9;4639:16;4698:5;4691:13;4684:21;4677:5;4674:32;4664:60;;4720:1;4717;4710:12;4759:472;4801:3;4839:5;4833:12;4866:6;4861:3;4854:19;4891:1;4901:162;4915:6;4912:1;4909:13;4901:162;;;4977:4;5033:13;;;5029:22;;5023:29;5005:11;;;5001:20;;4994:59;4930:12;4901:162;;;5081:6;5078:1;5075:13;5072:87;;;5147:1;5140:4;5131:6;5126:3;5122:16;5118:27;5111:38;5072:87;-1:-1:-1;5213:2:1;5192:15;-1:-1:-1;;5188:29:1;5179:39;;;;5220:4;5175:50;;4759:472;-1:-1:-1;;4759:472:1:o;5236:220::-;5385:2;5374:9;5367:21;5348:4;5405:45;5446:2;5435:9;5431:18;5423:6;5405:45;:::i;5461:168::-;5501:7;5567:1;5563;5559:6;5555:14;5552:1;5549:21;5544:1;5537:9;5530:17;5526:45;5523:71;;;5574:18;;:::i;:::-;-1:-1:-1;5614:9:1;;5461:168::o;5634:120::-;5674:1;5700;5690:35;;5705:18;;:::i;:::-;-1:-1:-1;5739:9:1;;5634:120::o;8675:267::-;8714:4;8743:9;;;8768:10;;-1:-1:-1;;;8787:19:1;;8780:27;;8764:44;8761:70;;;8811:18;;:::i;:::-;-1:-1:-1;;;;;8858:27:1;;8851:35;;8843:44;;8840:70;;;8890:18;;:::i;:::-;-1:-1:-1;;8927:9:1;;8675:267::o;9884:386::-;10116:1;10112;10107:3;10103:11;10099:19;10091:6;10087:32;10076:9;10069:51;10156:6;10151:2;10140:9;10136:18;10129:34;10199:2;10194;10183:9;10179:18;10172:30;10050:4;10219:45;10260:2;10249:9;10245:18;10237:6;10219:45;:::i;10622:112::-;10654:1;10680;10670:35;;10685:18;;:::i;:::-;-1:-1:-1;10719:9:1;;10622:112::o

Swarm Source

ipfs://376320f457a27ca3329762357e07c6d2108cf4ccb7cee3e3136083119742a24a
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.