Contract 0xC52469ea959C89829619847613b2A122c5360249

 
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xa3d605bae45c4084f90dbc694bccc6b06b0834e59220dab286130da368c2b84b77710922021-05-27 10:25:2157 days 17 hrs agoCentric: Deployer IN  Contract Creation0 BNB0.05317016
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CentricRise

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: CentricRise.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

import './BEP20.sol';
import './RoundMath.sol';
import './DateLib.sol';
import './SafeMath.sol';

abstract contract SwapInterface {
    function totalSupply() public view virtual returns (uint256);

    function balanceOf(address who) external view virtual returns (uint256);

    function mintFromRise(address to, uint256 value) public virtual returns (bool);

    function burnFromRise(address tokensOwner, uint256 value) external virtual returns (bool);
}

contract CentricRise is BEP20 {
    using RoundMath for uint256;
    using DateLib for uint256;
    using SafeMath for uint256;

    /**
     * STATE VARIABLES
     */
    address public swapContract;
    uint256 public quarantineBalance;
    uint256 public lastBlockNumber; // number of last created block
    uint256 public lastBalancedHour;

    // Price of Rise in USD has base of PRICE_BASE
    uint256 constant PRICE_BASE = 10**8;

    // Inital price of Rise in USD
    uint256 constant INITIAL_PRICE = 888901550;

    // Structure of a Price Block
    struct Block {
        uint256 risePrice; // USD price of Rise for the block
        uint256 growthRate; // FutureGrowthRate value at the time of block creation
        //solium-disable-next-line max-len
        uint256 change; // percentage (base of PRICE_BASE), RisePrice change relative to prev. block
        uint256 created; // hours, Unix epoch time
    }

    // Price Blocks for a given hour (number of hours since epoch time)
    mapping(uint256 => Block) public hoursToBlock;

    /**
     * Price factors for months with [28, 29, 30, 31] days,
     * price factors determine compounding hourly growth
     * from the headling monthly growthRate,
     * calculated as (1+r)^(1/t)-1
     * where:
     * r - growthRate,
     * t - number of hours in a given month
     *
     * e.g.: for growthRate=2850 (2850/GROWTH_RATE_BASE=0.285=28.5%)
     * price factors are (considering PRICE_FACTOR_BASE): [37322249, 36035043, 34833666, 33709810]
     */
    mapping(uint256 => uint256[4]) public growthRateToPriceFactors;
    uint256 constant GROWTH_RATE_BASE = 10**4;
    uint256 constant PRICE_FACTOR_BASE = 10**11;

    bool public priceFactorsLocked = false;

    event DoBalance(uint256 indexed currentHour, uint256 riseAmountBurnt);

    event ConvertToSwap(
        address indexed converter,
        uint256 riseAmountSent,
        uint256 swapAmountReceived
    );

    event ConvertToRise(
        address indexed converter,
        uint256 swapAmountSent,
        uint256 riseAmountReceived
    );

    event MintSwap(address receiver, uint256 amount);

    event BurnSwap(uint256 amountBurnt);

    event PriceFactorSet(
        uint256 growthRate,
        uint256 priceFactor0,
        uint256 priceFactor1,
        uint256 priceFactor2,
        uint256 priceFactor3
    );

    event BlockCreated(
        uint256 blockNumber,
        uint256 risePrice,
        uint256 growthRate,
        uint256 change,
        uint256 created
    );

    event QuarantineBalanceBurnt(uint256 amount);

    event LostTokensBurnt(uint256 amount);

    /**
     * Creates Rise contract. Also sets the Swap address
     * to the contract storage to be able to interact with it.
     * Mints 1 billion tokens to _mintSaver address.
     */
    constructor(address _mintSaver, address _swapContract) BEP20('Centric RISE', 'CNR', 8) {
        _mint(_mintSaver, 100000000000000000); // 1 Billion
        swapContract = _swapContract;
    }

    // Returns price of Rise for the current hour
    function getCurrentPrice() external view returns (uint256) {
        require(hoursToBlock[getCurrentHour()].risePrice > 0, 'BLOCK_NOT_DEFINED');
        return hoursToBlock[getCurrentHour()].risePrice;
    }

    // Returns price of Rise at a specified hour
    function getPrice(uint256 _hour) external view returns (uint256) {
        require(hoursToBlock[_hour].risePrice > 0, 'BLOCK_NOT_DEFINED');
        return hoursToBlock[_hour].risePrice;
    }

    /**
     *  Returns Price Block data
     *  uint256 risePrice;     // USD price of Rise for the block
     *  uint256 growthRate;    // growthRate value of the risePrice
     *  uint256 change;        // percentage (base of PRICE_BASE), RisePrice change relative to prev. block
     *  uint256 created;       // hours, unix epoch time
     */
    function getBlockData(uint256 _hoursEpoch)
        external
        view
        returns (
            uint256 _risePrice,
            uint256 _growthRate,
            uint256 _change,
            uint256 _created
        )
    {
        require(_hoursEpoch > 0, 'EMPTY_HOURS_VALUE');
        require(hoursToBlock[_hoursEpoch].risePrice > 0, 'BLOCK_NOT_DEFINED');

        _risePrice = hoursToBlock[_hoursEpoch].risePrice;
        _growthRate = hoursToBlock[_hoursEpoch].growthRate;
        _change = hoursToBlock[_hoursEpoch].change;
        _created = hoursToBlock[_hoursEpoch].created;

        return (_risePrice, _growthRate, _change, _created);
    }

    /**
     * Single call creates ONE Price Block with specified monthly _growthRate.
     * For creating a batch of blocks function needs to be run according amount of times.
     * Admin should always make sure that there is a block for the currentHour
     * and if not - create it. Otherwise users will not be able to convert tokens
     * until a new block is created.
     * _blockNumber - always has to be lastBlockNumber + 1 (works only as a security check)
     * _growthRate - must be specified in growthRateToPriceFactors
     * percentage (fraction of 1, e.g.: 0.3)
     * presented as integer with base of GROWTH_RATE_BASE (to be divided by GROWTH_RATE_BASE to get a fraction of 1)
     */
    function doCreateBlock(uint256 _blockNumber, uint256 _growthRate)
        external
        onlyAdmin()
        returns (bool _success)
    {
        require(priceFactorsLocked, 'PRICE_FACTORS_MUST_BE_LOCKED');

        require(_growthRate != 0, 'GROWTH_RATE_CAN_NOT_BE_ZERO');
        require(_growthRate < GROWTH_RATE_BASE, 'GROWTH_RATE_IS_GREATER_THAN_GROWTH_RATE_BASE');
        require(growthRateToPriceFactors[_growthRate][0] > 0, 'GROWTH_RATE_IS_NOT_SPECIFIED');

        require(_createBlock(_blockNumber, _growthRate), 'FAILED_TO_CREATE_BLOCK');
        return true;
    }

    /**
     * set growthRateToPriceFactors
     * _priceFactors - see comments for mapping growthRateToPriceFactors
     */
    function setPriceFactors(uint256 _growthRate, uint256[4] memory _priceFactors)
        external
        onlyAdmin()
        returns (bool _success)
    {
        require(priceFactorsLocked == false, 'PRICE_FACTORS_ALREADY_LOCKED');

        require(_growthRate != 0, 'GROWTH_RATE_CAN_NOT_BE_ZERO');
        require(_growthRate < GROWTH_RATE_BASE, 'GROWTH_RATE_IS_GREATER_THAN_GROWTH_RATE_BASE');

        require(_priceFactors[0] > 0, 'PRICE_FACTOR_0_CAN_NOT_BE_ZERO');
        require(_priceFactors[0] < 103200117, 'PRICE_FACTOR_0_IS_TOO_BIG');
        require(_priceFactors[1] > 0, 'PRICE_FACTOR_1_CAN_NOT_BE_ZERO');
        require(_priceFactors[1] < 99639720, 'PRICE_FACTOR_1_IS_TOO_BIG');
        require(_priceFactors[2] > 0, 'PRICE_FACTOR_2_CAN_NOT_BE_ZERO');
        require(_priceFactors[2] < 96316797, 'PRICE_FACTOR_2_IS_TOO_BIG');
        require(_priceFactors[3] > 0, 'PRICE_FACTOR_3_CAN_NOT_BE_ZERO');
        require(_priceFactors[3] < 93208356, 'PRICE_FACTOR_3_IS_TOO_BIG');

        require(
            _priceFactors[0] > _priceFactors[1] &&
                _priceFactors[1] > _priceFactors[2] &&
                _priceFactors[2] > _priceFactors[3],
            'PRICE_FACTORS_ARE_NOT_VALID'
        );

        growthRateToPriceFactors[_growthRate] = _priceFactors;

        emit PriceFactorSet(
            _growthRate,
            _priceFactors[0],
            _priceFactors[1],
            _priceFactors[2],
            _priceFactors[3]
        );
        return true;
    }

    /**
     * Call only after all priceFactors have been set
     * Call before creating first block
     */
    function lockPriceFactors() external onlyAdmin() returns (bool _success) {
        priceFactorsLocked = true;
        return true;
    }

    /**
     * Public function that burns Rise from quarantine
     * according to the burnQuarantine() formula.
     * Needed for economic logic of Rise token.
     */
    function doBalance() external returns (bool _success) {
        require(hoursToBlock[getCurrentHour()].risePrice != 0, 'CURRENT_PRICE_BLOCK_NOT_DEFINED');
        require(lastBalancedHour < getCurrentHour(), 'CHANGE_IS_ALREADY_BURNT_IN_THIS_HOUR');

        lastBalancedHour = getCurrentHour();

        uint256 _riseBurnt = _burnQuarantined();

        emit DoBalance(getCurrentHour(), _riseBurnt);
        return true;
    }

    /**
     * Public function that allows users to convert Swap tokens to Rise ones.
     * Amount of received Rise tokens depends on the risePrice of the current block.
     */
    function convertToRise(uint256 _swapAmount) external returns (bool _success) {
        require(hoursToBlock[getCurrentHour()].risePrice != 0, 'CURRENT_PRICE_BLOCK_NOT_DEFINED');

        require(
            SwapInterface(swapContract).balanceOf(msg.sender) >= _swapAmount,
            'INSUFFICIENT_SWAP_BALANCE'
        );

        require(
            SwapInterface(swapContract).burnFromRise(msg.sender, _swapAmount),
            'BURNING_SWAP_FAILED'
        );

        emit BurnSwap(_swapAmount);

        uint256 _riseToDequarantine =
            (_swapAmount.mul(PRICE_BASE)).div(hoursToBlock[getCurrentHour()].risePrice);

        quarantineBalance = quarantineBalance.sub(_riseToDequarantine);
        require(this.transfer(msg.sender, _riseToDequarantine), 'CONVERT_TO_RISE_FAILED');

        emit ConvertToRise(msg.sender, _swapAmount, _riseToDequarantine);
        return true;
    }

    /**
     * Public function that allows users to convert Rise tokens to Swap ones.
     * Amount of received Swap tokens depends on the risePrice of a current block.
     */
    function convertToSwap(uint256 _riseAmount) external returns (uint256) {
        require(hoursToBlock[getCurrentHour()].risePrice != 0, 'CURRENT_PRICE_BLOCK_NOT_DEFINED');

        require(balanceOf(msg.sender) >= _riseAmount, 'INSUFFICIENT_RISE_BALANCE');

        quarantineBalance = quarantineBalance.add(_riseAmount);
        require(transfer(address(this), _riseAmount), 'RISE_TRANSFER_FAILED');

        uint256 _swapToIssue =
            (_riseAmount.mul(hoursToBlock[getCurrentHour()].risePrice)).div(PRICE_BASE);

        require(
            SwapInterface(swapContract).mintFromRise(msg.sender, _swapToIssue),
            'SWAP_MINT_FAILED'
        );

        emit MintSwap(msg.sender, _swapToIssue);

        emit ConvertToSwap(msg.sender, _riseAmount, _swapToIssue);
        return _swapToIssue;
    }

    /**
     * Function is needed to burn lost tokens that probably were sent
     * to the contract address by mistake.
     */
    function burnLostTokens() external onlyContractOwner() returns (bool _success) {
        uint256 _amount = balanceOf(address(this)).sub(quarantineBalance);

        _burn(address(this), _amount);

        emit LostTokensBurnt(_amount);
        return true;
    }

    /**
     * Internal function that implements logic to burn a part of Rise tokens on quarantine.
     * Formula is based on network capitalization rules -
     * Network capitalization of quarantined Rise must be equal to
     * network capitalization of Swap
     * calculated as (q * pRISE - c * pSWAP) / pRISE
     * where:
     * q - quarantined Rise,
     * pRISE - current risePrice
     * c - current swap supply
     * pSwap - Swap pegged price ($1 USD fixed conversion price)
     */
    function _burnQuarantined() internal returns (uint256) {
        uint256 _quarantined = quarantineBalance;
        uint256 _currentPrice = hoursToBlock[getCurrentHour()].risePrice;
        uint256 _swapSupply = SwapInterface(swapContract).totalSupply();

        uint256 _riseToBurn =
            ((((_quarantined.mul(_currentPrice)).div(PRICE_BASE)).sub(_swapSupply)).mul(PRICE_BASE))
                .div(_currentPrice);

        quarantineBalance = quarantineBalance.sub(_riseToBurn);
        _burn(address(this), _riseToBurn);

        emit QuarantineBalanceBurnt(_riseToBurn);
        return _riseToBurn;
    }

    /**
     * Internal function for creating a new Price Block.
     */
    function _createBlock(uint256 _expectedBlockNumber, uint256 _growthRate)
        internal
        returns (bool _success)
    {
        uint256 _lastPrice;
        uint256 _nextBlockNumber;

        if (lastBlockNumber == 0) {
            require(_expectedBlockNumber > getCurrentHour(), 'FIRST_BLOCK_MUST_BE_IN_THE_FUTURE');
            require(
                _expectedBlockNumber < getCurrentHour() + 365 * 24,
                'FIRST_BLOCK_MUST_BE_WITHIN_ONE_YEAR'
            );
            _lastPrice = INITIAL_PRICE;
            _nextBlockNumber = _expectedBlockNumber;
        } else {
            _lastPrice = hoursToBlock[lastBlockNumber].risePrice;
            _nextBlockNumber = lastBlockNumber.add(1);
        }

        require(_nextBlockNumber == _expectedBlockNumber, 'WRONG_BLOCK_NUMBER');

        uint256 _risePriceFactor;

        uint256 _monthBlocks = (_nextBlockNumber * 60 * 60 * 1000).getHoursInMonth();
        if (_monthBlocks == 28 * 24) _risePriceFactor = growthRateToPriceFactors[_growthRate][0];
        else if (_monthBlocks == 29 * 24)
            _risePriceFactor = growthRateToPriceFactors[_growthRate][1];
        else if (_monthBlocks == 30 * 24)
            _risePriceFactor = growthRateToPriceFactors[_growthRate][2];
        else _risePriceFactor = growthRateToPriceFactors[_growthRate][3];

        uint256 _risePrice =
            ((_risePriceFactor.mul(_lastPrice)).add(_lastPrice.mul(PRICE_FACTOR_BASE))).ceilDiv(
                PRICE_FACTOR_BASE
            );

        uint256 _change = (_risePrice.sub(_lastPrice)).mul(PRICE_BASE).roundDiv(_lastPrice);
        uint256 _created = getCurrentHour();

        hoursToBlock[_nextBlockNumber] = Block({
            risePrice: _risePrice,
            growthRate: _growthRate,
            change: _change,
            created: _created
        });

        lastBlockNumber = _nextBlockNumber;

        emit BlockCreated(_nextBlockNumber, _risePrice, _growthRate, _change, _created);
        return true;
    }

    // For testing purposes
    function getCurrentTime() public view virtual returns (uint256) {
        return block.timestamp;
    }

    // Helper function
    function getCurrentHour() public view returns (uint256) {
        return getCurrentTime().div(1 hours);
    }
}

