Contract 0x98936bde1cf1bff1e7a8012cee5e2583851f2067 17

Contract Overview

Annex Finance: ANN Token
Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6317e6ab642189c38689d7c7d7f8d7aa1752aa51bbbb77e2c4542e4151cd9060Claim Reward114905332023-12-07 6:41:009 hrs 41 mins ago0x96fccdd40aa504a3610ce770467d1ea5d483d354 IN  Annex Finance: ANN Token0 CRO0.649950263627 4,605.754541459
0xaff0718067b2183a29b8d6df2af1c95b4d888bc2fdcba76eab74034a791509afClaim Reward114809392023-12-06 15:39:041 day 43 mins ago0x6c0d18acd46ddf15f2e7f16cfa56b9f55abf828d IN  Annex Finance: ANN Token0 CRO1.604944721597 4,606.17886824
0xebe028345c0eea009bab59c16a2c1bb825c7fbfd80806af1e37de4c1e71c238fClaim Reward114746392023-12-06 5:49:451 day 10 hrs agoCronos ID Name coinkinng.cro IN  Annex Finance: ANN Token0 CRO0.5515080825290
0xb680a890e6b31d905e8ae8d7fbadc03bf8922dfbe51c71f51408ae0d64532580Claim Reward114728302023-12-06 2:59:571 day 13 hrs ago0x4ac800cfb2fd82507b905aa17ef8b9704b5f4c16 IN  Annex Finance: ANN Token0 CRO0.5660328790040
0x3fb53c41999a4597f265460f050dfde7e2389452bc5ad489516e08dff7d3155aClaim Reward114675312023-12-05 18:41:511 day 21 hrs ago0xd5cdf555e30cdb35ba41cdcfa98130de26490211 IN  Annex Finance: ANN Token0 CRO1.19143590
0x7addb754adbb78a7d1aff476120683b033cec927d620e56d1bb0a24ed3af3887Claim Reward114652552023-12-05 15:08:502 days 1 hr ago0x3983c012b6c5cfb17bf6934bd3c16759b2c26cf3 IN  Annex Finance: ANN Token0 CRO0.2137172310370
0xedaf4e9039771a660cde6c06617024977e2e7ce3f14d85a94efa6abbbf516818Claim Reward114624552023-12-05 10:46:592 days 5 hrs ago0xcc0b3addeb7a64851ee2f9c73a9c255537a8563d IN  Annex Finance: ANN Token0 CRO0.461109197061 4,606.991747962
0x41fb92ffef72cd6c82c9217ed9d4d45e11f1713d4ac8e43cb6848b5254e1f462Claim Reward114497092023-12-04 14:54:483 days 1 hr agoCronos ID Name automagiclly.cro IN  Annex Finance: ANN Token0 CRO4.5696452563560
0x986193ab34ec326c29466aee2d23cb6ba613b6b705b64fa492e002bb5e03340fClaim Reward114493942023-12-04 14:25:173 days 1 hr ago0x0e142e874287d2c185fd645c931d7c94c6345316 IN  Annex Finance: ANN Token0 CRO0.948012115377 4,607.569904291
0xe7930dc3034be5bb6810316f5e9d82df472ba8fe9b818af242a957b525c1c78eClaim Reward114478452023-12-04 12:00:143 days 4 hrs agoCronos ID Name bobjim.cro IN  Annex Finance: ANN Token0 CRO0.384387592940
0x0f04d1b787c1ea6cc508e9207b4770f17a7537968845d505ad08768301c893a8Claim Reward114423052023-12-04 3:21:153 days 13 hrs ago0xb1eb4cd2c5e21d0da87cfb0270ccf84e3266d6f0 IN  Annex Finance: ANN Token0 CRO0.4611980542220
0xe5072e3672d9a04d026539499932798c2bede565ceb5af9c6e749c9169bdae37Claim Reward114382982023-12-03 21:06:223 days 19 hrs ago0xb8752c4c5917c339d984c4622deefa2dc8be5db7 IN  Annex Finance: ANN Token0 CRO0.2870173340570
0xd39b8a040eeebd2b95a7a2bc3312c8ae507df6d9b132fade667a36d698a7087dClaim Reward114382772023-12-03 21:04:283 days 19 hrs ago0xb8752c4c5917c339d984c4622deefa2dc8be5db7 IN  Annex Finance: ANN Token0 CRO0.440226049920
0x2c23f157348048380aa56ca165c9b513759c40c6eee86f99b0ffc5570eedd187Claim Reward114355282023-12-03 16:47:243 days 23 hrs ago0xd5cdf555e30cdb35ba41cdcfa98130de26490211 IN  Annex Finance: ANN Token0 CRO1.18510030
0xf78712f1e77396b0d4fdfe9e77684a6a7520c0cd92a20831c4d3196b7992cebeClaim Reward114354982023-12-03 16:44:353 days 23 hrs ago0x2517a992a55d2cb09c185a1b18b89d036d0335c5 IN  Annex Finance: ANN Token0 CRO0.67131502959 4,608.179830932
0x668126c240cb4e7e2fddd2f843141ed8e51a8bcd846e366b9c010e3afdfb3f81Claim Reward114342052023-12-03 14:43:364 days 1 hr ago0x32fbc5ac04b96f69d7cd175f0272211165c9843a IN  Annex Finance: ANN Token0 CRO0.5333112137910
0x72394f81004fd03b838db265a377de3fe71815638edc10ddf5a3e94cd67771b4Claim Reward114342032023-12-03 14:43:244 days 1 hr ago0x32fbc5ac04b96f69d7cd175f0272211165c9843a IN  Annex Finance: ANN Token0 CRO0.7018160041390
0x0b6e56243fee41ae7a67ee7e6251a81e527c7e7bc28b1bd25a2d87f2083a8e6dClaim Reward114285122023-12-03 5:51:494 days 10 hrs agoCronos ID Name elkerubim.cro IN  Annex Finance: ANN Token0 CRO0.6257685542770
0xa7e3fc7f6d9b61ea70b2bfcefec84be1aa914ad4d89a9c2fbf55c877a98dd906Claim Reward114267222023-12-03 3:04:344 days 13 hrs ago0xdfd4a7ac8236deae66bb14575a058319f1d7de23 IN  Annex Finance: ANN Token0 CRO0.8186251118120
0xb7f79401d4ce87044cdd5fdb82a33eb6f7ef527e26e4095c106a41825e6f2133Claim Reward114263412023-12-03 2:28:594 days 13 hrs ago0x19e172f76f71015d7f05a89c2c126d53a7ec6c69 IN  Annex Finance: ANN Token0 CRO0.972665594290
0xe978f8f8cad60d76a74caf4359fc2dab290393987f9c7626755b4be0f292c61eClaim Reward114217982023-12-02 19:24:094 days 20 hrs agoCronos ID Name icryptodaily.cro IN  Annex Finance: ANN Token0 CRO0.2660700050730
0xfcade0e24d76765d378df6faa78eee7905d21a841c7edba2e1d4d079e3ef682dClaim Reward114217942023-12-02 19:23:464 days 20 hrs agoCronos ID Name icryptodaily.cro IN  Annex Finance: ANN Token0 CRO0.4193030421240
0xef2822e8473f39f3d274ade84e639fa37f5c5ef5d4b02b7050291e1e63929f9cClaim Reward114215332023-12-02 18:59:184 days 21 hrs ago0xbe9049f1e6fb6bf487173fe2bcee3f15a74f3b76 IN  Annex Finance: ANN Token0 CRO0.4822879229490
0xc558f3c30e5f53322fb258693a8ffcdca18bbadc6c343848a7608768574c3ab4Claim Reward114147232023-12-02 8:22:155 days 8 hrs ago0xf4f29bfd2478a0ec5d25cee0c29aab5289099140 IN  Annex Finance: ANN Token0 CRO0.71351228696 4,609.10362689
0xd342f61996f69c04deee9343078d8d91f085b72ea6d05ffdae930cfe76ca1e55Claim Reward114126942023-12-02 5:12:485 days 11 hrs ago0x62291ae4efdd71e24d092e8d182edb9161326a96 IN  Annex Finance: ANN Token0 CRO0.475092724133 4,609.194510151
[ Download CSV Export 

OVERVIEW

A Decentralized Marketplace for Lenders and Borrowers, Swap, Auction and NFT marketplace.

Parent Txn Hash Block From To Value
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ANN

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-07
*/

pragma solidity ^0.5.16;


/*
 * @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 GSN 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.
 */
contract Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor () internal { }

  function _msgSender() internal view returns (address payable) {
    return msg.sender;
  }

  function _msgData() internal view returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

// File: @openzeppelin/contracts/access/Ownable.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.
 */
contract Ownable is Context {
    address private _owner;
    address private _authorizedNewOwner;
    event OwnershipTransferAuthorization(address indexed authorizedAddress);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Returns the address of the current authorized new owner.
     */
    function authorizedNewOwner() public view returns (address) {
        return _authorizedNewOwner;
    }
    /**
     * @notice Authorizes the transfer of ownership from _owner to the provided address.
     * NOTE: No transfer will occur unless authorizedAddress calls assumeOwnership( ).
     * This authorization may be removed by another call to this function authorizing
     * the null address.
     *
     * @param authorizedAddress The address authorized to become the new owner.
     */
    function authorizeOwnershipTransfer(address authorizedAddress) external onlyOwner {
        _authorizedNewOwner = authorizedAddress;
        emit OwnershipTransferAuthorization(_authorizedNewOwner);
    }
    /**
     * @notice Transfers ownership of this contract to the _authorizedNewOwner.
     */
    function assumeOwnership() external {
        require(_msgSender() == _authorizedNewOwner, "Ownable: only the authorized new owner can accept ownership");
        emit OwnershipTransferred(_owner, _authorizedNewOwner);
        _owner = _authorizedNewOwner;
        _authorizedNewOwner = address(0);
    }
    /**
     * @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.
     *
     * @param confirmAddress The address wants to give up ownership.
     */
    function renounceOwnership(address confirmAddress) public onlyOwner {
        require(confirmAddress == _owner, "Ownable: confirm address is wrong");
        emit OwnershipTransferred(_owner, address(0));
        _authorizedNewOwner = address(0);
        _owner = address(0);
    }
}

contract ANN is Ownable {
    /// @notice BEP-20 token name for this token
    string public constant name = "Annex";

    /// @notice BEP-20 token symbol for this token
    string public constant symbol = "ANN";

    /// @notice BEP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @notice Total number of tokens in circulation
    uint public constant totalSupply = 1000000000e18; // 1 billion ANN

    /// @notice Reward eligible epochs
    uint32 public constant eligibleEpochs = 30; // 30 epochs

    /// @notice Allowance amounts on behalf of others
    mapping (address => mapping (address => uint96)) internal allowances;

    /// @notice Official record of token balances for each account
    mapping (address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

    /// @notice A transferPoint for marking balance from given epoch
    struct TransferPoint {
        uint32 epoch;
        uint96 balance;
    }

    /// @notice A epoch config for blocks or ROI per epoch
    struct EpochConfig {
        uint32 epoch;
        uint32 blocks;
        uint32 roi;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice A record of transfer checkpoints for each account
    mapping (address => mapping (uint32 => TransferPoint)) public transferPoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The number of transferPoints for each account
    mapping (address => uint32) public numTransferPoints;

    /// @notice The claimed amount for each account
    mapping (address => uint96) public claimedAmounts;

    /// @notice Configs for epoch
    EpochConfig[] public epochConfigs;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice An event thats emitted when a transfer point balance changes
    // event TransferPointChanged(address indexed src, uint srcBalance, address indexed dst, uint dstBalance);

    /// @notice An event thats emitted when epoch block count changes
    event EpochConfigChanged(uint32 indexed previousEpoch, uint32 previousBlocks, uint32 previousROI, uint32 indexed newEpoch, uint32 newBlocks, uint32 newROI);

    /// @notice The standard BEP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @notice The standard BEP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /**
     * @notice Construct a new ANN token
     * @param account The initial account to grant all the tokens
     */
    constructor(address account) public {
        EpochConfig memory newEpochConfig = EpochConfig(
            0,
            24 * 60 * 60 / 6, // 1 day blocks in BSC
            20 // 0.2% ROI increase per epoch
        );
        epochConfigs.push(newEpochConfig);
        emit EpochConfigChanged(0, 0, 0, newEpochConfig.epoch, newEpochConfig.blocks, newEpochConfig.roi);
        balances[account] = uint96(totalSupply);
        _writeTransferPoint(address(0), account, 0, 0, uint96(totalSupply));
        emit Transfer(address(0), account, totalSupply);
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "ANN::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint rawAmount) external  returns (bool) {
        uint96 amount = safe96(rawAmount, "ANN::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint rawAmount) external  returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "ANN::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "ANN::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public  {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public  {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "ANN::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "ANN::delegateBySig: invalid nonce");
        require(now <= expiry, "ANN::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "ANN::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    /**
     * @notice Sets block counter per epoch
     * @param blocks The count of blocks per epoch
     * @param roi The interet of rate increased per epoch
     */
    function setEpochConfig(uint32 blocks, uint32 roi) public onlyOwner {
        require(blocks > 0, "ANN::setEpochConfig: zero blocks");
        require(roi < 10000, "ANN::setEpochConfig: roi exceeds max fraction");
        EpochConfig memory prevEC = epochConfigs[epochConfigs.length - 1];
        EpochConfig memory newEC = EpochConfig(getEpochs(block.number), blocks, roi);
        require(prevEC.blocks != newEC.blocks || prevEC.roi != newEC.roi, "ANN::setEpochConfig: blocks and roi same as before");
        //if (prevEC.epoch == newEC.epoch && epochConfigs.length > 1) {
        if (prevEC.epoch == newEC.epoch) {
            epochConfigs[epochConfigs.length - 1] = newEC;
        } else {
            epochConfigs.push(newEC);
        }
        emit EpochConfigChanged(prevEC.epoch, prevEC.blocks, prevEC.roi, newEC.epoch, newEC.blocks, newEC.roi);
    }

    /**
     * @notice Gets block counter per epoch
     * @return The count of blocks for current epoch
     */
    function getCurrentEpochBlocks() public view returns (uint32 blocks) {
        blocks = epochConfigs[epochConfigs.length - 1].blocks;
    }

    /**
     * @notice Gets rate of interest for current epoch
     * @return The rate of interest for current epoch
     */
    function getCurrentEpochROI() public view returns (uint32 roi) {
        roi = epochConfigs[epochConfigs.length - 1].roi;
    }

    /**
     * @notice Gets current epoch config
     * @return The EpochConfig for current epoch
     */
    function getCurrentEpochConfig() public view returns (uint32 epoch, uint32 blocks, uint32 roi) {
        EpochConfig memory ec = epochConfigs[epochConfigs.length - 1];
        epoch = ec.epoch;
        blocks = ec.blocks;
        roi = ec.roi;
    }

    /**
     * @notice Gets epoch config at given epoch index
     * @param forEpoch epoch
     * @return (index of config,
                config at epoch)
     */
    function getEpochConfig(uint32 forEpoch) public view returns (uint32 index, uint32 epoch, uint32 blocks, uint32 roi) {
        index = uint32(epochConfigs.length - 1);
        // solhint-disable-next-line no-inline-assembly
        for (; index > 0; index--) {
            if (forEpoch >= epochConfigs[index].epoch) {
                break;
            }
        }
        EpochConfig memory ec = epochConfigs[index];
        epoch = ec.epoch;
        blocks = ec.blocks;
        roi = ec.roi;
    }

    /**
     * @notice Gets epoch index at given block number
     * @param blockNumber The number of blocks
     * @return epoch index
     */
    function getEpochs(uint blockNumber) public view returns (uint32) {
        uint96 blocks = 0;
        uint96 epoch = 0;
        uint blockNum = blockNumber;
        for (uint32 i = 0; i < epochConfigs.length; i++) {
            uint96 deltaBlocks = (uint96(epochConfigs[i].epoch) - epoch) * blocks;
            if (blockNum < deltaBlocks) {
                break;
            }
            blockNum = blockNum - deltaBlocks;
            epoch = epochConfigs[i].epoch;
            blocks = epochConfigs[i].blocks;
        }

        if (blocks == 0) {
            blocks = getCurrentEpochBlocks();
        }
        epoch = epoch + uint96(blockNum / blocks);
        if (epoch >= 2**32) {
            epoch = 2**32 - 1;
        }
        return uint32(epoch);
    }

    /**
     * @notice Gets the current holding rewart amount for `account`
     * @param account The address to get holding reward amount
     * @return The number of current holding reward for `account`
     */
    function getHoldingReward(address account) public view returns (uint96) {
        // Check if account is holding more than eligible delay
        uint32 nTransferPoint = numTransferPoints[account];

        if (nTransferPoint == 0) {
            return 0;
        }

        uint32 lastEpoch = getEpochs(block.number);
        if (lastEpoch == 0) {
            return 0;
        }

        lastEpoch = lastEpoch - 1;
        if (lastEpoch < eligibleEpochs) {
            return 0;
        } else {
            uint32 lastEligibleEpoch = lastEpoch - eligibleEpochs;

            // Next check implicit zero balance
            if (transferPoints[account][0].epoch > lastEligibleEpoch) {
                return 0;
            }

            // First check most recent balance
            if (transferPoints[account][nTransferPoint - 1].epoch <= lastEligibleEpoch) {
                nTransferPoint = nTransferPoint - 1;
            } else {
                uint32 upper = nTransferPoint - 1;
                nTransferPoint = 0;
                while (upper > nTransferPoint) {
                    uint32 center = upper - (upper - nTransferPoint) / 2; // ceil, avoiding overflow
                    TransferPoint memory tp = transferPoints[account][center];
                    if (tp.epoch == lastEligibleEpoch) {
                        nTransferPoint = center;
                        break;
                    } if (tp.epoch < lastEligibleEpoch) {
                        nTransferPoint = center;
                    } else {
                        upper = center - 1;
                    }
                }
            }
        }

        // Calculate total rewards amount
        uint256 reward = 0;
        for (uint32 iTP = 0; iTP <= nTransferPoint; iTP++) {
            TransferPoint memory tp = transferPoints[account][iTP];
            (uint32 iEC,,,uint32 roi) = getEpochConfig(tp.epoch);
            uint32 startEpoch = tp.epoch;
            for (; iEC < epochConfigs.length; iEC++) {
                uint32 epoch = lastEpoch;
                bool tookNextTP = false;
                if (iEC < (epochConfigs.length - 1) && epoch > epochConfigs[iEC + 1].epoch) {
                    epoch = epochConfigs[iEC + 1].epoch;
                }
                if (iTP < nTransferPoint && epoch > transferPoints[account][iTP + 1].epoch) {
                    epoch = transferPoints[account][iTP + 1].epoch;
                    tookNextTP = true;
                }
                reward = reward + (uint256(tp.balance) * roi * sub32(epoch, startEpoch, "ANN::getHoldingReward: invalid epochs"));
                if (tookNextTP) {
                    break;
                }
                startEpoch = epoch;
                if (iEC < (epochConfigs.length - 1)) {
                    roi = epochConfigs[iEC + 1].roi;
                }
            }
        }
        uint96 amount = safe96(reward / 10000, "ANN::getHoldingReward: reward exceeds 96 bits");

        // Exclude already claimed amount
        if (claimedAmounts[account] > 0) {
            amount = sub96(amount, claimedAmounts[account], "ANN::getHoldingReward: invalid claimed amount");
        }

        return amount;
    }

    /**
     * @notice Receive the current holding rewart amount to msg.sender
     */
    function claimReward() public  {
        uint96 holdingReward = getHoldingReward(msg.sender);
        if (balances[address(this)] < holdingReward) {
            holdingReward = balances[address(this)];
        }
        claimedAmounts[msg.sender] = add96(claimedAmounts[msg.sender], holdingReward, "ANN::claimReward: invalid claimed amount");
        _transferTokens(address(this), msg.sender, holdingReward);
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "ANN::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "ANN::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "ANN::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "ANN::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
        if (amount > 0) {
            _writeTransferPoint(src, dst, numTransferPoints[dst], balances[src], balances[dst]);
        }
    }

    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "ANN::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "ANN::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "ANN::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function _writeTransferPoint(address src, address dst, uint32 nDstPoint, uint96 srcBalance, uint96 dstBalance) internal {
        uint32 epoch = getEpochs(block.number);

        if (src != address(this)) {
            // Revoke sender in reward eligible list
            for (uint32 i = 0; i < numTransferPoints[src]; i++) {
                delete transferPoints[src][i];
            }

            // Remove claim amount
            claimedAmounts[src] = 0;

            // delete transferPoints[src];
            if (srcBalance > 0) {
                transferPoints[src][0] = TransferPoint(epoch, srcBalance);
                numTransferPoints[src] = 1;
            } else {
                numTransferPoints[src] = 0;
            }
        }

        if (dst != address(this)) {
            // Add recipient in reward eligible list
            if (nDstPoint > 0 && transferPoints[dst][nDstPoint - 1].epoch >= epoch) {
                transferPoints[dst][nDstPoint - 1].balance = dstBalance;
            } else {
                transferPoints[dst][nDstPoint] = TransferPoint(epoch, dstBalance);
                numTransferPoints[dst] = nDstPoint + 1;
            }
        }

        // emit TransferPointChanged(src, balances[src], dst, balances[dst]);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function add32(uint32 a, uint32 b, string memory errorMessage) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub32(uint32 a, uint32 b, string memory errorMessage) internal pure returns (uint32) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function getChainId() internal pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"previousEpoch","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"previousBlocks","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"previousROI","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"newEpoch","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"newBlocks","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"newROI","type":"uint32"}],"name":"EpochConfigChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizedAddress","type":"address"}],"name":"OwnershipTransferAuthorization","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"assumeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"authorizedAddress","type":"address"}],"name":"authorizeOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authorizedNewOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedAmounts","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"eligibleEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochConfigs","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochBlocks","outputs":[{"internalType":"uint32","name":"blocks","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochConfig","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochROI","outputs":[{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"forEpoch","type":"uint32"}],"name":"getEpochConfig","outputs":[{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHoldingReward","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numTransferPoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"confirmAddress","type":"address"}],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"name":"setEpochConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"transferPoints","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint96","name":"balance","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620036b1380380620036b1833981810160405260208110156200003757600080fd5b505160006200004e6001600160e01b036200023d16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000a26200068e565b506040805160608082018352600080835261384060208085019182526014858701908152600a805460018101825590855286517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180549451925163ffffffff90811668010000000000000000810263ffffffff60401b19958316640100000000810263ffffffff60201b199690941663ffffffff19909916891795909516929092179490941617905587518581529283018590528288015293810193909352935192939290917fc01a508838d7b848b9827d7aefede67746ea1738597aa80f453c99f537ab6c49919081900360800190a36001600160a01b038216600090815260036020526040812080546001600160601b0319166b033b2e3c9fd0803ce8000000908117909155620001e891908490829081906001600160e01b036200024116565b604080516b033b2e3c9fd0803ce8000000815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050620006ae565b3390565b600062000257436001600160e01b036200051f16565b90506001600160a01b0386163014620003c75760005b6001600160a01b03871660009081526008602052604090205463ffffffff9081169082161015620002d8576001600160a01b038716600090815260066020908152604080832063ffffffff85168452909152902080546001600160801b03191690556001016200026d565b506001600160a01b038616600090815260096020526040902080546001600160601b03191690556001600160601b03831615620003a35760408051808201825263ffffffff80841682526001600160601b0380871660208085019182526001600160a01b038c16600081815260068352878120818052835287812096518754945190951664010000000002600160201b600160801b03199590961663ffffffff19948516179490941694909417909455918152600890925291902080549091166001179055620003c7565b6001600160a01b0386166000908152600860205260409020805463ffffffff191690555b6001600160a01b0385163014620005175760008463ffffffff161180156200042157506001600160a01b038516600090815260066020908152604080832063ffffffff600019890181168552925290912054828216911610155b156200047d576001600160a01b0385166000908152600660209081526040808320600019880163ffffffff16845290915290208054600160201b600160801b0319166401000000006001600160601b0385160217905562000517565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600683528781208c87168252835287812096518754945190951664010000000002600160201b600160801b031995871663ffffffff19958616179590951694909417909555938252600890935292909220805460018801909316929091169190911790555b505050505050565b6000808083815b600a5463ffffffff82161015620005ee5760008484600a8463ffffffff16815481106200054f57fe5b60009182526020909120015463ffffffff16030290506001600160601b0381168310156200057e5750620005ee565b806001600160601b031683039250600a8263ffffffff1681548110620005a057fe5b600091825260209091200154600a805463ffffffff928316965090918416908110620005c857fe5b600091825260209091200154640100000000900463ffffffff1694505060010162000526565b506001600160601b0383166200061a57620006116001600160e01b036200065816565b63ffffffff1692505b826001600160601b031681816200062d57fe5b0482019150640100000000826001600160601b031610620006505763ffffffff91505b509392505050565b600a80546000919060001981019081106200066f57fe5b600091825260209091200154640100000000900463ffffffff16919050565b604080516060810182526000808252602082018190529181019190915290565b612ff380620006be6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806387f4427e11610130578063b88a802f116100b8578063dd62ed3e1161007c578063dd62ed3e14610751578063e7a324dc1461077f578063f1127ed814610787578063f2a60b61146107b9578063f665a206146107c157610227565b8063b88a802f1461067b578063c3cda52014610683578063c717d7be146106ca578063cc2740b71461071e578063cddfea471461072657610227565b806391f4cfba116100ff57806391f4cfba1461061157806395d89b4114610619578063a2c1cae214610621578063a9059cbb14610629578063b4b5ea571461065557610227565b806387f4427e146105785780638b028b7e1461059e5780638c4b553c146105c45780638da5cb5b1461060957610227565b806338bf3cfa116101b35780636fcfff45116101825780636fcfff451461049857806370a08231146104be57806371417b32146104e4578063782d6fe1146105265780637ecebe001461055257610227565b806338bf3cfa146104005780635481eed314610428578063587cde1e1461044c5780635c19a95c1461047257610227565b806320606b70116101fa57806320606b701461034257806323b872dd1461034a57806326e6760b14610380578063313ce5671461038857806332e2a55d146103a657610227565b806306fdde031461022c578063095ea7b3146102a95780630b7cbac7146102e957806318160ddd14610328575b600080fd5b6102346107de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b0381351690602001356107ff565b604080519115158252519081900360200190f35b61030f600480360360208110156102ff57600080fd5b50356001600160a01b03166108bd565b6040805163ffffffff9092168252519081900360200190f35b6103306108d5565b60408051918252519081900360200190f35b6103306108e5565b6102d56004803603606081101561036057600080fd5b506001600160a01b03813581169160208101359091169060400135610900565b61030f610a45565b610390610a79565b6040805160ff9092168252519081900360200190f35b6103d8600480360360408110156103bc57600080fd5b5080356001600160a01b0316906020013563ffffffff16610a7e565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610ab3565b005b610430610bca565b604080516001600160a01b039092168252519081900360200190f35b6104306004803603602081101561046257600080fd5b50356001600160a01b0316610bd9565b6104266004803603602081101561048857600080fd5b50356001600160a01b0316610bf4565b61030f600480360360208110156104ae57600080fd5b50356001600160a01b0316610c01565b610330600480360360208110156104d457600080fd5b50356001600160a01b0316610c19565b61050a600480360360208110156104fa57600080fd5b50356001600160a01b0316610c41565b604080516001600160601b039092168252519081900360200190f35b61050a6004803603604081101561053c57600080fd5b506001600160a01b038135169060200135610c5c565b6103306004803603602081101561056857600080fd5b50356001600160a01b0316610e89565b6104266004803603602081101561058e57600080fd5b50356001600160a01b0316610e9b565b61050a600480360360208110156105b457600080fd5b50356001600160a01b0316610f5f565b6105e1600480360360208110156105da57600080fd5b5035611425565b6040805163ffffffff9485168152928416602084015292168183015290519081900360600190f35b61043061145d565b61030f61146c565b610234611471565b610426611490565b6102d56004803603604081101561063f57600080fd5b506001600160a01b03813516906020013561154d565b61050a6004803603602081101561066b57600080fd5b50356001600160a01b0316611589565b6104266115fa565b610426600480360360c081101561069957600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356116c2565b6106ed600480360360208110156106e057600080fd5b503563ffffffff16611968565b6040805163ffffffff9586168152938516602085015291841683830152909216606082015290519081900360800190f35b6105e1611a2e565b6104266004803603604081101561073c57600080fd5b5063ffffffff81358116916020013516611a9c565b6103306004803603604081101561076757600080fd5b506001600160a01b0381358116916020013516611e4b565b610330611e7f565b6103d86004803603604081101561079d57600080fd5b5080356001600160a01b0316906020013563ffffffff16611e9a565b61030f611ecf565b61030f600480360360208110156107d757600080fd5b5035611f03565b60405180604001604052806005815260200164082dcdccaf60db1b81525081565b600080600019831415610815575060001961083a565b61083783604051806060016040528060248152602001612c7460249139612025565b90505b3360008181526002602090815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b038716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a360019150505b92915050565b60086020526000908152604090205463ffffffff1681565b6b033b2e3c9fd0803ce800000081565b604051806043612c9882396043019050604051809103902081565b6001600160a01b03831660009081526002602090815260408083203380855290835281842054825160608101909352602480845291936001600160601b039091169285926109589288929190612c7490830139612025565b9050866001600160a01b0316836001600160a01b03161415801561098557506001600160601b0382811614155b15610a2d5760006109af83836040518060600160405280603c8152602001612d01603c91396120bf565b6001600160a01b038981166000818152600260209081526040808320948a168084529482529182902080546001600160601b0319166001600160601b03871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b610a3887878361212c565b5060019695505050505050565b600a8054600091906000198101908110610a5b57fe5b600091825260209091200154600160201b900463ffffffff16919050565b601281565b600660209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b610abb612374565b6001600160a01b0316610acc61145d565b6001600160a01b031614610b27576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000546001600160a01b03828116911614610b735760405162461bcd60e51b8152600401808060200182810382526021815260200180612bd26021913960400191505060405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600180546001600160a01b0319908116909155600080549091169055565b6001546001600160a01b031690565b6004602052600090815260409020546001600160a01b031681565b610bfe3382612378565b50565b60076020526000908152604090205463ffffffff1681565b6001600160a01b0381166000908152600360205260409020546001600160601b03165b919050565b6009602052600090815260409020546001600160601b031681565b6000438210610c9c5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f6c6026913960400191505060405180910390fd5b6001600160a01b03831660009081526007602052604090205463ffffffff1680610cca5760009150506108b7565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610d46576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b031690506108b7565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610d815760009150506108b7565b600060001982015b8163ffffffff168163ffffffff161115610e4457600282820363ffffffff16048103610db3612b3a565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610e1f576020015194506108b79350505050565b805163ffffffff16871115610e3657819350610e3d565b6001820392505b5050610d89565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b600b6020526000908152604090205481565b610ea3612374565b6001600160a01b0316610eb461145d565b6001600160a01b031614610f0f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fb58bcc286020502f4931905baafed22acc969c092ed724234c73361efc68839090600090a250565b6001600160a01b03811660009081526008602052604081205463ffffffff1680610f8d576000915050610c3c565b6000610f9843611f03565b905063ffffffff8116610fb057600092505050610c3c565b60001901601e63ffffffff82161015610fce57600092505050610c3c565b6001600160a01b0384166000908152600660209081526040808320838052909152902054601d1982019063ffffffff808316911611156110145760009350505050610c3c565b6001600160a01b038516600090815260066020908152604080832063ffffffff60001988018116855292529091205482821691161161105857600183039250611119565b600092600019015b8363ffffffff168163ffffffff16111561111757600284820363ffffffff1604810361108a612b3a565b506001600160a01b038716600090815260066020908152604080832063ffffffff858116855290835292819020815180830190925254808416808352600160201b9091046001600160601b03169282019290925291851614156110ef57509350611117565b805163ffffffff8086169116101561110957819550611110565b6001820392505b5050611060565b505b506000805b8363ffffffff168163ffffffff161161136b57611139612b3a565b506001600160a01b038616600090815260066020908152604080832063ffffffff8581168552908352818420825180840190935254908116808352600160201b9091046001600160601b0316928201929092529190819061119990611968565b8651939550935050505b600a5463ffffffff8416101561135b57600a5487906000906000190163ffffffff86161080156111fd5750600a8560010163ffffffff16815481106111e457fe5b60009182526020909120015463ffffffff908116908316115b1561122d57600a8560010163ffffffff168154811061121857fe5b60009182526020909120015463ffffffff1691505b8963ffffffff168763ffffffff1610801561127857506001600160a01b038c16600090815260066020908152604080832063ffffffff60018c01811685529252909120548116908316115b156112b25750506001600160a01b038a16600090815260066020908152604080832063ffffffff6001808b01821686529190935292205416905b6112d58284604051806060016040528060258152602001612b7260259139612402565b63ffffffff168463ffffffff1687602001516001600160601b0316020288019750801561130357505061135b565b600a5491925082916000190163ffffffff8616101561134e57600a8560010163ffffffff168154811061133257fe5b600091825260209091200154600160401b900463ffffffff1693505b50506001909201916111a3565b50506001909201915061111e9050565b50600061139461271083046040518060600160405280602d8152602001612bf3602d9139612025565b6001600160a01b0387166000908152600960205260409020549091506001600160601b03161561141c576114198160096000896001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160601b03166040518060600160405280602d8152602001612f92602d91396120bf565b90505b95945050505050565b600a818154811061143257fe5b60009182526020909120015463ffffffff8082169250600160201b8204811691600160401b90041683565b6000546001600160a01b031690565b601e81565b6040518060400160405280600381526020016220a72760e91b81525081565b6001546001600160a01b03166114a4612374565b6001600160a01b0316146114e95760405162461bcd60e51b815260040180806020018281038252603b815260200180612ebe603b913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60008061157283604051806060016040528060258152602001612c2060259139612025565b905061157f33858361212c565b5060019392505050565b6001600160a01b03811660009081526007602052604081205463ffffffff16806115b45760006115f3565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b600061160533610f5f565b306000908152600360205260409020549091506001600160601b03808316911610156116465750306000908152600360205260409020546001600160601b03165b33600090815260096020908152604091829020548251606081019093526028808452611688936001600160601b039092169285929190612e9690830139612461565b33600081815260096020526040902080546001600160601b0319166001600160601b039390931692909217909155610bfe9030908361212c565b60006040518080612c9860439139604080519182900360430182208282019091526005825264082dcdccaf60db1b60209092019190915290507f391e0257b4d543b15773e628a3286600de26a9f641b419eeda8078cfc33bb10b6117246124cb565b3060405160200180858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405160208183030381529060405280519060200120905060006040518080612ef9603a91396040805191829003603a0182206020808401919091526001600160a01b038c1683830152606083018b905260808084018b90528251808503909101815260a08401835280519082012061190160f01b60c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a28083019392601f198301929081900390910190855afa158015611862573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118b45760405162461bcd60e51b8152600401808060200182810382526025815260200180612e446025913960400191505060405180910390fd5b6001600160a01b0381166000908152600b6020526040902080546001810190915589146119125760405162461bcd60e51b8152600401808060200182810382526021815260200180612df06021913960400191505060405180910390fd5b874211156119515760405162461bcd60e51b8152600401808060200182810382526025815260200180612d726025913960400191505060405180910390fd5b61195b818b612378565b505050505b505050505050565b600a5460001901600080805b63ffffffff8416156119c057600a8463ffffffff168154811061199357fe5b60009182526020909120015463ffffffff908116908616106119b4576119c0565b60001990930192611974565b6119c8612b51565b600a8563ffffffff16815481106119db57fe5b600091825260209182902060408051606081018252919092015463ffffffff808216808452600160201b83048216958401869052600160401b909204169190920181905296989097509095945092505050565b6000806000611a3b612b51565b600a80546000198101908110611a4d57fe5b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b83048216958501869052600160401b9092041692909101829052969195509350915050565b611aa4612374565b6001600160a01b0316611ab561145d565b6001600160a01b031614611b10576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008263ffffffff1611611b6b576040805162461bcd60e51b815260206004820181905260248201527f414e4e3a3a73657445706f6368436f6e6669673a207a65726f20626c6f636b73604482015290519081900360640190fd5b6127108163ffffffff1610611bb15760405162461bcd60e51b815260040180806020018281038252602d815260200180612e69602d913960400191505060405180910390fd5b611bb9612b51565b600a80546000198101908110611bcb57fe5b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b8204811694830194909452600160401b9004909216908201529050611c17612b51565b6040518060600160405280611c2b43611f03565b63ffffffff1681526020018563ffffffff1681526020018463ffffffff168152509050806020015163ffffffff16826020015163ffffffff16141580611c855750806040015163ffffffff16826040015163ffffffff1614155b611cc05760405162461bcd60e51b8152600401808060200182810382526032815260200180612d976032913960400191505060405180910390fd5b8051825163ffffffff90811691161415611d4d57600a80548291906000198101908110611ce957fe5b60009182526020918290208351910180549284015160409094015163ffffffff1990931663ffffffff9283161767ffffffff000000001916600160201b948316949094029390931763ffffffff60401b1916600160401b9190921602179055611dd7565b600a805460018101825560009190915281517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180546020840151604085015163ffffffff1990921663ffffffff9485161767ffffffff000000001916600160201b918516919091021763ffffffff60401b1916600160401b93909116929092029190911790555b805182516020808501516040808701518387015182880151835163ffffffff958616815292851695830195909552831681830152928216606084015251938116939216917fc01a508838d7b848b9827d7aefede67746ea1738597aa80f453c99f537ab6c499181900360800190a350505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405180603a612ef98239603a019050604051809103902081565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b600a8054600091906000198101908110611ee557fe5b600091825260209091200154600160401b900463ffffffff16919050565b6000808083815b600a5463ffffffff82161015611fca5760008484600a8463ffffffff1681548110611f3157fe5b60009182526020909120015463ffffffff16030290506001600160601b038116831015611f5e5750611fca565b806001600160601b031683039250600a8263ffffffff1681548110611f7f57fe5b600091825260209091200154600a805463ffffffff928316965090918416908110611fa657fe5b600091825260209091200154600160201b900463ffffffff16945050600101611f0a565b506001600160601b038316611fea57611fe1610a45565b63ffffffff1692505b826001600160601b03168181611ffc57fe5b0482019150600160201b826001600160601b03161061201d5763ffffffff91505b509392505050565b600081600160601b84106120b75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207c578181015183820152602001612064565b50505050905090810190601f1680156120a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836001600160601b0316836001600160601b0316111582906121245760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b505050900390565b6001600160a01b0383166121715760405162461bcd60e51b815260040180806020018281038252603b815260200180612b97603b913960400191505060405180910390fd5b6001600160a01b0382166121b65760405162461bcd60e51b8152600401808060200182810382526039815260200180612f336039913960400191505060405180910390fd5b6001600160a01b038316600090815260036020908152604091829020548251606081019093526035808452612201936001600160601b039092169285929190612d3d908301396120bf565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b0396871617905592861682529082902054825160608101909352602f8084526122699491909116928592909190612c4590830139612461565b6001600160a01b0383811660008181526003602090815260409182902080546001600160601b0319166001600160601b039687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a36001600160a01b0380841660009081526004602052604080822054858416835291205461230c929182169116836124cf565b6001600160601b0381161561236f576001600160a01b03808316600081815260086020908152604080832054948816835260039091528082205492825290205461236f928692869263ffffffff909216916001600160601b039182169116612661565b505050565b3390565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46123fc8284836124cf565b50505050565b60008363ffffffff168363ffffffff16111582906121245760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b6000838301826001600160601b0380871690831610156124c25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b50949350505050565b4690565b816001600160a01b0316836001600160a01b0316141580156124fa57506000816001600160601b0316115b1561236f576001600160a01b038316156125b2576001600160a01b03831660009081526007602052604081205463ffffffff16908161253a576000612579565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006125a08285604051806060016040528060278152602001612dc9602791396120bf565b90506125ae86848484612930565b5050505b6001600160a01b0382161561236f576001600160a01b03821660009081526007602052604081205463ffffffff1690816125ed57600061262c565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006126538285604051806060016040528060268152602001612cdb60269139612461565b905061196085848484612930565b600061266c43611f03565b90506001600160a01b03861630146127e05760005b6001600160a01b03871660009081526008602052604090205463ffffffff90811690821610156126f3576001600160a01b038716600090815260066020908152604080832063ffffffff85168452909152902080546fffffffffffffffffffffffffffffffff19169055600101612681565b506001600160a01b038616600090815260096020526040902080546001600160601b03191690556001600160601b038316156127bc5760408051808201825263ffffffff80841682526001600160601b0380871660208085019182526001600160a01b038c166000818152600683528781208180528352878120965187549451909516600160201b02640100000000600160801b03199590961663ffffffff199485161794909416949094179094559181526008909252919020805490911660011790556127e0565b6001600160a01b0386166000908152600860205260409020805463ffffffff191690555b6001600160a01b03851630146119605760008463ffffffff1611801561283857506001600160a01b038516600090815260066020908152604080832063ffffffff600019890181168552925290912054828216911610155b15612892576001600160a01b0385166000908152600660209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055611960565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526001600160a01b0398909816600081815260068a5284812089871682528a5284812093518454935163ffffffff1994851691881691909117640100000000600160801b031916600160201b91909816029690961790925590845260089096529091208054909416600190930116919091179091555050565b600061295443604051806060016040528060338152602001612e1160339139612ae5565b905060008463ffffffff1611801561299d57506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156129f7576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055612a91565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600790935292909220805460018801909316929091169190911790555b604080516001600160601b0380861682528416602082015281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600081600160201b84106120b75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b604080518082019091526000808252602082015290565b60408051606081018252600080825260208201819052918101919091529056fe414e4e3a3a676574486f6c64696e675265776172643a20696e76616c69642065706f636873414e4e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734f776e61626c653a20636f6e6669726d20616464726573732069732077726f6e67414e4e3a3a676574486f6c64696e675265776172643a2072657761726420657863656564732039362062697473414e4e3a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473414e4e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773414e4e3a3a617070726f76653a20616d6f756e7420657863656564732039362062697473454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429414e4e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773414e4e3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365414e4e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365414e4e3a3a64656c656761746542795369673a207369676e61747572652065787069726564414e4e3a3a73657445706f6368436f6e6669673a20626c6f636b7320616e6420726f692073616d65206173206265666f7265414e4e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773414e4e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365414e4e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473414e4e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265414e4e3a3a73657445706f6368436f6e6669673a20726f692065786365656473206d6178206672616374696f6e414e4e3a3a636c61696d5265776172643a20696e76616c696420636c61696d656420616d6f756e744f776e61626c653a206f6e6c792074686520617574686f72697a6564206e6577206f776e65722063616e20616363657074206f776e65727368697044656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929414e4e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373414e4e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564414e4e3a3a676574486f6c64696e675265776172643a20696e76616c696420636c61696d656420616d6f756e74a265627a7a72315820e5d6413f6b6c25cfc8fa62f5ca311a31c2a7d724c6020ad2ecbcdb590ba7493c64736f6c6343000511003200000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9

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

00000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9

-----Decoded View---------------
Arg [0] : account (address): 0x50086caf6a8b4aef941d6512ad0d2a25c48469a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9


Deployed ByteCode Sourcemap

4476:23885:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4476:23885:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4557:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4557:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9730:418;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9730:418:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6357:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6357:52:0;-1:-1:-1;;;;;6357:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;4854:48;;;:::i;:::-;;;;;;;;;;;;;;;;6670:122;;;:::i;11271:671::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11271:671:0;;;;;;;;;;;;;;;;;:::i;16665:141::-;;;:::i;4755:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6091:76;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6091:76:0;;-1:-1:-1;;;;;6091:76:0;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;6091:76:0;;;;;;;;;;;;;;;;4183:286;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4183:286:0;-1:-1:-1;;;;;4183:286:0;;:::i;:::-;;2626:105;;;:::i;:::-;;;;-1:-1:-1;;;;;2626:105:0;;;;;;;;;;;;;;5338:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5338:45:0;-1:-1:-1;;;;;5338:45:0;;:::i;12090:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12090:103:0;-1:-1:-1;;;;;12090:103:0;;:::i;6236:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6236:49:0;-1:-1:-1;;;;;6236:49:0;;:::i;10351:108::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10351:108:0;-1:-1:-1;;;;;10351:108:0;;:::i;6471:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6471:49:0;-1:-1:-1;;;;;6471:49:0;;:::i;:::-;;;;-1:-1:-1;;;;;6471:49:0;;;;;;;;;;;;;;14268:1217;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14268:1217:0;;;;;;;;:::i;7084:39::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7084:39:0;-1:-1:-1;;;;;7084:39:0;;:::i;3135:207::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3135:207:0;-1:-1:-1;;;;;3135:207:0;;:::i;19304:3276::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19304:3276:0;-1:-1:-1;;;;;19304:3276:0;;:::i;6564:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6564:33:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2242:79;;;:::i;4968:42::-;;;:::i;4655:37::-;;;:::i;3447:309::-;;;:::i;10723:238::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10723:238:0;;;;;;;;:::i;13615:222::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13615:222:0;-1:-1:-1;;;;;13615:222:0;;:::i;22678:422::-;;;:::i;12627:787::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;12627:787:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17623:511::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17623:511:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17190:254;;;:::i;15667:873::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15667:873:0;;;;;;;;;;;:::i;9210:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9210:136:0;;;;;;;;;;:::i;6886:117::-;;;:::i;5945:70::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5945:70:0;;-1:-1:-1;;;;;5945:70:0;;;;;;;;:::i;16943:129::-;;;:::i;18291:787::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18291:787:0;;:::i;4557:37::-;;;;;;;;;;;;;;-1:-1:-1;;;4557:37:0;;;;:::o;9730:418::-;9798:4;9815:13;-1:-1:-1;;9843:9:0;:21;9839:172;;;-1:-1:-1;;;9839:172:0;;;9942:57;9949:9;9942:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;9933:66;;9839:172;10034:10;10023:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;10023:31:0;;;;;;;;;;;;:40;;-1:-1:-1;;;;;;10023:40:0;-1:-1:-1;;;;;10023:40:0;;;;;;;;10081:37;;;;;;;10023:31;;10034:10;10081:37;;;;;;;;;;;10136:4;10129:11;;;9730:418;;;;;:::o;6357:52::-;;;;;;;;;;;;;;;:::o;4854:48::-;4889:13;4854:48;:::o;6670:122::-;6712:80;;;;;;;;;;;;;;;;;;6670:122;:::o;11271:671::-;-1:-1:-1;;;;;11436:15:0;;11354:4;11436:15;;;:10;:15;;;;;;;;11389:10;11436:24;;;;;;;;;;11487:57;;;;;;;;;;;;11389:10;;-1:-1:-1;;;;;11436:24:0;;;;11354:4;;11487:57;;11494:9;;11487:57;;;;;;;:6;:57::i;:::-;11471:73;;11572:3;-1:-1:-1;;;;;11561:14:0;:7;-1:-1:-1;;;;;11561:14:0;;;:48;;;;-1:-1:-1;;;;;;11579:30:0;;;;;11561:48;11557:310;;;11626:19;11648:95;11654:16;11672:6;11648:95;;;;;;;;;;;;;;;;;:5;:95::i;:::-;-1:-1:-1;;;;;11758:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;-1:-1:-1;;;;;;11758:39:0;-1:-1:-1;;;;;11758:39:0;;;;;;;;11819:36;;;;;;;11758:39;;-1:-1:-1;11758:24:0;;:15;;11819:36;;;;;;;;;11557:310;;11879:33;11895:3;11900;11905:6;11879:15;:33::i;:::-;-1:-1:-1;11930:4:0;;11271:671;-1:-1:-1;;;;;;11271:671:0:o;16665:141::-;16754:12;16767:19;;16719:13;;16754:12;-1:-1:-1;;16767:23:0;;;16754:37;;;;;;;;;;;;;;;:44;-1:-1:-1;;;16754:44:0;;;;;;-1:-1:-1;16665:141:0:o;4755:35::-;4788:2;4755:35;:::o;6091:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6091:76:0;;-1:-1:-1;;;;;6091:76:0;;:::o;4183:286::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:6;;-1:-1:-1;;;;;4270:24:0;;;4288:6;;4270:24;4262:70;;;;-1:-1:-1;;;4262:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4385:1;4369:6;;4348:40;;-1:-1:-1;;;;;4369:6:0;;;;4348:40;;4385:1;;4348:40;-1:-1:-1;4399:19:0;:32;;-1:-1:-1;;;;;;4399:32:0;;;;;;4429:1;4442:19;;;;;;;4183:286::o;2626:105::-;2704:19;;-1:-1:-1;;;;;2704:19:0;2626:105;:::o;5338:45::-;;;;;;;;;;;;-1:-1:-1;;;;;5338:45:0;;:::o;12090:103::-;12153:32;12163:10;12175:9;12153;:32::i;:::-;12090:103;:::o;6236:49::-;;;;;;;;;;;;;;;:::o;10351:108::-;-1:-1:-1;;;;;10434:17:0;;10410:4;10434:17;;;:8;:17;;;;;;-1:-1:-1;;;;;10434:17:0;10351:108;;;;:::o;6471:49::-;;;;;;;;;;;;-1:-1:-1;;;;;6471:49:0;;:::o;14268:1217::-;14347:6;14388:12;14374:11;:26;14366:77;;;;-1:-1:-1;;;14366:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14478:23:0;;14456:19;14478:23;;;:14;:23;;;;;;;;14516:17;14512:58;;14557:1;14550:8;;;;;14512:58;-1:-1:-1;;;;;14630:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;14651:16:0;;14630:38;;;;;;;;;:48;;:63;-1:-1:-1;14626:147:0;;-1:-1:-1;;;;;14717:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;14738:16:0;;;;14717:38;;;;;;;;:44;-1:-1:-1;;;14717:44:0;;-1:-1:-1;;;;;14717:44:0;;-1:-1:-1;14710:51:0;;14626:147;-1:-1:-1;;;;;14834:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;14830:88:0;;;14905:1;14898:8;;;;;14830:88;14930:12;-1:-1:-1;;14972:16:0;;14999:428;15014:5;15006:13;;:5;:13;;;14999:428;;;15078:1;15061:13;;;15060:19;;;15052:27;;15121:20;;:::i;:::-;-1:-1:-1;;;;;;15144:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;15121:51;;;;;;;;;;;;;;;-1:-1:-1;;;15121:51:0;;;-1:-1:-1;;;;;15121:51:0;;;;;;;;;15191:27;;15187:229;;;15246:8;;;;-1:-1:-1;15239:15:0;;-1:-1:-1;;;;15239:15:0;15187:229;15280:12;;:26;;;-1:-1:-1;15276:140:0;;;15335:6;15327:14;;15276:140;;;15399:1;15390:6;:10;15382:18;;15276:140;14999:428;;;;;-1:-1:-1;;;;;;15444:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;15444:33:0;;;;;-1:-1:-1;;14268:1217:0;;;;:::o;7084:39::-;;;;;;;;;;;;;:::o;3135:207::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3228:19;:39;;-1:-1:-1;;;;;;3228:39:0;-1:-1:-1;;;;;3228:39:0;;;;;;;;;;;3283:51;;3314:19;;;3283:51;;-1:-1:-1;;3283:51:0;3135:207;:::o;19304:3276::-;-1:-1:-1;;;;;19476:26:0;;19368:6;19476:26;;;:17;:26;;;;;;;;19519:19;19515:60;;19562:1;19555:8;;;;;19515:60;19587:16;19606:23;19616:12;19606:9;:23::i;:::-;19587:42;-1:-1:-1;19644:14:0;;;19640:55;;19682:1;19675:8;;;;;;19640:55;-1:-1:-1;;19719:13:0;5008:2;19747:26;;;;19743:1238;;;19797:1;19790:8;;;;;;19743:1238;-1:-1:-1;;;;;19954:23:0;;19831:24;19954:23;;;:14;:23;;;;;;;;:26;;;;;;;;:32;-1:-1:-1;;19858:26:0;;;19954:52;;;;:32;;:52;19950:101;;;20034:1;20027:8;;;;;;;19950:101;-1:-1:-1;;;;;20119:23:0;;;;;;:14;:23;;;;;;;;:70;-1:-1:-1;;20143:18:0;;20119:43;;;;;;;;;:49;:70;;;:49;;:70;20115:855;;20244:1;20227:14;:18;20210:35;;20115:855;;;20286:12;;-1:-1:-1;;20301:18:0;20375:580;20390:14;20382:22;;:5;:22;;;20375:580;;;20480:1;20454:22;;;20453:28;;;20445:36;;20531:23;;:::i;:::-;-1:-1:-1;;;;;;20557:23:0;;;;;;:14;:23;;;;;;;;:31;;;;;;;;;;;;;20531:57;;;;;;;;;;;;;;;-1:-1:-1;;;20531:57:0;;;-1:-1:-1;;;;;20531:57:0;;;;;;;;;20615:29;;;20611:141;;;-1:-1:-1;20690:6:0;-1:-1:-1;20723:5:0;;20611:141;20757:8;;:28;;;;;;;20753:183;;;20831:6;20814:23;;20753:183;;;20911:1;20902:6;:10;20894:18;;20753:183;20375:580;;;;;20115:855;;19743:1238;21036:14;;21065:1173;21093:14;21086:21;;:3;:21;;;21065:1173;;21131:23;;:::i;:::-;-1:-1:-1;;;;;;21157:23:0;;;;;;:14;:23;;;;;;;;:28;;;;;;;;;;;;21131:54;;;;;;;;;;;;;;;-1:-1:-1;;;21131:54:0;;;-1:-1:-1;;;;;21131:54:0;;;;;;;;;21157:23;;;21228:24;;:14;:24::i;:::-;21287:8;;21200:52;;-1:-1:-1;21200:52:0;-1:-1:-1;;;21310:917:0;21323:12;:19;21317:25;;;;21310:917;;;21466:12;:19;21385:9;;21370:12;;-1:-1:-1;;21466:23:0;21459:31;;;;:70;;;;;21502:12;21515:3;21521:1;21515:7;21502:21;;;;;;;;;;;;;;;;;;;:27;;;;;21494:35;;;;21459:70;21455:154;;;21562:12;21575:3;21581:1;21575:7;21562:21;;;;;;;;;;;;;;;;;;;:27;;;;-1:-1:-1;21455:154:0;21637:14;21631:20;;:3;:20;;;:70;;;;-1:-1:-1;;;;;;21663:23:0;;;;;;:14;:23;;;;;;;;:32;21693:1;21687:7;;21663:32;;;;;;;;;:38;;;21655:46;;;;21631:70;21627:205;;;-1:-1:-1;;;;;;;21734:23:0;;;;;;:14;:23;;;;;;;;:32;21764:1;21758:7;;;21734:32;;;;;;;;;;:38;;;21627:205;21897:65;21903:5;21910:10;21897:65;;;;;;;;;;;;;;;;;:5;:65::i;:::-;21869:93;;21891:3;21869:25;;21877:2;:10;;;-1:-1:-1;;;;;21869:19:0;:25;:93;21859:6;:104;21850:113;;21986:10;21982:64;;;22021:5;;;;21982:64;22112:12;:19;22077:5;;-1:-1:-1;22077:5:0;;-1:-1:-1;;22112:23:0;22105:31;;;;22101:111;;;22167:12;22180:3;22186:1;22180:7;22167:21;;;;;;;;;;;;;;;;;;;:25;-1:-1:-1;;;22167:25:0;;;;;-1:-1:-1;22101:111:0;-1:-1:-1;;21344:5:0;;;;;21310:917;;;-1:-1:-1;;21109:5:0;;;;;-1:-1:-1;21065:1173:0;;-1:-1:-1;21065:1173:0;;-1:-1:-1;22248:13:0;22264:71;22280:5;22271:6;:14;22264:71;;;;;;;;;;;;;;;;;:6;:71::i;:::-;-1:-1:-1;;;;;22395:23:0;;22421:1;22395:23;;;:14;:23;;;;;;22248:87;;-1:-1:-1;;;;;;22395:23:0;:27;22391:156;;22448:87;22454:6;22462:14;:23;22477:7;-1:-1:-1;;;;;22462:23:0;-1:-1:-1;;;;;22462:23:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22462:23:0;22448:87;;;;;;;;;;;;;;;;;:5;:87::i;:::-;22439:96;;22391:156;22566:6;19304:3276;-1:-1:-1;;;;;19304:3276:0:o;6564:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;6564:33:0;;;;;-1:-1:-1;;;6564:33:0;;;;:::o;2242:79::-;2280:7;2307:6;-1:-1:-1;;;;;2307:6:0;2242:79;:::o;4968:42::-;5008:2;4968:42;:::o;4655:37::-;;;;;;;;;;;;;;-1:-1:-1;;;4655:37:0;;;;:::o;3447:309::-;3518:19;;-1:-1:-1;;;;;3518:19:0;3502:12;:10;:12::i;:::-;-1:-1:-1;;;;;3502:35:0;;3494:107;;;;-1:-1:-1;;;3494:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3646:19;;;3638:6;;3617:49;;-1:-1:-1;;;;;3646:19:0;;;;3638:6;;;;3617:49;;;3686:19;;;;3677:28;;-1:-1:-1;;;;;;3677:28:0;;;-1:-1:-1;;;;;3686:19:0;;3677:28;;;;3716:32;;;3447:309::o;10723:238::-;10789:4;10806:13;10822:58;10829:9;10822:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;10806:74;;10891:40;10907:10;10919:3;10924:6;10891:15;:40::i;:::-;-1:-1:-1;10949:4:0;;10723:238;-1:-1:-1;;;10723:238:0:o;13615:222::-;-1:-1:-1;;;;;13721:23:0;;13680:6;13721:23;;;:14;:23;;;;;;;;13762:16;:67;;13828:1;13762:67;;;-1:-1:-1;;;;;13781:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;13802:16:0;;13781:38;;;;;;;;;:44;-1:-1:-1;;;13781:44:0;;-1:-1:-1;;;;;13781:44:0;13762:67;13755:74;13615:222;-1:-1:-1;;;13615:222:0:o;22678:422::-;22720:20;22743:28;22760:10;22743:16;:28::i;:::-;22803:4;22786:23;;;;:8;:23;;;;;;22720:51;;-1:-1:-1;;;;;;22786:39:0;;;:23;;:39;22782:111;;;-1:-1:-1;22875:4:0;22858:23;;;;:8;:23;;;;;;-1:-1:-1;;;;;22858:23:0;22782:111;22953:10;22938:26;;;;:14;:26;;;;;;;;;;22932:92;;;;;;;;;;;;;;-1:-1:-1;;;;;22938:26:0;;;;22966:13;;22932:92;;;;;;;:5;:92::i;:::-;22918:10;22903:26;;;;:14;:26;;;;;:121;;-1:-1:-1;;;;;;22903:121:0;-1:-1:-1;;;;;22903:121:0;;;;;;;;;;;23035:57;;23059:4;;23078:13;23035:15;:57::i;12627:787::-;12744:23;6712:80;;;;;;;;;;;;;;;;;;;12824:4;;;;;;;;;-1:-1:-1;;;12824:4:0;;;;;;;;6712:80;-1:-1:-1;12808:22:0;12832:12;:10;:12::i;:::-;12854:4;12780:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12780:80:0;-1:-1:-1;;;;;12780:80:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12780:80:0;;;12770:91;;;;;;12744:117;;12872:18;6932:71;;;;;;;;;;;;;;;;;;;12903:57;;;;;;;;-1:-1:-1;;;;;12903:57:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12903:57:0;;;;;12893:68;;;;;;-1:-1:-1;;;12999:57:0;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12999:57:0;;;;;;12989:68;;;;;;;;;-1:-1:-1;13088:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:68;;-1:-1:-1;12989:68:0;;-1:-1:-1;;;13088:26:0;;;;;;;12903:57;-1:-1:-1;;13088:26:0;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;13088:26:0;;-1:-1:-1;;13088:26:0;;;-1:-1:-1;;;;;;;13133:23:0;;13125:73;;;;-1:-1:-1;;;13125:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13226:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;13217:28;;13209:74;;;;-1:-1:-1;;;13209:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13309:6;13302:3;:13;;13294:63;;;;-1:-1:-1;;;13294:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13375:31;13385:9;13396;13375;:31::i;:::-;13368:38;;;;12627:787;;;;;;;:::o;17623:511::-;17766:12;:19;-1:-1:-1;;17766:23:0;17685:12;;;17858:136;17865:9;;;;17858:136;;17916:12;17929:5;17916:19;;;;;;;;;;;;;;;;;;;:25;;;;;17904:37;;;;17900:83;;17962:5;;17900:83;-1:-1:-1;;17876:7:0;;;;17858:136;;;18004:21;;:::i;:::-;18028:12;18041:5;18028:19;;;;;;;;;;;;;;;;;;;18004:43;;;;;;;;18028:19;;;;18004:43;;;;;;;;-1:-1:-1;;;18004:43:0;;;;;;;;;;-1:-1:-1;;;18004:43:0;;;;;;;;;;;17623:511;;18004:43;;-1:-1:-1;18004:43:0;;;-1:-1:-1;17623:511:0;-1:-1:-1;;;17623:511:0:o;17190:254::-;17244:12;17258:13;17273:10;17296:21;;:::i;:::-;17320:12;17333:19;;-1:-1:-1;;17333:23:0;;;17320:37;;;;;;;;;;;;;;;17296:61;;;;;;;;17320:37;;;;17296:61;;;;;;;;-1:-1:-1;;;17296:61:0;;;;;;;;;;-1:-1:-1;;;17296:61:0;;;;;;;;;;;;;;-1:-1:-1;17296:61:0;-1:-1:-1;17296:61:0;-1:-1:-1;;17190:254:0:o;15667:873::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:1;15754:6;:10;;;15746:55;;;;;-1:-1:-1;;;15746:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15826:5;15820:3;:11;;;15812:69;;;;-1:-1:-1;;;15812:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15892:25;;:::i;:::-;15920:12;15933:19;;-1:-1:-1;;15933:23:0;;;15920:37;;;;;;;;;;;;;;;15892:65;;;;;;;;15920:37;;;;15892:65;;;;;;;-1:-1:-1;;;15892:65:0;;;;;;;;;;;-1:-1:-1;;;15892:65:0;;;;;;;;;;-1:-1:-1;15968:24:0;;:::i;:::-;15995:49;;;;;;;;16007:23;16017:12;16007:9;:23::i;:::-;15995:49;;;;;;16032:6;15995:49;;;;;;16040:3;15995:49;;;;;15968:76;;16080:5;:12;;;16063:29;;:6;:13;;;:29;;;;:56;;;;16110:5;:9;;;16096:23;;:6;:10;;;:23;;;;16063:56;16055:119;;;;-1:-1:-1;;;16055:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16278:11;;16262:12;;:27;;;;;;;16258:162;;;16306:12;16319:19;;16346:5;;16306:12;-1:-1:-1;;16319:23:0;;;16306:37;;;;;;;;;;;;;;;:45;;:37;;:45;;;;;;;;;;;-1:-1:-1;;16306:45:0;;;;;;;;-1:-1:-1;;16306:45:0;-1:-1:-1;;;16306:45:0;;;;;;;;;;;-1:-1:-1;;;;16306:45:0;-1:-1:-1;;;16306:45:0;;;;;;;;16258:162;;;16384:12;27:10:-1;;39:1;23:18;;45:23;;-1:-1;16384:24:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16384:24:0;;;;;;;;-1:-1:-1;;16384:24:0;-1:-1:-1;;;16384:24:0;;;;;;;;-1:-1:-1;;;;16384:24:0;-1:-1:-1;;;16384:24:0;;;;;;;;;;;;;;16258:162;16495:11;;16454:12;;16468:13;;;;;16483:10;;;;;16508:12;;;;16522:9;;;;16435:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2523:1;;15667:873;;:::o;9210:136::-;-1:-1:-1;;;;;9310:19:0;;;9286:4;9310:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;-1:-1:-1;;;;;9310:28:0;;9210:136::o;6886:117::-;6932:71;;;;;;;;;;;;;;;;;;6886:117;:::o;5945:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5945:70:0;;-1:-1:-1;;;;;5945:70:0;;:::o;16943:129::-;17023:12;17036:19;;16994:10;;17023:12;-1:-1:-1;;17036:23:0;;;17023:37;;;;;;;;;;;;;;;:41;-1:-1:-1;;;17023:41:0;;;;;;-1:-1:-1;16943:129:0:o;18291:787::-;18349:6;;;18439:11;18349:6;18461:365;18484:12;:19;18480:23;;;;18461:365;;;18525:18;18588:6;18579:5;18554:12;18567:1;18554:15;;;;;;;;;;;;;;;;;;;:21;;;18547:37;18546:48;;-1:-1:-1;;;;;;18613:22:0;;;;18609:68;;;18656:5;;;18609:68;18713:11;-1:-1:-1;;;;;18702:22:0;:8;:22;18691:33;;18747:12;18760:1;18747:15;;;;;;;;;;;;;;;;;;;:21;18792:12;:15;;18747:21;;;;;-1:-1:-1;18792:12:0;;:15;;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;18792:22:0;;;;;-1:-1:-1;;18505:3:0;;18461:365;;;-1:-1:-1;;;;;;18842:11:0;;18838:76;;18879:23;:21;:23::i;:::-;18870:32;;;;18838:76;18958:6;-1:-1:-1;;;;;18947:17:0;:8;:17;;;;;;18932:5;:33;18924:41;;-1:-1:-1;;;18980:5:0;-1:-1:-1;;;;;18980:14:0;;18976:64;;19019:9;19011:17;;18976:64;-1:-1:-1;19064:5:0;18291:787;-1:-1:-1;;;18291:787:0:o;27667:161::-;27742:6;27780:12;-1:-1:-1;;;27769:9:0;;27761:32;;;;-1:-1:-1;;;27761:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27761:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27818:1:0;;27667:161;-1:-1:-1;;27667:161:0:o;28032:165::-;28118:6;28150:1;-1:-1:-1;;;;;28145:6:0;:1;-1:-1:-1;;;;;28145:6:0;;;28153:12;28137:29;;;;;-1:-1:-1;;;28137:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;28137:29:0;-1:-1:-1;;;28184:5:0;;;28032:165::o;23491:746::-;-1:-1:-1;;;;;23585:17:0;;23577:89;;;;-1:-1:-1;;;23577:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23685:17:0;;23677:87;;;;-1:-1:-1;;;23677:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23799:13:0;;;;;;:8;:13;;;;;;;;;;23793:85;;;;;;;;;;;;;;-1:-1:-1;;;;;23799:13:0;;;;23814:6;;23793:85;;;;;;;:5;:85::i;:::-;-1:-1:-1;;;;;23777:13:0;;;;;;;:8;:13;;;;;;;;:101;;-1:-1:-1;;;;;;23777:101:0;-1:-1:-1;;;;;23777:101:0;;;;;;23911:13;;;;;;;;;;23905:79;;;;;;;;;;;;;;23911:13;;;;;23926:6;;23905:79;;;;;;;;:5;:79::i;:::-;-1:-1:-1;;;;;23889:13:0;;;;;;;:8;:13;;;;;;;;;:95;;-1:-1:-1;;;;;;23889:95:0;-1:-1:-1;;;;;23889:95:0;;;;;;24000:26;;;;;;;;;23889:13;;24000:26;;;;;;;;;;;;;;;-1:-1:-1;;;;;24054:14:0;;;;;;;:9;:14;;;;;;;24070;;;;;;;;24039:54;;24054:14;;;;24070;24086:6;24039:14;:54::i;:::-;-1:-1:-1;;;;;24108:10:0;;;24104:126;;-1:-1:-1;;;;;24165:22:0;;;;;;;:17;:22;;;;;;;;;24189:13;;;;;:8;:13;;;;;;;24204;;;;;;24135:83;;24155:3;;24160;;24165:22;;;;;-1:-1:-1;;;;;24189:13:0;;;;24204;24135:19;:83::i;:::-;23491:746;;;:::o;747:92::-;823:10;747:92;:::o;23108:375::-;-1:-1:-1;;;;;23211:20:0;;;23185:23;23211:20;;;:9;:20;;;;;;;;;;23268:8;:19;;;;;;23298:20;;;;:32;;;-1:-1:-1;;;;;;23298:32:0;;;;;;;23348:54;;23211:20;;;;;-1:-1:-1;;;;;23268:19:0;;;;23298:32;;23211:20;;;23348:54;;23185:23;23348:54;23415:60;23430:15;23447:9;23458:16;23415:14;:60::i;:::-;23108:375;;;;:::o;27494:165::-;27580:6;27612:1;27607:6;;:1;:6;;;;27615:12;27599:29;;;;;-1:-1:-1;;;27599:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27836:188:0;27922:6;27952:5;;;27984:12;-1:-1:-1;;;;;27976:6:0;;;;;;;;27968:29;;;;-1:-1:-1;;;27968:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27968:29:0;-1:-1:-1;28015:1:0;27836:188;-1:-1:-1;;;;27836:188:0:o;28205:153::-;28315:9;28205:153;:::o;24245:937::-;24350:6;-1:-1:-1;;;;;24340:16:0;:6;-1:-1:-1;;;;;24340:16:0;;;:30;;;;;24369:1;24360:6;-1:-1:-1;;;;;24360:10:0;;24340:30;24336:839;;;-1:-1:-1;;;;;24391:20:0;;;24387:381;;-1:-1:-1;;;;;24451:22:0;;24432:16;24451:22;;;:14;:22;;;;;;;;;24511:13;:60;;24570:1;24511:60;;;-1:-1:-1;;;;;24527:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;24547:13:0;;24527:34;;;;;;;;;:40;-1:-1:-1;;;24527:40:0;;-1:-1:-1;;;;;24527:40:0;24511:60;24492:79;;24590:16;24609:67;24615:9;24626:6;24609:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;24590:86;;24695:57;24712:6;24720:9;24731;24742;24695:16;:57::i;:::-;24387:381;;;;-1:-1:-1;;;;;24788:20:0;;;24784:380;;-1:-1:-1;;;;;24848:22:0;;24829:16;24848:22;;;:14;:22;;;;;;;;;24908:13;:60;;24967:1;24908:60;;;-1:-1:-1;;;;;24924:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;24944:13:0;;24924:34;;;;;;;;;:40;-1:-1:-1;;;24924:40:0;;-1:-1:-1;;;;;24924:40:0;24908:60;24889:79;;24987:16;25006:66;25012:9;25023:6;25006:66;;;;;;;;;;;;;;;;;:5;:66::i;:::-;24987:85;;25091:57;25108:6;25116:9;25127;25138;25091:16;:57::i;25826:1295::-;25957:12;25972:23;25982:12;25972:9;:23::i;:::-;25957:38;-1:-1:-1;;;;;;26012:20:0;;26027:4;26012:20;26008:582;;26108:8;26103:116;-1:-1:-1;;;;;26126:22:0;;;;;;:17;:22;;;;;;;;;;26122:26;;;;26103:116;;;-1:-1:-1;;;;;26181:19:0;;;;;;:14;:19;;;;;;;;:22;;;;;;;;;;26174:29;;-1:-1:-1;;26174:29:0;;;;26150:3;26103:116;;;-1:-1:-1;;;;;;26271:19:0;;26293:1;26271:19;;;:14;:19;;;;;:23;;-1:-1:-1;;;;;;26271:23:0;;;-1:-1:-1;;;;;26359:14:0;;;26355:224;;26419:32;;;;;;;;;;;;;;-1:-1:-1;;;;;26419:32:0;;;;;;;;;;-1:-1:-1;;;;;26394:19:0;;-1:-1:-1;26394:19:0;;;:14;:19;;;;;:22;;;;;;;;:57;;;;;;;;;-1:-1:-1;;;26394:57:0;-1:-1:-1;;;;;;26394:57:0;;;;-1:-1:-1;;26394:57:0;;;;;;;;;;;;;;;26470:22;;;:17;:22;;;;;;:26;;;;;26394:57;26470:26;;;26355:224;;;-1:-1:-1;;;;;26537:22:0;;26562:1;26537:22;;;:17;:22;;;;;:26;;-1:-1:-1;;26537:26:0;;;26355:224;-1:-1:-1;;;;;26606:20:0;;26621:4;26606:20;26602:431;;26713:1;26701:9;:13;;;:66;;;;-1:-1:-1;;;;;;26718:19:0;;;;;;:14;:19;;;;;;;;:49;-1:-1:-1;;26738:13:0;;26718:34;;;;;;;;;:40;:49;;;:40;;:49;;26701:66;26697:325;;;-1:-1:-1;;;;;26788:19:0;;;;;;:14;:19;;;;;;;;-1:-1:-1;;26808:13:0;;26788:34;;;;;;;;;:55;;-1:-1:-1;;;;;;26788:55:0;-1:-1:-1;;;;;;;;26788:55:0;;;;;;26697:325;;;26917:32;;;;;;;;;;;;;;-1:-1:-1;;;;;26917:32:0;;;;;;;;;;-1:-1:-1;;;;;26884:19:0;;;;-1:-1:-1;26884:19:0;;;:14;:19;;;;;:30;;;;;;;;;;:65;;;;;;-1:-1:-1;;26884:65:0;;;;;;;;;;-1:-1:-1;;;;;;26884:65:0;-1:-1:-1;;;26884:65:0;;;;;;;;;;;;26968:22;;;:17;:22;;;;;;:38;;;;;-1:-1:-1;26993:13:0;;;26968:38;;;;;;;;-1:-1:-1;;25826:1295:0:o;25190:628::-;25308:18;25329:75;25336:12;25329:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;25308:96;;25434:1;25419:12;:16;;;:85;;;;-1:-1:-1;;;;;;25439:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;25462:16:0;;25439:40;;;;;;;;;:50;:65;;;:50;;:65;25419:85;25415:329;;;-1:-1:-1;;;;;25519:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;25542:16:0;;25519:40;;;;;;;;;:57;;-1:-1:-1;;;;;;25519:57:0;-1:-1:-1;;;;;;;;25519:57:0;;;;;;25415:329;;;25644:33;;;;;;;;;;;;;;-1:-1:-1;;;;;25644:33:0;;;;;;;;;;-1:-1:-1;;;;;25605:22:0;;-1:-1:-1;25605:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;-1:-1:-1;;;25605:72:0;-1:-1:-1;;;;;;25605:72:0;;;-1:-1:-1;;25605:72:0;;;;;;;;;;;;;;;25690:25;;;:14;:25;;;;;;;:44;;25605:72;25718:16;;25690:44;;;;;;;;;;;;;25415:329;25759:51;;;-1:-1:-1;;;;;25759:51:0;;;;;;;;;;;;;-1:-1:-1;;;;;25759:51:0;;;;;;;;;;;25190:628;;;;;:::o;27129:161::-;27204:6;27242:12;-1:-1:-1;;;27231:9:0;;27223:32;;;;-1:-1:-1;;;27223:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4476:23885:0;;;;;;;;;;-1:-1:-1;4476:23885:0;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;4476:23885:0;;;;;;;;;;;;;;;;;:::o

Swarm Source

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