File 2 of 7: Administrable.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

import './Claimable.sol';

contract Administrable is Claimable {
    mapping(address => bool) public isAdmin;

    event AdminAppointed(address admin);
    event AdminDismissed(address admin);

    constructor() {
        isAdmin[owner] = true;

        emit AdminAppointed(owner);
    }

    modifier onlyAdmin() {
        require(isAdmin[msg.sender], 'NOT_AN_ADMIN');
        _;
    }

    function appointAdmin(address _newAdmin) public onlyContractOwner() returns (bool success) {
        if (isAdmin[_newAdmin] == false) {
            isAdmin[_newAdmin] = true;
        }

        emit AdminAppointed(_newAdmin);
        return true;
    }

    function dismissAdmin(address _admin) public onlyContractOwner() returns (bool success) {
        isAdmin[_admin] = false;

        emit AdminDismissed(_admin);
        return true;
    }
}

File 3 of 7: BEP20.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

import './SafeMath.sol';
import './Administrable.sol';

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address _owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BEP20 is IBEP20, Administrable {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowed;

    uint256 private _totalSupply;

    uint256 private _totalBurnt;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view override returns (string memory) {
        return _name;
    }

    function symbol() public view override returns (string memory) {
        return _symbol;
    }

    function decimals() public view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function getOwner() public view override returns (address) {
        return owner;
    }

    function totalBurnt() public view returns (uint256) {
        return _totalBurnt;
    }

    function balanceOf(address owner) public view override returns (uint256) {
        return _balances[owner];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowed[owner][spender];
    }

    function transfer(address to, uint256 value) public virtual override returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function approve(address spender, uint256 value) public override returns (bool) {
        require(spender != address(0), 'spender cannot be address(0)');

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public override returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0), 'spender cannot be address(0)');

        _allowed[msg.sender][spender] = (_allowed[msg.sender][spender].add(addedValue));
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0), 'spender cannot be address(0)');

        _allowed[msg.sender][spender] = (_allowed[msg.sender][spender].sub(subtractedValue));
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        require(from != address(0), 'from cannot be address(0)');
        require(to != address(0), 'to cannot be address(0)');

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        require(account != address(0), 'account cannot be address(0)');

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        require(account != address(0), 'account cannot be address(0)');

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);

        _totalBurnt = _totalBurnt.add(value);

        emit Transfer(account, address(0), value);
    }

    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
    }
}

File 4 of 7: Claimable.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

abstract contract Ownable {
    address public owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), owner);
    }

    function isOwner() public view returns (bool) {
        return (owner == msg.sender);
    }

    modifier onlyContractOwner() {
        require(isOwner(), 'Not a contract owner');
        _;
    }
}

contract Claimable is Ownable {
    address public pendingOwner;

    function transferOwnership(address _newOwner) public onlyContractOwner() {
        pendingOwner = _newOwner;
    }

    function claimOwnership() public {
        require(msg.sender == pendingOwner, 'Not a pending owner');

        address previousOwner = owner;
        owner = msg.sender;
        pendingOwner = address(0);

        emit OwnershipTransferred(previousOwner, msg.sender);
    }
}

File 5 of 7: DateLib.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

library DateLib {
    uint256 constant DAY_IN_SECONDS = 86400;
    uint256 constant YEAR_IN_SECONDS = 31536000;
    uint256 constant LEAP_YEAR_IN_SECONDS = 31622400;

    uint16 constant ORIGIN_YEAR = 1970;

    function getHoursInMonth(uint256 _timestamp) internal pure returns (uint256) {
        uint256 timestamp = _timestamp / 1000;

        uint256 secondsAccountedFor = 0;
        uint256 buf;
        uint8 i;

        uint16 year;
        uint8 month;

        // Year
        year = _getYear(timestamp);
        buf = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

        secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
        secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - buf);

        // Month
        uint256 secondsInMonth;
        for (i = 1; i <= 12; i++) {
            secondsInMonth = DAY_IN_SECONDS * _getDaysInMonth(i, year);
            if (secondsInMonth + secondsAccountedFor > timestamp) {
                month = i;
                break;
            }
            secondsAccountedFor += secondsInMonth;
        }

        return (_getDaysInMonth(month, year) * 24);
    }

    function _getDaysInMonth(uint8 _month, uint16 _year) private pure returns (uint256) {
        if (
            _month == 1 ||
            _month == 3 ||
            _month == 5 ||
            _month == 7 ||
            _month == 8 ||
            _month == 10 ||
            _month == 12
        ) {
            return 31;
        } else if (_month == 4 || _month == 6 || _month == 9 || _month == 11) {
            return 30;
        } else if (isLeapYear(_year)) {
            return 29;
        } else {
            return 28;
        }
    }

    function _getYear(uint256 _timestamp) private pure returns (uint16) {
        uint256 secondsAccountedFor = 0;
        uint16 year;
        uint256 numLeapYears;

        // Year
        year = uint16(ORIGIN_YEAR + _timestamp / YEAR_IN_SECONDS);
        numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

        secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
        secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

        while (secondsAccountedFor > _timestamp) {
            if (isLeapYear(uint16(year - 1))) {
                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
            } else {
                secondsAccountedFor -= YEAR_IN_SECONDS;
            }
            year -= 1;
        }
        return year;
    }

    function isLeapYear(uint16 _year) private pure returns (bool) {
        if (_year % 4 != 0) {
            return false;
        }
        if (_year % 100 != 0) {
            return true;
        }
        if (_year % 400 != 0) {
            return false;
        }
        return true;
    }

    function leapYearsBefore(uint256 _year) private pure returns (uint256) {
        uint256 year = _year - 1;
        return year / 4 - year / 100 + year / 400;
    }
}

File 6 of 7: RoundMath.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

/// @dev Math operations with safety checks that revert on error
library RoundMath {
    /// @dev Integer division of two numbers rounding the quotient, reverts on division by zero.
    function roundDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'DIVIDING_ERROR');
        uint256 c = (((a * 10) / b) + 5) / 10;
        return c;
    }

    /// @dev Integer division of two numbers ceiling the quotient, reverts on division by zero.
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'DIVIDING_ERROR');
        uint256 c = a / b;
        if (a % b > 0) {
            c = c + 1;
        }
        return c;
    }
}

File 7 of 7: SafeMath.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.7.6;

/// @dev Math operations with safety checks that revert on error
library SafeMath {
    /// @dev Multiplies two numbers, reverts on overflow.
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, 'MUL_ERROR');

        return c;
    }

    /// @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'DIVIDING_ERROR');
        uint256 c = a / b;
        return c;
    }

    /// @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, 'SUB_ERROR');
        uint256 c = a - b;
        return c;
    }

    /// @dev Adds two numbers, reverts on overflow.
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'ADD_ERROR');
        return c;
    }

    /// @dev Divides two numbers and returns the remainder (unsigned integer modulo), reverts when dividing by zero.
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, 'MOD_ERROR');
        return a % b;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_mintSaver","type":"address"},{"internalType":"address","name":"_swapContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AdminAppointed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AdminDismissed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"risePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"growthRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"}],"name":"BlockCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBurnt","type":"uint256"}],"name":"BurnSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"converter","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"riseAmountReceived","type":"uint256"}],"name":"ConvertToRise","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"converter","type":"address"},{"indexed":false,"internalType":"uint256","name":"riseAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAmountReceived","type":"uint256"}],"name":"ConvertToSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"currentHour","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"riseAmountBurnt","type":"uint256"}],"name":"DoBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LostTokensBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"growthRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceFactor0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceFactor1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceFactor2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceFactor3","type":"uint256"}],"name":"PriceFactorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"QuarantineBalanceBurnt","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"appointAdmin","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnLostTokens","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"}],"name":"convertToRise","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_riseAmount","type":"uint256"}],"name":"convertToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"dismissAdmin","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doBalance","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"uint256","name":"_growthRate","type":"uint256"}],"name":"doCreateBlock","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hoursEpoch","type":"uint256"}],"name":"getBlockData","outputs":[{"internalType":"uint256","name":"_risePrice","type":"uint256"},{"internalType":"uint256","name":"_growthRate","type":"uint256"},{"internalType":"uint256","name":"_change","type":"uint256"},{"internalType":"uint256","name":"_created","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hour","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"growthRateToPriceFactors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hoursToBlock","outputs":[{"internalType":"uint256","name":"risePrice","type":"uint256"},{"internalType":"uint256","name":"growthRate","type":"uint256"},{"internalType":"uint256","name":"change","type":"uint256"},{"internalType":"uint256","name":"created","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBalancedHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPriceFactors","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFactorsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quarantineBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_growthRate","type":"uint256"},{"internalType":"uint256[4]","name":"_priceFactors","type":"uint256[4]"}],"name":"setPriceFactors","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526010805460ff191690553480156200001b57600080fd5b5060405162002f6f38038062002f6f833981810160405260408110156200004157600080fd5b508051602091820151604080518082018252600c81526b43656e74726963205249534560a01b8186015281518083018352600381526221a72960e91b95810195909552600080546001600160a01b03191633178082559251949593949193926008926001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600080546001600160a01b039081168252600260209081526040808420805460ff19166001179055925483519216825291517f14a1a2d641f8bd1a49a31f4fd8b2e951f722e0207f936a64b44411340a52a4e6929181900390910190a182516200014890600390602086019062000304565b5081516200015e90600490602085019062000304565b506005805460ff191660ff92909216919091179055506200018a90508267016345785d8a0000620001b1565b600a80546001600160a01b0319166001600160a01b039290921691909117905550620003b0565b6001600160a01b0382166200020d576040805162461bcd60e51b815260206004820152601c60248201527f6163636f756e742063616e6e6f74206265206164647265737328302900000000604482015290519081900360640190fd5b6200022981600854620002b660201b62001fd81790919060201c565b6008556001600160a01b0382166000908152600660209081526040909120546200025e91839062001fd8620002b6821b17901c565b6001600160a01b03831660008181526006602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015620002fd576040805162461bcd60e51b815260206004820152600960248201526820a2222fa2a92927a960b91b604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200033c576000855562000387565b82601f106200035757805160ff191683800117855562000387565b8280016001018555821562000387579182015b82811115620003875782518255916020019190600101906200036a565b506200039592915062000399565b5090565b5b808211156200039557600081556001016200039a565b612baf80620003c06000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063893d20e81161013b578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610668578063e30c397814610696578063e75722301461069e578063eb91d37e146106bb578063f2fde38b146106c357610248565b8063a9059cbb146105ec578063ac06b63d14610618578063b63589a114610620578063b9a3cbc814610628578063c9a889ff1461064557610248565b8063966ff650116100ff578063966ff65014610516578063982356631461051e578063a333260e14610544578063a457c2d71461059a578063a69adc2c146105c657610248565b8063893d20e8146104d25780638da5cb5b146104f65780638ea83031146104fe5780638f32d59b1461050657806395d89b411461050e57610248565b80632552317c116101c95780634e71e0c81161018d5780634e71e0c81461045a57806352c09f441461046457806364ff2d061461048157806370a08231146104a457806386a04466146104ca57610248565b80632552317c146103e357806329cb924d146103eb578063311885ef146103f3578063313ce56714610410578063395093511461042e57610248565b806318160ddd1161021057806318160ddd146103345780631c9ab3ad1461033c57806322368a081461037f57806323b872dd1461038757806324d7806c146103bd57610248565b806306fdde031461024d578063095ea7b3146102ca5780630c72e02a1461030a5780630d48e8d0146103125780631387e5db1461031a575b600080fd5b6102556106e9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102f6600480360360408110156102e057600080fd5b506001600160a01b03813516906020013561077f565b604080519115158252519081900360200190f35b6102f6610844565b6102f66108ab565b6103226109bc565b60408051918252519081900360200190f35b6103226109c2565b6103596004803603602081101561035257600080fd5b50356109c8565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102f6610a97565b6102f66004803603606081101561039d57600080fd5b506001600160a01b03813581169160208101359091169060400135610b47565b6102f6600480360360208110156103d357600080fd5b50356001600160a01b0316610c0a565b610322610c1f565b610322610c25565b6103596004803603602081101561040957600080fd5b5035610c29565b610418610c50565b6040805160ff9092168252519081900360200190f35b6102f66004803603604081101561044457600080fd5b506001600160a01b038135169060200135610c59565b610462610d49565b005b6103226004803603602081101561047a57600080fd5b5035610df5565b6103226004803603604081101561049757600080fd5b508035906020013561109f565b610322600480360360208110156104ba57600080fd5b50356001600160a01b03166110c4565b6102f66110df565b6104da6110e8565b604080516001600160a01b039092168252519081900360200190f35b6104da6110f7565b6104da611106565b6102f6611115565b610255611126565b610322611187565b6102f66004803603602081101561053457600080fd5b50356001600160a01b031661118d565b6102f6600480360360a081101561055a57600080fd5b604080516080818101909252833593928301929160a083019190602084019060049083908390808284376000920191909152509194506112679350505050565b6102f6600480360360408110156105b057600080fd5b506001600160a01b03813516906020013561176b565b6102f6600480360360208110156105dc57600080fd5b50356001600160a01b03166117f6565b6102f66004803603604081101561060257600080fd5b506001600160a01b0381351690602001356118a5565b6103226118bb565b6103226118c1565b6102f66004803603602081101561063e57600080fd5b50356118d6565b6102f66004803603604081101561065b57600080fd5b5080359060200135611c4b565b6103226004803603604081101561067e57600080fd5b506001600160a01b0381358116916020013516611e3b565b6104da611e66565b610322600480360360208110156106b457600080fd5b5035611e75565b610322611edc565b610462600480360360208110156106d957600080fd5b50356001600160a01b0316611f66565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107755780601f1061074a57610100808354040283529160200191610775565b820191906000526020600020905b81548152906001019060200180831161075857829003601f168201915b5050505050905090565b60006001600160a01b0383166107dc576040805162461bcd60e51b815260206004820152601c60248201527f7370656e6465722063616e6e6f74206265206164647265737328302900000000604482015290519081900360640190fd5b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b3360009081526002602052604081205460ff16610897576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0a72fa0a226a4a760a11b604482015290519081900360640190fd5b506010805460ff1916600190811790915590565b6000600e60006108b96118c1565b815260208101919091526040016000205461091b576040805162461bcd60e51b815260206004820152601f60248201527f43555252454e545f50524943455f424c4f434b5f4e4f545f444546494e454400604482015290519081900360640190fd5b6109236118c1565b600d54106109625760405162461bcd60e51b8152600401808060200182810382526024815260200180612ae66024913960400191505060405180910390fd5b61096a6118c1565b600d556000610977612025565b90506109816118c1565b6040805183815290517fcfc8f88f661f6fa5306396344004096db3c6bfd1c99877a70ceeeb2bc484170b9181900360200190a2600191505090565b600b5481565b60085490565b60008060008060008511610a17576040805162461bcd60e51b8152602060048201526011602482015270454d5054595f484f5552535f56414c554560781b604482015290519081900360640190fd5b6000858152600e6020526040902054610a6b576040805162461bcd60e51b8152602060048201526011602482015270109313d0d2d7d393d517d1115192539151607a1b604482015290519081900360640190fd5b505050600091825250600e60205260409020805460018201546002830154600390930154919390929190565b6000610aa1611115565b610ae9576040805162461bcd60e51b81526020600482015260146024820152732737ba10309031b7b73a3930b1ba1037bbb732b960611b604482015290519081900360640190fd5b6000610b00600b54610afa306110c4565b90612145565b9050610b0c308261218e565b6040805182815290517f7c2140a4c400880893146fd082efc43b05e1c5812f289ed41a42b92c0f8d17d89181900360200190a1600191505090565b6001600160a01b0383166000908152600760209081526040808320338452909152812054610b759083612145565b6001600160a01b0385166000908152600760209081526040808320338452909152902055610ba484848461228a565b6001600160a01b0384166000818152600760209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60026020526000908152604090205460ff1681565b600c5481565b4290565b600e6020526000908152604090208054600182015460028301546003909301549192909184565b60055460ff1690565b60006001600160a01b038316610cb6576040805162461bcd60e51b815260206004820152601c60248201527f7370656e6465722063616e6e6f74206265206164647265737328302900000000604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b0387168452909152902054610ce49083611fd8565b3360008181526007602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6001546001600160a01b03163314610d9e576040805162461bcd60e51b81526020600482015260136024820152722737ba1030903832b73234b7339037bbb732b960691b604482015290519081900360640190fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000600e6000610e036118c1565b8152602081019190915260400160002054610e65576040805162461bcd60e51b815260206004820152601f60248201527f43555252454e545f50524943455f424c4f434b5f4e4f545f444546494e454400604482015290519081900360640190fd5b81610e6f336110c4565b1015610ec2576040805162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f524953455f42414c414e434500000000000000604482015290519081900360640190fd5b600b54610ecf9083611fd8565b600b55610edc30836118a5565b610f24576040805162461bcd60e51b8152602060048201526014602482015273149254d157d514905394d1915497d1905253115160621b604482015290519081900360640190fd5b6000610f5b6305f5e100610f55600e6000610f3d6118c1565b815260208101919091526040016000205486906123ee565b90612449565b600a546040805163a176916b60e01b81523360048201526024810184905290519293506001600160a01b039091169163a176916b916044808201926020929091908290030181600087803b158015610fb257600080fd5b505af1158015610fc6573d6000803e3d6000fd5b505050506040513d6020811015610fdc57600080fd5b5051611022576040805162461bcd60e51b815260206004820152601060248201526f14d5d05417d352539517d1905253115160821b604482015290519081900360640190fd5b604080513381526020810183905281517f04cd4face8a34b2ceb0227f3bad19e597a2174777b8a2ab1250589c48f1e2898929181900390910190a16040805184815260208101839052815133927f7212dc9a3a3345e3a3dba50467d6c334bbe02a41403ebf3de8c498b8ecfd687d928290030190a290505b919050565b600f60205281600052604060002081600481106110bb57600080fd5b01549150829050565b6001600160a01b031660009081526006602052604090205490565b60105460ff1681565b6000546001600160a01b031690565b6000546001600160a01b031681565b600a546001600160a01b031681565b6000546001600160a01b0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107755780601f1061074a57610100808354040283529160200191610775565b60095490565b6000611197611115565b6111df576040805162461bcd60e51b81526020600482015260146024820152732737ba10309031b7b73a3930b1ba1037bbb732b960611b604482015290519081900360640190fd5b6001600160a01b03821660009081526002602052604090205460ff16611223576001600160a01b0382166000908152600260205260409020805460ff191660011790555b604080516001600160a01b038416815290517f14a1a2d641f8bd1a49a31f4fd8b2e951f722e0207f936a64b44411340a52a4e69181900360200190a1506001919050565b3360009081526002602052604081205460ff166112ba576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0a72fa0a226a4a760a11b604482015290519081900360640190fd5b60105460ff1615611312576040805162461bcd60e51b815260206004820152601c60248201527f50524943455f464143544f52535f414c52454144595f4c4f434b454400000000604482015290519081900360640190fd5b82611364576040805162461bcd60e51b815260206004820152601b60248201527f47524f5754485f524154455f43414e5f4e4f545f42455f5a45524f0000000000604482015290519081900360640190fd5b61271083106113a45760405162461bcd60e51b815260040180806020018281038252602c815260200180612b0a602c913960400191505060405180910390fd5b81516113f7576040805162461bcd60e51b815260206004820152601e60248201527f50524943455f464143544f525f305f43414e5f4e4f545f42455f5a45524f0000604482015290519081900360640190fd5b8151630626b57511611450576040805162461bcd60e51b815260206004820152601960248201527f50524943455f464143544f525f305f49535f544f4f5f42494700000000000000604482015290519081900360640190fd5b60208201516114a6576040805162461bcd60e51b815260206004820152601e60248201527f50524943455f464143544f525f315f43414e5f4e4f545f42455f5a45524f0000604482015290519081900360640190fd5b60208201516305f061a811611502576040805162461bcd60e51b815260206004820152601960248201527f50524943455f464143544f525f315f49535f544f4f5f42494700000000000000604482015290519081900360640190fd5b6040820151611558576040805162461bcd60e51b815260206004820152601e60248201527f50524943455f464143544f525f325f43414e5f4e4f545f42455f5a45524f0000604482015290519081900360640190fd5b60408201516305bdad7d116115b4576040805162461bcd60e51b815260206004820152601960248201527f50524943455f464143544f525f325f49535f544f4f5f42494700000000000000604482015290519081900360640190fd5b606082015161160a576040805162461bcd60e51b815260206004820152601e60248201527f50524943455f464143544f525f335f43414e5f4e4f545f42455f5a45524f0000604482015290519081900360640190fd5b606082015163058e3f2411611666576040805162461bcd60e51b815260206004820152601960248201527f50524943455f464143544f525f335f49535f544f4f5f42494700000000000000604482015290519081900360640190fd5b60208201518251118015611681575060408201516020830151115b8015611694575060608201516040830151115b6116e5576040805162461bcd60e51b815260206004820152601b60248201527f50524943455f464143544f52535f4152455f4e4f545f56414c49440000000000604482015290519081900360640190fd5b6000838152600f602052604090206116ff90836004612a92565b50815160208084015160408086015160608088015183518a8152958601969096528483019390935291830191909152608082019290925290517fc31c7597a83d26a1f8b6e9045fb8dfbc314325f0d5371642fed1ef3b9e18db7f9181900360a00190a150600192915050565b60006001600160a01b0383166117c8576040805162461bcd60e51b815260206004820152601c60248201527f7370656e6465722063616e6e6f74206265206164647265737328302900000000604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b0387168452909152902054610ce49083612145565b6000611800611115565b611848576040805162461bcd60e51b81526020600482015260146024820152732737ba10309031b7b73a3930b1ba1037bbb732b960611b604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff19169055815192835290517f8cb585df559166007784fccdddbb80e0efd7c7b40a2d015a911a595825f74b109281900390910190a1506001919050565b60006118b233848461228a565b50600192915050565b600d5481565b60006118d1610e10610f55610c25565b905090565b6000600e60006118e46118c1565b8152602081019190915260400160002054611946576040805162461bcd60e51b815260206004820152601f60248201527f43555252454e545f50524943455f424c4f434b5f4e4f545f444546494e454400604482015290519081900360640190fd5b600a54604080516370a0823160e01b8152336004820152905184926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561199057600080fd5b505afa1580156119a4573d6000803e3d6000fd5b505050506040513d60208110156119ba57600080fd5b50511015611a0f576040805162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f535741505f42414c414e434500000000000000604482015290519081900360640190fd5b600a54604080516308dc8e7d60e21b81523360048201526024810185905290516001600160a01b039092169163237239f4916044808201926020929091908290030181600087803b158015611a6357600080fd5b505af1158015611a77573d6000803e3d6000fd5b505050506040513d6020811015611a8d57600080fd5b5051611ad6576040805162461bcd60e51b815260206004820152601360248201527210955493925391d7d4d5d05417d19052531151606a1b604482015290519081900360640190fd5b6040805183815290517f36455e2cba4ff48f7e41a95b21ae92f3d46fa026373a259c77d8b7b7675948c79181900360200190a16000611b39600e6000611b1a6118c1565b8152602081019190915260400160002054610f55856305f5e1006123ee565b600b54909150611b499082612145565b600b556040805163a9059cbb60e01b8152336004820152602481018390529051309163a9059cbb9160448083019260209291908290030181600087803b158015611b9257600080fd5b505af1158015611ba6573d6000803e3d6000fd5b505050506040513d6020811015611bbc57600080fd5b5051611c08576040805162461bcd60e51b815260206004820152601660248201527510d3d39591549517d513d7d49254d157d1905253115160521b604482015290519081900360640190fd5b6040805184815260208101839052815133927f669be87e03baf0da599f35a61f0aaea8c03245e49ec95a64d9084906ccb19bfc928290030190a250600192915050565b3360009081526002602052604081205460ff16611c9e576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0a72fa0a226a4a760a11b604482015290519081900360640190fd5b60105460ff16611cf5576040805162461bcd60e51b815260206004820152601c60248201527f50524943455f464143544f52535f4d5553545f42455f4c4f434b454400000000604482015290519081900360640190fd5b81611d47576040805162461bcd60e51b815260206004820152601b60248201527f47524f5754485f524154455f43414e5f4e4f545f42455f5a45524f0000000000604482015290519081900360640190fd5b6127108210611d875760405162461bcd60e51b815260040180806020018281038252602c815260200180612b0a602c913960400191505060405180910390fd5b6000828152600f6020526040902054611de7576040805162461bcd60e51b815260206004820152601c60248201527f47524f5754485f524154455f49535f4e4f545f53504543494649454400000000604482015290519081900360640190fd5b611df183836124a4565b6118b2576040805162461bcd60e51b81526020600482015260166024820152754641494c45445f544f5f4352454154455f424c4f434b60501b604482015290519081900360640190fd5b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000818152600e6020526040812054611ec9576040805162461bcd60e51b8152602060048201526011602482015270109313d0d2d7d393d517d1115192539151607a1b604482015290519081900360640190fd5b506000908152600e602052604090205490565b600080600e6000611eeb6118c1565b81526020019081526020016000206000015411611f43576040805162461bcd60e51b8152602060048201526011602482015270109313d0d2d7d393d517d1115192539151607a1b604482015290519081900360640190fd5b600e6000611f4f6118c1565b815260200190815260200160002060000154905090565b611f6e611115565b611fb6576040805162461bcd60e51b81526020600482015260146024820152732737ba10309031b7b73a3930b1ba1037bbb732b960611b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008282018381101561201e576040805162461bcd60e51b815260206004820152600960248201526820a2222fa2a92927a960b91b604482015290519081900360640190fd5b9392505050565b600b5460009081600e816120376118c1565b81526020019081526020016000206000015490506000600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561209b57600080fd5b505afa1580156120af573d6000803e3d6000fd5b505050506040513d60208110156120c557600080fd5b5051905060006120ed83610f556305f5e1006120e786610afa83858c886123ee565b906123ee565b600b549091506120fd9082612145565b600b5561210a308261218e565b6040805182815290517f500611c1ea597c6f7dd72cb19aba6c59446307fd4bb497065d0c1cebfebebd629181900360200190a1935050505090565b600082821115612188576040805162461bcd60e51b815260206004820152600960248201526829aaa12fa2a92927a960b91b604482015290519081900360640190fd5b50900390565b6001600160a01b0382166121e9576040805162461bcd60e51b815260206004820152601c60248201527f6163636f756e742063616e6e6f74206265206164647265737328302900000000604482015290519081900360640190fd5b6008546121f69082612145565b6008556001600160a01b03821660009081526006602052604090205461221c9082612145565b6001600160a01b0383166000908152600660205260409020556009546122429082611fd8565b6009556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b0383166122e5576040805162461bcd60e51b815260206004820152601960248201527f66726f6d2063616e6e6f74206265206164647265737328302900000000000000604482015290519081900360640190fd5b6001600160a01b038216612340576040805162461bcd60e51b815260206004820152601760248201527f746f2063616e6e6f742062652061646472657373283029000000000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600660205260409020546123639082612145565b6001600160a01b0380851660009081526006602052604080822093909355908416815220546123929082611fd8565b6001600160a01b0380841660008181526006602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000826123fd5750600061083e565b8282028284828161240a57fe5b041461201e576040805162461bcd60e51b815260206004820152600960248201526826aaa62fa2a92927a960b91b604482015290519081900360640190fd5b6000808211612490576040805162461bcd60e51b815260206004820152600e60248201526d2224ab24a224a723afa2a92927a960911b604482015290519081900360640190fd5b600082848161249b57fe5b04949350505050565b6000806000600c5460001415612550576124bc6118c1565b85116124f95760405162461bcd60e51b8152600401808060200182810382526021815260200180612b366021913960400191505060405180910390fd5b6125016118c1565b6122380185106125425760405162461bcd60e51b8152600401808060200182810382526023815260200180612b576023913960400191505060405180910390fd5b506334fb8fae905083612572565b600c546000818152600e6020526040902054925061256f906001611fd8565b90505b8481146125bb576040805162461bcd60e51b81526020600482015260126024820152712ba927a723afa12627a1a5afa72aa6a122a960711b604482015290519081900360640190fd5b6000806125cc6236ee80840261274c565b9050806102a014156125f1576000868152600f60205260408120905b01549150612644565b806102b81415612610576000868152600f6020526040902060016125e8565b806102d0141561262f576000868152600f6020526040902060026125e8565b6000868152600f602052604090206003015491505b600061267264174876e80061266c61265c88836123ee565b612666878a6123ee565b90611fd8565b906127fc565b905060006126928661268c6305f5e1006120e78684612145565b9061286d565b9050600061269e6118c1565b604080516080808201835286825260208083018e8152838501888152606080860188815260008f8152600e86528890209651875592516001870155905160028601559051600390940193909355600c8b905583518b81529081018890528084018e9052918201869052810183905290519192507fe78c1dc87ccf4c793111073c71a3e26c2029f793091e0db3fb3c6409a00c6224919081900360a00190a15060019998505050505050505050565b60006103e882048180808080612761866128cf565b915061276e6107b261295f565b61277b8361ffff1661295f565b039350836301e285000285019450836107b2830361ffff16036301e1338002850194506000600193505b600c8460ff16116127e2576127ba848461297a565b620151800290508686820111156127d3578391506127e2565b948501946001909301926127a5565b6127ec828461297a565b6018029998505050505050505050565b6000808211612843576040805162461bcd60e51b815260206004820152600e60248201526d2224ab24a224a723afa2a92927a960911b604482015290519081900360640190fd5b600082848161284e57fe5b049050600083858161285c57fe5b06111561201e576001019392505050565b60008082116128b4576040805162461bcd60e51b815260206004820152600e60248201526d2224ab24a224a723afa2a92927a960911b604482015290519081900360640190fd5b6000600a8385600a02816128c457fe5b046005018161249b57fe5b6000806107b26301e13380840481019082906128ea9061295f565b6128f78361ffff1661295f565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b848311156129575761292f60018303612a40565b15612942576301e285008303925061294c565b6301e13380830392505b60018203915061291b565b509392505050565b60646000199190910190810460048204036101909091040190565b60008260ff166001148061299157508260ff166003145b8061299f57508260ff166005145b806129ad57508260ff166007145b806129bb57508260ff166008145b806129c957508260ff16600a145b806129d757508260ff16600c145b156129e45750601f61083e565b8260ff16600414806129f957508260ff166006145b80612a0757508260ff166009145b80612a1557508260ff16600b145b15612a225750601e61083e565b612a2b82612a40565b15612a385750601d61083e565b50601c61083e565b60006003821615612a535750600061109a565b606461ffff83160661ffff16600014612a6e5750600161109a565b61019061ffff83160661ffff16600014612a8a5750600061109a565b506001919050565b8260048101928215612ac0579160200282015b82811115612ac0578251825591602001919060010190612aa5565b50612acc929150612ad0565b5090565b5b80821115612acc5760008155600101612ad156fe4348414e47455f49535f414c52454144595f4255524e545f494e5f544849535f484f555247524f5754485f524154455f49535f475245415445525f5448414e5f47524f5754485f524154455f4241534546495253545f424c4f434b5f4d5553545f42455f494e5f5448455f46555455524546495253545f424c4f434b5f4d5553545f42455f57495448494e5f4f4e455f59454152a26469706673582212206b40321dffa58b287de9e7d89d195dbff7db47d890e10532d66eb6aa12d3ba4e64736f6c634300070600330000000000000000000000001ea71306849a189e17d00668eea81416e2f6d19d000000000000000000000000e2198fcec23041fe60cf6c891719fccc21ab2150

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

0000000000000000000000001ea71306849a189e17d00668eea81416e2f6d19d000000000000000000000000e2198fcec23041fe60cf6c891719fccc21ab2150

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ea71306849a189e17d00668eea81416e2f6d19d
Arg [1] : 000000000000000000000000e2198fcec23041fe60cf6c891719fccc21ab2150


Deployed ByteCode Sourcemap

521:14231:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3723:90:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4729:279;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4729:279:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8066:136:2;;;:::i;8377:426::-;;;:::i;726:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;4015:98:1;;;:::i;4378:656:2:-;;;;;;;;;;;;;;;;-1:-1:-1;4378:656:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11017:262;;;:::i;5014:333:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5014:333:1;;;;;;;;;;;;;;;;;:::i;130:39:0:-;;;;;;;;;;;;;;;;-1:-1:-1;130:39:0;-1:-1:-1;;;;;130:39:0;;:::i;764:30:2:-;;;:::i;14509:103::-;;;:::i;1520:45::-;;;;;;;;;;;;;;;;-1:-1:-1;1520:45:2;;:::i;3919:90:1:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5353:351;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5353:351:1;;;;;;;;:::i;833:274:3:-;;;:::i;:::-;;10068:814:2;;;;;;;;;;;;;;;;-1:-1:-1;10068:814:2;;:::i;2041:62::-;;;;;;;;;;;;;;;;-1:-1:-1;2041:62:2;;;;;;;:::i;4306:113:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4306:113:1;-1:-1:-1;;;;;4306:113:1;;:::i;2206:38:2:-;;;:::i;4119:88:1:-;;;:::i;:::-;;;;-1:-1:-1;;;;;4119:88:1;;;;;;;;;;;;;;93:20:3;;;:::i;693:27:2:-;;;:::i;443:91:3:-;;;:::i;3819:94:1:-;;;:::i;4213:87::-;;;:::i;453:252:0:-;;;;;;;;;;;;;;;;-1:-1:-1;453:252:0;-1:-1:-1;;;;;453:252:0;;:::i;6455:1495:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6455:1495:2;;-1:-1:-1;6455:1495:2;;-1:-1:-1;;;;6455:1495:2:i;5710:361:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5710:361:1;;;;;;;;:::i;711:187:0:-;;;;;;;;;;;;;;;;-1:-1:-1;711:187:0;-1:-1:-1;;;;;711:187:0;;:::i;4569:154:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4569:154:1;;;;;;;;:::i;832:31:2:-;;;:::i;14641:109::-;;;:::i;8988:897::-;;;;;;;;;;;;;;;;-1:-1:-1;8988:897:2;;:::i;5744:580::-;;;;;;;;;;;;;;;;-1:-1:-1;5744:580:2;;;;;;;:::i;4425:138:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4425:138:1;;;;;;;;;;:::i;679:27:3:-;;;:::i;3833:191:2:-;;;;;;;;;;;;;;;;-1:-1:-1;3833:191:2;;:::i;3571:207::-;;;:::i;713:114:3:-;;;;;;;;;;;;;;;;-1:-1:-1;713:114:3;-1:-1:-1;;;;;713:114:3;;:::i;3723:90:1:-;3801:5;3794:12;;;;;;;;-1:-1:-1;;3794:12:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3769:13;;3794:12;;3801:5;;3794:12;;3801:5;3794:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3723:90;:::o;4729:279::-;4803:4;-1:-1:-1;;;;;4827:21:1;;4819:62;;;;;-1:-1:-1;;;4819:62:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4901:10;4892:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;4892:29:1;;;;;;;;;;;;:37;;;4944:36;;;;;;;4892:29;;4901:10;4944:36;;;;;;;;;;;-1:-1:-1;4997:4:1;4729:279;;;;;:::o;8066:136:2:-;401:10:0;8124:13:2;393:19:0;;;:7;:19;;;;;;;;385:44;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;;;;-1:-1:-1;8149:18:2::1;:25:::0;;-1:-1:-1;;8149:25:2::1;8170:4;8149:25:::0;;::::1;::::0;;;8066:136;:::o;8377:426::-;8416:13;8449:12;:30;8462:16;:14;:16::i;:::-;8449:30;;;;;;;;;;;-1:-1:-1;8449:30:2;:40;8441:89;;;;;-1:-1:-1;;;8441:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;8567:16;:14;:16::i;:::-;8548;;:35;8540:84;;;;-1:-1:-1;;;8540:84:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8654:16;:14;:16::i;:::-;8635;:35;8681:18;8702;:16;:18::i;:::-;8681:39;;8746:16;:14;:16::i;:::-;8736:39;;;;;;;;;;;;;;;;;8792:4;8785:11;;;8377:426;:::o;726:32::-;;;;:::o;4015:98:1:-;4094:12;;4015:98;:::o;4378:656:2:-;4481:18;4513:19;4546:15;4575:16;4638:1;4624:11;:15;4616:45;;;;;-1:-1:-1;;;4616:45:2;;;;;;;;;;;;-1:-1:-1;;;4616:45:2;;;;;;;;;;;;;;;4717:1;4679:25;;;:12;:25;;;;;:35;4671:69;;;;;-1:-1:-1;;;4671:69:2;;;;;;;;;;;;-1:-1:-1;;;4671:69:2;;;;;;;;;;;;;;;-1:-1:-1;;;4764:25:2;;;;-1:-1:-1;4764:12:2;:25;;;;;:35;;4823:36;;;;4879:32;;;;4932:33;;;;;4764:35;;4823:36;;4879:32;4932:33;4378:656::o;11017:262::-;11081:13;587:9:3;:7;:9::i;:::-;579:42;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;;;;11106:15:2::1;11124:47;11153:17;;11124:24;11142:4;11124:9;:24::i;:::-;:28:::0;::::1;:47::i;:::-;11106:65;;11182:29;11196:4;11203:7;11182:5;:29::i;:::-;11227:24;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;11268:4;11261:11;;;11017:262:::0;:::o;5014:333:1:-;-1:-1:-1;;;;;5177:14:1;;5132:4;5177:14;;;:8;:14;;;;;;;;5192:10;5177:26;;;;;;;;:37;;5208:5;5177:30;:37::i;:::-;-1:-1:-1;;;;;5148:14:1;;;;;;:8;:14;;;;;;;;5163:10;5148:26;;;;;;;:66;5224:26;5157:4;5240:2;5244:5;5224:9;:26::i;:::-;-1:-1:-1;;;;;5265:54:1;;5292:14;;;;:8;:14;;;;;;;;5280:10;5292:26;;;;;;;;;;;5265:54;;;;;;;5280:10;;5265:54;;;;;;;;;;;;-1:-1:-1;5336:4:1;5014:333;;;;;:::o;130:39:0:-;;;;;;;;;;;;;;;:::o;764:30:2:-;;;;:::o;14509:103::-;14590:15;14509:103;:::o;1520:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3919:90:1:-;3993:9;;;;3919:90;:::o;5353:351::-;5433:4;-1:-1:-1;;;;;5457:21:1;;5449:62;;;;;-1:-1:-1;;;5449:62:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5564:10;5555:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5555:29:1;;;;;;;;;;:45;;5589:10;5555:33;:45::i;:::-;5531:10;5522:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5522:29:1;;;;;;;;;;;;:79;;;5616:60;;;;;;5522:29;;5616:60;;;;;;;;;;;-1:-1:-1;5693:4:1;5353:351;;;;:::o;833:274:3:-;898:12;;-1:-1:-1;;;;;898:12:3;884:10;:26;876:58;;;;;-1:-1:-1;;;876:58:3;;;;;;;;;;;;-1:-1:-1;;;876:58:3;;;;;;;;;;;;;;;945:21;969:5;;992:10;-1:-1:-1;;;;;;984:18:3;;;;;;;-1:-1:-1;1012:25:3;;;;;;;1053:47;;-1:-1:-1;;;;;969:5:3;;;;992:10;;969:5;;1053:47;;;833:274;:::o;10068:814:2:-;10130:7;10157:12;:30;10170:16;:14;:16::i;:::-;10157:30;;;;;;;;;;;-1:-1:-1;10157:30:2;:40;10149:89;;;;;-1:-1:-1;;;10149:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;10282:11;10257:21;10267:10;10257:9;:21::i;:::-;:36;;10249:74;;;;;-1:-1:-1;;;10249:74:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;10354:17;;:34;;10376:11;10354:21;:34::i;:::-;10334:17;:54;10406:36;10423:4;10430:11;10406:8;:36::i;:::-;10398:69;;;;;-1:-1:-1;;;10398:69:2;;;;;;;;;;;;-1:-1:-1;;;10398:69:2;;;;;;;;;;;;;;;10478:20;10513:75;951:5;10514:57;10530:12;:30;10543:16;:14;:16::i;:::-;10530:30;;;;;;;;;;;-1:-1:-1;10530:30:2;:40;10514:11;;:15;:57::i;:::-;10513:63;;:75::i;:::-;10634:12;;10620:66;;;-1:-1:-1;;;10620:66:2;;10661:10;10620:66;;;;;;;;;;;;10478:110;;-1:-1:-1;;;;;;10634:12:2;;;;10620:40;;:66;;;;;;;;;;;;;;;10634:12;;10620:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10620:66:2;10599:129;;;;;-1:-1:-1;;;10599:129:2;;;;;;;;;;;;-1:-1:-1;;;10599:129:2;;;;;;;;;;;;;;;10744:34;;;10753:10;10744:34;;;;;;;;;;;;;;;;;;;;;10794:52;;;;;;;;;;;;;;10808:10;;10794:52;;;;;;;;10863:12;-1:-1:-1;10068:814:2;;;;:::o;2041:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2041:62:2;;-1:-1:-1;2041:62:2:o;4306:113:1:-;-1:-1:-1;;;;;4396:16:1;4370:7;4396:16;;;:9;:16;;;;;;;4306:113::o;2206:38:2:-;;;;;;:::o;4119:88:1:-;4169:7;4195:5;-1:-1:-1;;;;;4195:5:1;4119:88;:::o;93:20:3:-;;;-1:-1:-1;;;;;93:20:3;;:::o;693:27:2:-;;;-1:-1:-1;;;;;693:27:2;;:::o;443:91:3:-;483:4;507:5;-1:-1:-1;;;;;507:5:3;516:10;507:19;443:91;:::o;3819:94:1:-;3899:7;3892:14;;;;;;;;-1:-1:-1;;3892:14:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3867:13;;3892:14;;3899:7;;3892:14;;3899:7;3892:14;;;;;;;;;;;;;;;;;;;;;;;;4213:87;4282:11;;4213:87;:::o;453:252:0:-;530:12;587:9:3;:7;:9::i;:::-;579:42;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;558:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;;::::1;;554:83;;-1:-1:-1::0;;;;;601:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;:25;;-1:-1:-1;;601:25:0::1;622:4;601:25;::::0;;554:83:::1;652:25;::::0;;-1:-1:-1;;;;;652:25:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;694:4:0::1;453:252:::0;;;:::o;6455:1495:2:-;401:10:0;6588:13:2;393:19:0;;;:7;:19;;;;;;;;385:44;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;;;;6625:18:2::1;::::0;::::1;;:27;6617:68;;;::::0;;-1:-1:-1;;;6617:68:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6704:16:::0;6696:56:::1;;;::::0;;-1:-1:-1;;;6696:56:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2145:5;6770:11;:30;6762:87;;;;-1:-1:-1::0;;;6762:87:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6868:16:::0;;6860:63:::1;;;::::0;;-1:-1:-1;;;6860:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6941:16:::0;;6960:9:::1;-1:-1:-1::0;6933:66:2::1;;;::::0;;-1:-1:-1;;;6933:66:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7017:16;::::0;::::1;::::0;7009:63:::1;;;::::0;;-1:-1:-1;;;7009:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7090:16;::::0;::::1;::::0;7109:8:::1;-1:-1:-1::0;7082:65:2::1;;;::::0;;-1:-1:-1;;;7082:65:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7165:16:::0;;::::1;::::0;7157:63:::1;;;::::0;;-1:-1:-1;;;7157:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7238:16:::0;;::::1;::::0;7257:8:::1;-1:-1:-1::0;7230:65:2::1;;;::::0;;-1:-1:-1;;;7230:65:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7313:16:::0;;::::1;::::0;7305:63:::1;;;::::0;;-1:-1:-1;;;7305:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7386:16:::0;;::::1;::::0;7405:8:::1;-1:-1:-1::0;7378:65:2::1;;;::::0;;-1:-1:-1;;;7378:65:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7494:16;::::0;::::1;::::0;7475;;:35:::1;:90:::0;::::1;;;-1:-1:-1::0;7549:16:2;;::::1;::::0;::::1;7530::::0;::::1;::::0;:35:::1;7475:90;:145;;;;-1:-1:-1::0;7604:16:2;;::::1;::::0;7585;;::::1;::::0;:35:::1;7475:145;7454:219;;;::::0;;-1:-1:-1;;;7454:219:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7684:37;::::0;;;:24:::1;:37;::::0;;;;:53:::1;::::0;7724:13;7684:53:::1;;:::i;:::-;-1:-1:-1::0;7806:16:2;;::::1;7836::::0;;::::1;::::0;7866;;;::::1;::::0;7896;;;::::1;::::0;7753:169;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;7939:4:2::1;6455:1495:::0;;;;:::o;5710:361:1:-;5795:4;-1:-1:-1;;;;;5819:21:1;;5811:62;;;;;-1:-1:-1;;;5811:62:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5926:10;5917:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5917:29:1;;;;;;;;;;:50;;5951:15;5917:33;:50::i;711:187:0:-;785:12;587:9:3;:7;:9::i;:::-;579:42;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;809:15:0;::::1;827:5;809:15:::0;;;:7:::1;:15;::::0;;;;;;;;:23;;-1:-1:-1;;809:23:0::1;::::0;;848:22;;;;;;;::::1;::::0;;;;;;;;::::1;-1:-1:-1::0;887:4:0::1;711:187:::0;;;:::o;4569:154:1:-;4647:4;4663:32;4673:10;4685:2;4689:5;4663:9;:32::i;:::-;-1:-1:-1;4712:4:1;4569:154;;;;:::o;832:31:2:-;;;;:::o;14641:109::-;14688:7;14714:29;14735:7;14714:16;:14;:16::i;:29::-;14707:36;;14641:109;:::o;8988:897::-;9050:13;9083:12;:30;9096:16;:14;:16::i;:::-;9083:30;;;;;;;;;;;-1:-1:-1;9083:30:2;:40;9075:89;;;;;-1:-1:-1;;;9075:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;9210:12;;9196:49;;;-1:-1:-1;;;9196:49:2;;9234:10;9196:49;;;;;;9249:11;;-1:-1:-1;;;;;9210:12:2;;9196:37;;:49;;;;;;;;;;;;;;9210:12;9196:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9196:49:2;:64;;9175:136;;;;;-1:-1:-1;;;9175:136:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;9357:12;;9343:65;;;-1:-1:-1;;;9343:65:2;;9384:10;9343:65;;;;;;;;;;;;-1:-1:-1;;;;;9357:12:2;;;;9343:40;;:65;;;;;;;;;;;;;;;9357:12;;9343:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9343:65:2;9322:131;;;;;-1:-1:-1;;;9322:131:2;;;;;;;;;;;;-1:-1:-1;;;9322:131:2;;;;;;;;;;;;;;;9469:21;;;;;;;;;;;;;;;;;9501:27;9543:75;9577:12;:30;9590:16;:14;:16::i;:::-;9577:30;;;;;;;;;;;-1:-1:-1;9577:30:2;:40;9544:27;:11;951:5;9544:15;:27::i;9543:75::-;9649:17;;9501:117;;-1:-1:-1;9649:42:2;;9501:117;9649:21;:42::i;:::-;9629:17;:62;9709:46;;;-1:-1:-1;;;9709:46:2;;9723:10;9709:46;;;;;;;;;;;;:4;;:13;;:46;;;;;;;;;;;;;;-1:-1:-1;9709:4:2;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9709:46:2;9701:81;;;;;-1:-1:-1;;;9701:81:2;;;;;;;;;;;;-1:-1:-1;;;9701:81:2;;;;;;;;;;;;;;;9798:59;;;;;;;;;;;;;;9812:10;;9798:59;;;;;;;;-1:-1:-1;9874:4:2;;8988:897;-1:-1:-1;;8988:897:2:o;5744:580::-;401:10:0;5864:13:2;393:19:0;;;:7;:19;;;;;;;;385:44;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;-1:-1:-1;;;385:44:0;;;;;;;;;;;;;;;5901:18:2::1;::::0;::::1;;5893:59;;;::::0;;-1:-1:-1;;;5893:59:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5971:16:::0;5963:56:::1;;;::::0;;-1:-1:-1;;;5963:56:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2145:5;6037:11;:30;6029:87;;;;-1:-1:-1::0;;;6029:87:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6177:1;6134:37:::0;;;:24:::1;:37;::::0;;;;:40;6126:85:::1;;;::::0;;-1:-1:-1;;;6126:85:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6230:39;6243:12;6257:11;6230:12;:39::i;:::-;6222:74;;;::::0;;-1:-1:-1;;;6222:74:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6222:74:2;;;;;;;;;;;;;::::1;4425:138:1::0;-1:-1:-1;;;;;4532:15:1;;;4506:7;4532:15;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;4425:138::o;679:27:3:-;;;-1:-1:-1;;;;;679:27:3;;:::o;3833:191:2:-;3889:7;3916:19;;;:12;:19;;;;;:29;3908:63;;;;;-1:-1:-1;;;3908:63:2;;;;;;;;;;;;-1:-1:-1;;;3908:63:2;;;;;;;;;;;;;;;-1:-1:-1;3988:19:2;;;;:12;:19;;;;;:29;;3833:191::o;3571:207::-;3621:7;3691:1;3648:12;:30;3661:16;:14;:16::i;:::-;3648:30;;;;;;;;;;;:40;;;:44;3640:74;;;;;-1:-1:-1;;;3640:74:2;;;;;;;;;;;;-1:-1:-1;;;3640:74:2;;;;;;;;;;;;;;;3731:12;:30;3744:16;:14;:16::i;:::-;3731:30;;;;;;;;;;;:40;;;3724:47;;3571:207;:::o;713:114:3:-;587:9;:7;:9::i;:::-;579:42;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;-1:-1:-1;;;579:42:3;;;;;;;;;;;;;;;796:12:::1;:24:::0;;-1:-1:-1;;;;;;796:24:3::1;-1:-1:-1::0;;;;;796:24:3;;;::::1;::::0;;;::::1;::::0;;713:114::o;1013:157:6:-;1071:7;1102:5;;;1125:6;;;;1117:28;;;;;-1:-1:-1;;;1117:28:6;;;;;;;;;;;;-1:-1:-1;;;1117:28:6;;;;;;;;;;;;;;;1162:1;1013:157;-1:-1:-1;;;1013:157:6:o;11781:615:2:-;11869:17;;11827:7;;;11920:12;11827:7;11933:16;:14;:16::i;:::-;11920:30;;;;;;;;;;;:40;;;11896:64;;11970:19;12006:12;;;;;;;;;-1:-1:-1;;;;;12006:12:2;-1:-1:-1;;;;;11992:39:2;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11992:41:2;;-1:-1:-1;12044:19:2;12078:124;12188:13;12079:86;951:5;12080:68;11992:41;12081:49;951:5;12079:86;12082:12;12188:13;12082:16;:31::i;12080:68::-;12079:74;;:86::i;12078:124::-;12233:17;;12044:158;;-1:-1:-1;12233:34:2;;12044:158;12233:21;:34::i;:::-;12213:17;:54;12277:33;12291:4;12298:11;12277:5;:33::i;:::-;12326:35;;;;;;;;;;;;;;;;;12378:11;-1:-1:-1;;;;11781:615:2;:::o;798:157:6:-;856:7;888:1;883;:6;;875:28;;;;;-1:-1:-1;;;875:28:6;;;;;;;;;;;;-1:-1:-1;;;875:28:6;;;;;;;;;;;;;;;-1:-1:-1;925:5:6;;;798:157::o;6763:343:1:-;-1:-1:-1;;;;;6837:21:1;;6829:62;;;;;-1:-1:-1;;;6829:62:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;6917:12;;:23;;6934:5;6917:16;:23::i;:::-;6902:12;:38;-1:-1:-1;;;;;6971:18:1;;;;;;:9;:18;;;;;;:29;;6994:5;6971:22;:29::i;:::-;-1:-1:-1;;;;;6950:18:1;;;;;;:9;:18;;;;;:50;7025:11;;:22;;7041:5;7025:15;:22::i;:::-;7011:11;:36;7063;;;;;;;;7089:1;;-1:-1:-1;;;;;7063:36:1;;;;;;;;;;;;6763:343;;:::o;6077:379::-;-1:-1:-1;;;;;6194:18:1;;6186:56;;;;;-1:-1:-1;;;6186:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6260:16:1;;6252:52;;;;;-1:-1:-1;;;6252:52:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6333:15:1;;;;;;:9;:15;;;;;;:26;;6353:5;6333:19;:26::i;:::-;-1:-1:-1;;;;;6315:15:1;;;;;;;:9;:15;;;;;;:44;;;;6385:13;;;;;;;:24;;6403:5;6385:17;:24::i;:::-;-1:-1:-1;;;;;6369:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;6424:25;;;;;;;6369:13;;6424:25;;;;;;;;;;;;;6077:379;;;:::o;207:217:6:-;265:7;288:6;284:45;;-1:-1:-1;317:1:6;310:8;;284:45;351:5;;;355:1;351;:5;:1;374:5;;;;;:10;366:32;;;;;-1:-1:-1;;;366:32:6;;;;;;;;;;;;-1:-1:-1;;;366:32:6;;;;;;;;;;;;;;529:161;587:7;618:1;614;:5;606:32;;;;;-1:-1:-1;;;606:32:6;;;;;;;;;;;;-1:-1:-1;;;606:32:6;;;;;;;;;;;;;;;648:9;664:1;660;:5;;;;;;;529:161;-1:-1:-1;;;;529:161:6:o;12475:2000:2:-;12582:13;12611:18;12639:24;12678:15;;12697:1;12678:20;12674:525;;;12745:16;:14;:16::i;:::-;12722:20;:39;12714:85;;;;-1:-1:-1;;;12714:85:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12861:16;:14;:16::i;:::-;12880:8;12861:27;12838:20;:50;12813:144;;;;-1:-1:-1;;;12813:144:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1031:9:2;;-1:-1:-1;13030:20:2;12674:525;;;13107:15;;13094:29;;;;:12;:29;;;;;:39;;-1:-1:-1;13166:22:2;;13186:1;13166:19;:22::i;:::-;13147:41;;12674:525;13237:20;13217:16;:40;13209:71;;;;;-1:-1:-1;;;13209:71:2;;;;;;;;;;;;-1:-1:-1;;;13209:71:2;;;;;;;;;;;;;;;13291:24;;13349:53;13350:33;;;13349:51;:53::i;:::-;13326:76;;13416:12;13432:7;13416:23;13412:392;;;13460:37;;;;:24;:37;;;;;;:40;;;13441:59;;13412:392;;;13519:12;13535:7;13519:23;13515:289;;;13575:37;;;;:24;:37;;;;;13613:1;13575:40;;13515:289;13634:12;13650:7;13634:23;13630:174;;;13690:37;;;;:24;:37;;;;;13728:1;13690:40;;13630:174;13764:37;;;;:24;:37;;;;;13802:1;13764:40;;13745:59;;13630:174;13815:18;13848:132;2193:6;13849:73;13888:33;:10;2193:6;13888:14;:33::i;:::-;13850:32;:16;13871:10;13850:20;:32::i;:::-;13849:38;;:73::i;:::-;13848:83;;:132::i;:::-;13815:165;-1:-1:-1;13991:15:2;14009:65;14063:10;14009:44;951:5;14010:26;13815:165;14063:10;14010:14;:26::i;14009:44::-;:53;;:65::i;:::-;13991:83;;14084:16;14103;:14;:16::i;:::-;14163:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14130:30:2;;;:12;:30;;;;;:182;;;;;;;;;;;;;;;;;;;;;;;;;;14323:15;:34;;;14373:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14084:35;;-1:-1:-1;14373:74:2;;;;;;;;;;-1:-1:-1;14464:4:2;;12475:2000;-1:-1:-1;;;;;;;;;12475:2000:2:o;273:916:4:-;341:7;393:4;380:17;;341:7;;;;;554:19;380:17;554:8;:19::i;:::-;547:26;-1:-1:-1;613:28:4;262:4;613:15;:28::i;:::-;589:21;605:4;589:21;;:15;:21::i;:::-;:52;583:58;;698:3;217:8;675:26;652:49;;;;774:3;262:4;753;:18;:24;;;163:8;734:44;711:67;;;;806:22;847:1;843:5;;838:292;855:2;850:1;:7;;;838:292;;912:24;928:1;931:4;912:15;:24::i;:::-;117:5;895:41;878:58;;993:9;971:19;954:14;:36;:48;950:119;;;1030:1;1022:9;;1049:5;;950:119;1082:37;;;;859:3;;;;;838:292;;;1148:28;1164:5;1171:4;1148:15;:28::i;:::-;1179:2;1148:33;;273:916;-1:-1:-1;;;;;;;;;273:916:4:o;535:223:5:-;597:7;628:1;624;:5;616:32;;;;;-1:-1:-1;;;616:32:5;;;;;;;;;;;;-1:-1:-1;;;616:32:5;;;;;;;;;;;;;;;658:9;674:1;670;:5;;;;;;658:17;;697:1;693;689;:5;;;;;;:9;685:49;;;722:1;718:5;;535:223;-1:-1:-1;;;535:223:5:o;247:186::-;310:7;341:1;337;:5;329:32;;;;;-1:-1:-1;;;329:32:5;;;;;;;;;;;;-1:-1:-1;;;329:32:5;;;;;;;;;;;;;;;371:9;406:2;396:1;386;390:2;386:6;385:12;;;;;;401:1;384:18;383:25;;;;1744:789:4;1804:6;;262:4;163:8;1959:28;;1945:42;;;1804:6;;2037:28;;:15;:28::i;:::-;2013:21;2029:4;2013:21;;:15;:21::i;:::-;:52;1998:67;;2122:12;217:8;2099:35;2076:58;;;;2207:12;262:4;2186;:18;:33;;;163:8;2167:53;2144:76;;;;2231:275;2260:10;2238:19;:32;2231:275;;;2290:28;2315:1;2308:4;:8;2290:10;:28::i;:::-;2286:187;;;217:8;2338:43;;;;2286:187;;;163:8;2420:38;;;;2286:187;2494:1;2486:9;;;;2231:275;;;-1:-1:-1;2522:4:4;1744:789;-1:-1:-1;;;1744:789:4:o;2836:163::-;2976:3;-1:-1:-1;;2932:9:4;;;;2969:10;;;2965:1;2958:8;;:21;2989:3;2982:10;;;2958:34;;2836:163::o;1195:543::-;1270:7;1306:6;:11;;1316:1;1306:11;:38;;;;1333:6;:11;;1343:1;1333:11;1306:38;:65;;;;1360:6;:11;;1370:1;1360:11;1306:65;:92;;;;1387:6;:11;;1397:1;1387:11;1306:92;:119;;;;1414:6;:11;;1424:1;1414:11;1306:119;:147;;;;1441:6;:12;;1451:2;1441:12;1306:147;:175;;;;1469:6;:12;;1479:2;1469:12;1306:175;1289:443;;;-1:-1:-1;1513:2:4;1506:9;;1289:443;1536:6;:11;;1546:1;1536:11;:26;;;;1551:6;:11;;1561:1;1551:11;1536:26;:41;;;;1566:6;:11;;1576:1;1566:11;1536:41;:57;;;;1581:6;:12;;1591:2;1581:12;1536:57;1532:200;;;-1:-1:-1;1616:2:4;1609:9;;1532:200;1639:17;1650:5;1639:10;:17::i;:::-;1635:97;;;-1:-1:-1;1679:2:4;1672:9;;1635:97;-1:-1:-1;1719:2:4;1712:9;;2539:291;2595:4;2615:9;;;:14;2611:57;;-1:-1:-1;2652:5:4;2645:12;;2611:57;2689:3;2681:11;;;;:16;;2696:1;2681:16;2677:58;;-1:-1:-1;2720:4:4;2713:11;;2677:58;2756:3;2748:11;;;;:16;;2763:1;2748:16;2744:59;;-1:-1:-1;2787:5:4;2780:12;;2744:59;-1:-1:-1;2819:4:4;2539:291;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

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