Contract 0x782395303692abed877d2737aa7982345eb44c11 5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9acd4181824ca4ae3ec9ca44850c32264a7f05a1502dac8c51b4f0a82dc3b556Taker Withdraw110608972021-09-19 21:23:031 hr 12 mins ago0xa786440ed24155a0f2f0075035cce6b0a748a277 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00123282
0xacde11311290ea72769c0eb83fa4be62ac0a792fcd9bcde9bc061d3faa5544bdTaker Withdraw110608962021-09-19 21:23:001 hr 12 mins ago0x1e820f69274b1f0e920f5d70d8d6d75b9f44918a IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.003089925
0xbe0d6a0c6838416c9a0ec322d37ea1276cc4a6dfd7f4ceb50fc8ede89fd561e7Taker Withdraw110604872021-09-19 21:02:331 hr 32 mins ago0x7c6c6b37be628f5e900ec6e227f0c65ff4c489dc IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000924175
0xd38ae0e6980ee4f6443b09cfe6a99667d5a5649e739c74e6a55625ea9895c992Taker Withdraw110599812021-09-19 20:37:151 hr 58 mins ago0x710e27e1b76a3f7657b0f73f95cecf3b14f29627 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00139148
0x36d1392ea3bedf3b713021c8a7930608612c2c91d3792f8e9b1be3d64b51fdb2Taker Withdraw110599562021-09-19 20:36:001 hr 59 mins ago0x710e27e1b76a3f7657b0f73f95cecf3b14f29627 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00152069
0x7de1b1d6a8e32542c234ffd423e3d9e828945a06fb7200b6abbee4ba8486ee70Taker Withdraw110594022021-09-19 20:08:182 hrs 27 mins ago0xa87317903d6f52d73d511d378fb0821fd1b9f438 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00076555
0x6fe64d5c4c1e500a501c80b54f39bfffdf7074bdc035ca7d0bb1247066a6c5f3Taker Withdraw110591782021-09-19 19:57:052 hrs 38 mins ago0x0274cfbefceaea7dd13836dbcaf635f554992c64 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000498235
0x0ebddc3bf6bf24f2c5e7ec6e4bab28d5d813aced74bc7c5cbffab4a451d41100Taker Withdraw110591712021-09-19 19:56:442 hrs 38 mins ago0xf70a9a0abde98ce67781fd002b7ac1a7220a8866 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00123282
0x69a0735cb41b056e7e514f2a58e3d0e6f88ffa7b9f134779cb4f1533c60531dbTaker Withdraw110589362021-09-19 19:44:592 hrs 50 mins ago0xfa5bec3eb52cdf3350afaa223f2dcacb23cacef4 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00246362
0xc4319c0e04b4dae894dfa82df462618107a6148736842232c70f74528aadf342Taker Withdraw110589352021-09-19 19:44:562 hrs 50 mins ago0x2115180d4b3416679baf296def4f300faab2b5dd IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00162516
0xa9a0f789ff34e92472c1610af8d2294e29c2aff58d3ca9be990ff1c988232833Taker Withdraw110589262021-09-19 19:44:292 hrs 50 mins ago0xfa5bec3eb52cdf3350afaa223f2dcacb23cacef4 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00311938
0xcff7503d2f98c4b82f9e32346cf69c87f725e9bc9b9f21f262712c5e3060aa26Taker Withdraw110589202021-09-19 19:44:112 hrs 51 mins ago0x774257ff5a204de4b5498f4daba53d62e33da052 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000704361
0xf5b5aa3e9a526d5b69735b24b9b6956ac3a512510d3d15810190e8a09950e251Taker Withdraw110587942021-09-19 19:37:532 hrs 57 mins ago0x8b52324412de6540d688ca9899f5c1c33a7cc796 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00139148
0x1c45819488b0ce55e7ff34f1720534ea02a9c78a93ffacd754d589824ff5d144Taker Withdraw110585872021-09-19 19:27:323 hrs 7 mins ago0x0a1080f9520ac719aa24ec6a9e424fd470f8be90 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.001453785
0x8a9d0d2858246367bbca73cdb538d084b10bed126a0733c939caf5300d44784cTaker Withdraw110584932021-09-19 19:22:503 hrs 12 mins ago0xa4d230151af32697e426047e55f08e54868876ec IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00115782
0x2d8fe374b85bbc7a171ef561ce648dc2c831c388a24124f8deac95811bb87aadTaker Withdraw110582812021-09-19 19:12:143 hrs 23 mins ago0x2243e2fe1c8973496042ea067df552d016d13675 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.001858855
0x46049b66f8892b6a0ab9c9fe75374e66bb0868fb5b91234e61f4f4b5006926f4Taker Withdraw110575302021-09-19 18:34:414 hrs ago0xa7c2c3dd6525639efbf3f9e92a40592e13126197 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.002167565535
0x6c53237254774effb6d75ab6c75a0050c6989c2fe9cf608a344d99df47c8c05bTaker Withdraw110571062021-09-19 18:13:294 hrs 21 mins ago0x6f8efd806f3e640f25347f7957560ed19514737f IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00139148
0x160283fced81c84b04e576e4b3e82f380a9c3dc3646eb383c6e93e35a86b7f1cTaker Withdraw110570312021-09-19 18:09:444 hrs 25 mins ago0x8638907b822893358b7574a04c477b51ac782b4f IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00076555
0xb61a34030af0aae830925cfe043d0ff2e4a06c3498858580829db5da59cae35eTaker Withdraw110570152021-09-19 18:08:564 hrs 26 mins ago0xf3745151282242e0becaf9fcfbbeb7d20033ced4 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00170016
0x9fed7556d9dd290f25758f2951618a6d2aff433fa738850156084187cb4f10b7Taker Withdraw110568302021-09-19 17:59:414 hrs 35 mins ago0xbd333a1a9d090e9243bece26fe5662f4b9f0b00a IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0016576632
0x6c067ef4289c28573371b619895144fa85d8fdaa1ff75ba057e6283daf58e15bTaker Withdraw110549742021-09-19 16:26:506 hrs 8 mins ago0x7fb56138ee0ecbf0b4cd7d0f50b965c2c3dd0b6d IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000999175
0xfc9f49d68c330849995ad16dd55e40da27946cd4a92da70d4ca07de0c1aee89cTaker Withdraw110548402021-09-19 16:20:086 hrs 15 mins ago0x82d8fd4c0c477ef0717d08a81dd363d2ffb3395a IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.00076555
0x7770f8003e384c3ce5649cb2329602920d0894fe45e1188c781e11de3d0b6f56Taker Withdraw110547292021-09-19 16:14:356 hrs 20 mins ago0xaaf40d0d931233473442847070fc5873ac204dbd IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.000924175
0xbd01eab1a87c785ee7f0110d915a1cd70d484183c2f8e008b74e36eeb8b79a3bTaker Withdraw110547092021-09-19 16:13:356 hrs 21 mins ago0x51cc7d3fe14e5e9ba1ef20600ba9ddb5fdb61c81 IN  0x782395303692abed877d2737aa7982345eb44c110 BNB0.0012574764
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapMining

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-08
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

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

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {// Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1;
            // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

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

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

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

interface IMdx is IERC20 {
    function mint(address to, uint256 amount) external returns (bool);
}

interface IMdexFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IMdexPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

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

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

    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IOracle {
    function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut);
}

contract SwapMining is Ownable {
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _whitelist;

    // MDX tokens created per block
    uint256 public mdxPerBlock;
    // The block number when MDX mining starts.
    uint256 public startBlock;
    // How many blocks are halved
    uint256 public halvingPeriod = 1670400;
    // Total allocation points
    uint256 public totalAllocPoint = 0;
    IOracle public oracle;
    // router address
    address public router;
    // factory address
    IMdexFactory public factory;
    // mdx token address
    IMdx public mdx;
    // Calculate price based on BUSD-T
    address public targetToken;
    // pair corresponding pid
    mapping(address => uint256) public pairOfPid;

    constructor(
        IMdx _mdx,
        IMdexFactory _factory,
        IOracle _oracle,
        address _router,
        address _targetToken,
        uint256 _mdxPerBlock,
        uint256 _startBlock
    ) public {
        mdx = _mdx;
        factory = _factory;
        oracle = _oracle;
        router = _router;
        targetToken = _targetToken;
        mdxPerBlock = _mdxPerBlock;
        startBlock = _startBlock;
    }

    struct UserInfo {
        uint256 quantity;       // How many LP tokens the user has provided
        uint256 blockNumber;    // Last transaction block
    }

    struct PoolInfo {
        address pair;           // Trading pairs that can be mined
        uint256 quantity;       // Current amount of LPs
        uint256 totalQuantity;  // All quantity
        uint256 allocPoint;     // How many allocation points assigned to this pool
        uint256 allocMdxAmount; // How many MDXs
        uint256 lastRewardBlock;// Last transaction block
    }

    PoolInfo[] public poolInfo;
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;


    function poolLength() public view returns (uint256) {
        return poolInfo.length;
    }


    function addPair(uint256 _allocPoint, address _pair, bool _withUpdate) public onlyOwner {
        require(_pair != address(0), "_pair is the zero address");
        if (_withUpdate) {
            massMintPools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
        pair : _pair,
        quantity : 0,
        totalQuantity : 0,
        allocPoint : _allocPoint,
        allocMdxAmount : 0,
        lastRewardBlock : lastRewardBlock
        }));
        pairOfPid[_pair] = poolLength() - 1;
    }

    // Update the allocPoint of the pool
    function setPair(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        if (_withUpdate) {
            massMintPools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }

    // Set the number of mdx produced by each block
    function setMdxPerBlock(uint256 _newPerBlock) public onlyOwner {
        massMintPools();
        mdxPerBlock = _newPerBlock;
    }

    // Only tokens in the whitelist can be mined MDX
    function addWhitelist(address _addToken) public onlyOwner returns (bool) {
        require(_addToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.add(_whitelist, _addToken);
    }

    function delWhitelist(address _delToken) public onlyOwner returns (bool) {
        require(_delToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.remove(_whitelist, _delToken);
    }

    function getWhitelistLength() public view returns (uint256) {
        return EnumerableSet.length(_whitelist);
    }

    function isWhitelist(address _token) public view returns (bool) {
        return EnumerableSet.contains(_whitelist, _token);
    }

    function getWhitelist(uint256 _index) public view returns (address){
        require(_index <= getWhitelistLength() - 1, "SwapMining: index out of bounds");
        return EnumerableSet.at(_whitelist, _index);
    }

    function setHalvingPeriod(uint256 _block) public onlyOwner {
        halvingPeriod = _block;
    }

    function setRouter(address newRouter) public onlyOwner {
        require(newRouter != address(0), "SwapMining: new router is the zero address");
        router = newRouter;
    }

    function setOracle(IOracle _oracle) public onlyOwner {
        require(address(_oracle) != address(0), "SwapMining: new oracle is the zero address");
        oracle = _oracle;
    }

    // At what phase
    function phase(uint256 blockNumber) public view returns (uint256) {
        if (halvingPeriod == 0) {
            return 0;
        }
        if (blockNumber > startBlock) {
            return (blockNumber.sub(startBlock).sub(1)).div(halvingPeriod);
        }
        return 0;
    }

    function phase() public view returns (uint256) {
        return phase(block.number);
    }

    function reward(uint256 blockNumber) public view returns (uint256) {
        uint256 _phase = phase(blockNumber);
        return mdxPerBlock.div(2 ** _phase);
    }

    function reward() public view returns (uint256) {
        return reward(block.number);
    }

    // Rewards for the current block
    function getMdxReward(uint256 _lastRewardBlock) public view returns (uint256) {
        require(_lastRewardBlock <= block.number, "SwapMining: must little than the current block number");
        uint256 blockReward = 0;
        uint256 n = phase(_lastRewardBlock);
        uint256 m = phase(block.number);
        // If it crosses the cycle
        while (n < m) {
            n++;
            // Get the last block of the previous cycle
            uint256 r = n.mul(halvingPeriod).add(startBlock);
            // Get rewards from previous periods
            blockReward = blockReward.add((r.sub(_lastRewardBlock)).mul(reward(r)));
            _lastRewardBlock = r;
        }
        blockReward = blockReward.add((block.number.sub(_lastRewardBlock)).mul(reward(block.number)));
        return blockReward;
    }

    // Update all pools Called when updating allocPoint and setting new blocks
    function massMintPools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            mint(pid);
        }
    }

    function mint(uint256 _pid) public returns (bool) {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return false;
        }
        uint256 blockReward = getMdxReward(pool.lastRewardBlock);
        if (blockReward <= 0) {
            return false;
        }
        // Calculate the rewards obtained by the pool based on the allocPoint
        uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
        mdx.mint(address(this), mdxReward);
        // Increase the number of tokens in the current pool
        pool.allocMdxAmount = pool.allocMdxAmount.add(mdxReward);
        pool.lastRewardBlock = block.number;
        return true;
    }

    // swapMining only router
    function swap(address account, address input, address output, uint256 amount) public onlyRouter returns (bool) {
        require(account != address(0), "SwapMining: taker swap account is the zero address");
        require(input != address(0), "SwapMining: taker swap input is the zero address");
        require(output != address(0), "SwapMining: taker swap output is the zero address");

        if (poolLength() <= 0) {
            return false;
        }

        if (!isWhitelist(input) || !isWhitelist(output)) {
            return false;
        }

        address pair = IMdexFactory(factory).pairFor(input, output);

        PoolInfo storage pool = poolInfo[pairOfPid[pair]];
        // If it does not exist or the allocPoint is 0 then return
        if (pool.pair != pair || pool.allocPoint <= 0) {
            return false;
        }

        uint256 quantity = getQuantity(output, amount, targetToken);
        if (quantity <= 0) {
            return false;
        }

        mint(pairOfPid[pair]);

        pool.quantity = pool.quantity.add(quantity);
        pool.totalQuantity = pool.totalQuantity.add(quantity);
        UserInfo storage user = userInfo[pairOfPid[pair]][account];
        user.quantity = user.quantity.add(quantity);
        user.blockNumber = block.number;
        return true;
    }

    // The user withdraws all the transaction rewards of the pool
    function takerWithdraw() public {
        uint256 userSub;
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            PoolInfo storage pool = poolInfo[pid];
            UserInfo storage user = userInfo[pid][msg.sender];
            if (user.quantity > 0) {
                mint(pid);
                // The reward held by the user in this pool
                uint256 userReward = pool.allocMdxAmount.mul(user.quantity).div(pool.quantity);
                pool.quantity = pool.quantity.sub(user.quantity);
                pool.allocMdxAmount = pool.allocMdxAmount.sub(userReward);
                user.quantity = 0;
                user.blockNumber = block.number;
                userSub = userSub.add(userReward);
            }
        }
        if (userSub <= 0) {
            return;
        }
        mdx.transfer(msg.sender, userSub);
    }

    // Get rewards from users in the current pool
    function getUserReward(uint256 _pid) public view returns (uint256, uint256){
        require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool");
        uint256 userSub;
        PoolInfo memory pool = poolInfo[_pid];
        UserInfo memory user = userInfo[_pid][msg.sender];
        if (user.quantity > 0) {
            uint256 blockReward = getMdxReward(pool.lastRewardBlock);
            uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
            userSub = userSub.add((pool.allocMdxAmount.add(mdxReward)).mul(user.quantity).div(pool.quantity));
        }
        //Mdx available to users, User transaction amount
        return (userSub, user.quantity);
    }

    // Get details of the pool
    function getPoolInfo(uint256 _pid) public view returns (address, address, uint256, uint256, uint256, uint256){
        require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool");
        PoolInfo memory pool = poolInfo[_pid];
        address token0 = IMdexPair(pool.pair).token0();
        address token1 = IMdexPair(pool.pair).token1();
        uint256 mdxAmount = pool.allocMdxAmount;
        uint256 blockReward = getMdxReward(pool.lastRewardBlock);
        uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
        mdxAmount = mdxAmount.add(mdxReward);
        //token0,token1,Pool remaining reward,Total /Current transaction volume of the pool
        return (token0, token1, mdxAmount, pool.totalQuantity, pool.quantity, pool.allocPoint);
    }

    modifier onlyRouter() {
        require(msg.sender == router, "SwapMining: caller is not the router");
        _;
    }

    function getQuantity(address outputToken, uint256 outputAmount, address anchorToken) public view returns (uint256) {
        uint256 quantity = 0;
        if (outputToken == anchorToken) {
            quantity = outputAmount;
        } else if (IMdexFactory(factory).getPair(outputToken, anchorToken) != address(0)) {
            quantity = IOracle(oracle).consult(outputToken, outputAmount, anchorToken);
        } else {
            uint256 length = getWhitelistLength();
            for (uint256 index = 0; index < length; index++) {
                address intermediate = getWhitelist(index);
                if (IMdexFactory(factory).getPair(outputToken, intermediate) != address(0) && IMdexFactory(factory).getPair(intermediate, anchorToken) != address(0)) {
                    uint256 interQuantity = IOracle(oracle).consult(outputToken, outputAmount, intermediate);
                    quantity = IOracle(oracle).consult(intermediate, interQuantity, anchorToken);
                    break;
                }
            }
        }
        return quantity;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IMdx","name":"_mdx","type":"address"},{"internalType":"contract IMdexFactory","name":"_factory","type":"address"},{"internalType":"contract IOracle","name":"_oracle","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_mdxPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addToken","type":"address"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delToken","type":"address"}],"name":"delWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IMdexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"getMdxReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"address","name":"anchorToken","type":"address"}],"name":"getQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massMintPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mdx","outputs":[{"internalType":"contract IMdx","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mdxPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairOfPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"allocMdxAmount","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setHalvingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerBlock","type":"uint256"}],"name":"setMdxPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405262197d00600555600060065534801561001c57600080fd5b506040516126c93803806126c9833981810160405260e081101561003f57600080fd5b50805160208201516040808401516060850151608086015160a087015160c090970151600080546001600160a01b031916331780825595519798969794969395929491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a80546001600160a01b03199081166001600160a01b03998a1617909155600980548216978916979097179096556007805487169588169590951790945560088054861693871693909317909255600b80549094169416939093179091556003919091556004556125a0806101296000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806396db752a1161013b578063b5ec5c99116100b8578063e377fe351161007c578063e377fe3514610658578063f2fde38b14610675578063f80f5dd51461069b578063f887ea40146106c1578063f9d181f9146106c957610248565b8063b5ec5c99146105df578063b872dd0e146105fc578063c0d7865514610604578063c45a01551461062a578063c683630d1461063257610248565b8063a13202e9116100ff578063a13202e914610540578063a7ef67f614610548578063a9678a181461057e578063a9fb763c146105ba578063b1c9fe6e146105d757610248565b806396db752a146104bb57806397ecfaab146104d85780639f4ece2e146104fe5780639fb08cb714610506578063a0712d681461052357610248565b806348cd4cb1116101c95780637adbf9731161018d5780637adbf973146104385780637dc0d1d01461045e5780638da5cb5b146104665780638fa39a881461046e57806393f1a40b1461047657610248565b806348cd4cb1146103fb5780635672ab55146104035780635a3e251f1461040b578063715018a614610413578063791ba3741461041b57610248565b8063190cf6c911610210578063190cf6c91461030c578063228cb733146103395780632f380b35146103415780632f54bf6e1461039d578063327107f7146103d757610248565b80630495de501461024d578063081e3eda14610285578063135f8aa71461028d5780631526fe27146102aa57806317caf6f114610304575b600080fd5b6102736004803603602081101561026357600080fd5b50356001600160a01b03166106fd565b60408051918252519081900360200190f35b61027361070f565b610273600480360360208110156102a357600080fd5b5035610715565b6102c7600480360360208110156102c057600080fd5b5035610770565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6102736107bd565b6103376004803603606081101561032257600080fd5b508035906020810135906040013515156107c3565b005b610273610884565b61035e6004803603602081101561035757600080fd5b5035610894565b604080516001600160a01b039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b6103c3600480360360208110156103b357600080fd5b50356001600160a01b0316610ab0565b604080519115158252519081900360200190f35b6103df610ac4565b604080516001600160a01b039092168252519081900360200190f35b610273610ad3565b6103df610ad9565b610273610ae8565b610337610aee565b6103376004803603602081101561043157600080fd5b5035610b80565b6103376004803603602081101561044e57600080fd5b50356001600160a01b0316610bd5565b6103df610c84565b6103df610c93565b610273610ca2565b6104a26004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ca8565b6040805192835260208301919091528051918290030190f35b6103df600480360360208110156104d157600080fd5b5035610ccc565b6103c3600480360360208110156104ee57600080fd5b50356001600160a01b0316610d3e565b610337610dd8565b6104a26004803603602081101561051c57600080fd5b5035610dfc565b6103c36004803603602081101561053957600080fd5b5035610f90565b6102736110b0565b6102736004803603606081101561055e57600080fd5b506001600160a01b038135811691602081013591604090910135166110bc565b6103c36004803603608081101561059457600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561147f565b610273600480360360208110156105d057600080fd5b5035611796565b6102736117c3565b610337600480360360208110156105f557600080fd5b50356117ce565b61033761181b565b6103376004803603602081101561061a57600080fd5b50356001600160a01b031661197c565b6103df611a2b565b6103c36004803603602081101561064857600080fd5b50356001600160a01b0316611a3a565b6102736004803603602081101561066e57600080fd5b5035611a47565b6103376004803603602081101561068b57600080fd5b50356001600160a01b0316611b1f565b6103c3600480360360208110156106b157600080fd5b50356001600160a01b0316611b73565b6103df611c0d565b610337600480360360608110156106df57600080fd5b508035906001600160a01b0360208201351690604001351515611c1c565b600c6020526000908152604090205481565b600d5490565b60006005546000141561072a5750600061076b565b6004548211156107675761076060055461075a600161075460045487611e6a90919063ffffffff16565b90611e6a565b90611eac565b905061076b565b5060005b919050565b600d818154811061077d57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b60065481565b6107cc33610ab0565b61080b576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b801561081957610819610dd8565b61085682610850600d868154811061082d57fe5b906000526020600020906006020160030154600654611e6a90919063ffffffff16565b90611eee565b60068190555081600d848154811061086a57fe5b906000526020600020906006020160030181905550505050565b600061088f43611796565b905090565b6000806000806000806001600d80549050038711156108fa576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b610902612323565b600d888154811061090f57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b031680855260018201548585015260028201548584015260038201546060860152600480830154608087015260059092015460a08601528251630dfe168160e01b8152925194965093630dfe16819383830193909290829003018186803b15801561099e57600080fd5b505afa1580156109b2573d6000803e3d6000fd5b505050506040513d60208110156109c857600080fd5b505182516040805163d21220a760e01b815290519293506000926001600160a01b039092169163d21220a791600480820192602092909190829003018186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d6020811015610a3e57600080fd5b5051608084015160a085015191925090600090610a5a90611a47565b90506000610a7b60065461075a886060015185611f4890919063ffffffff16565b9050610a878382611eee565b60408701516020880151606090980151969f959e50909c509a5094985092965090945050505050565b6000546001600160a01b0390811691161490565b600b546001600160a01b031681565b60045481565b600a546001600160a01b031681565b60055481565b610af733610ab0565b610b36576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b8933610ab0565b610bc8576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b610bd0610dd8565b600355565b610bde33610ab0565b610c1d576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116610c625760405162461bcd60e51b815260040180806020018281038252602a81526020018061247a602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b6000546001600160a01b031690565b60035481565b600e6020908152600092835260408084209091529082529020805460019091015482565b60006001610cd86110b0565b03821115610d2d576040805162461bcd60e51b815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610d38600183611fa1565b92915050565b6000610d4933610ab0565b610d88576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216610dcd5760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183611fad565b600d5460005b81811015610df857610def81610f90565b50600101610dde565b5050565b600d54600090819060001901831115610e5c576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b6000610e66612323565b600d8581548110610e7357fe5b60009182526020918290206040805160c081018252600690930290910180546001600160a01b03168352600181015493830193909352600283015490820152600382015460608201526004820154608082015260059091015460a08201529050610edb612362565b506000858152600e60209081526040808320338452825291829020825180840190935280548084526001909101549183019190915215610f83576000610f248360a00151611a47565b90506000610f4560065461075a866060015185611f4890919063ffffffff16565b9050610f7e610f77856020015161075a8660000151610f71868a60800151611eee90919063ffffffff16565b90611f48565b8690611eee565b945050505b5191935090915050915091565b600080600d8381548110610fa057fe5b9060005260206000209060060201905080600501544311610fc557600091505061076b565b6000610fd48260050154611a47565b905060008111610fe95760009250505061076b565b600061100860065461075a856003015485611f4890919063ffffffff16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b15801561105f57600080fd5b505af1158015611073573d6000803e3d6000fd5b505050506040513d602081101561108957600080fd5b5050600483015461109a9082611eee565b6004840155505043600590910155506001919050565b600061088f6001611fc2565b6000806001600160a01b0385811690841614156110da575082611477565b6009546040805163e6a4390560e01b81526001600160a01b038881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50516001600160a01b0316146111fb5760075460408051632321bc7960e21b81526001600160a01b03888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b50519050611477565b60006112056110b0565b905060005b8181101561147457600061121d82610ccc565b6009546040805163e6a4390560e01b81526001600160a01b038c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516001600160a01b03161480159061134657506009546040805163e6a4390560e01b81526001600160a01b038481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b50516001600160a01b031614155b1561146b5760075460408051632321bc7960e21b81526001600160a01b038b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b505160075460408051632321bc7960e21b81526001600160a01b038681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561143557600080fd5b505afa158015611449573d6000803e3d6000fd5b505050506040513d602081101561145f57600080fd5b50519450611474915050565b5060010161120a565b50505b949350505050565b6008546000906001600160a01b031633146114cb5760405162461bcd60e51b81526004018080602001828103825260248152602001806124a46024913960400191505060405180910390fd5b6001600160a01b0385166115105760405162461bcd60e51b81526004018080602001828103825260328152602001806125096032913960400191505060405180910390fd5b6001600160a01b0384166115555760405162461bcd60e51b815260040180806020018281038252603081526020018061253b6030913960400191505060405180910390fd5b6001600160a01b03831661159a5760405162461bcd60e51b81526004018080602001828103825260318152602001806124496031913960400191505060405180910390fd5b60006115a461070f565b116115b157506000611477565b6115ba84611a3a565b15806115cc57506115ca83611a3a565b155b156115d957506000611477565b600954604080516396ed28f960e01b81526001600160a01b0387811660048301528681166024830152915160009392909216916396ed28f991604480820192602092909190829003018186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b50516001600160a01b0381166000908152600c6020526040812054600d80549394509192811061168857fe5b6000918252602090912060069091020180549091506001600160a01b0383811691161415806116b957506003810154155b156116c957600092505050611477565b600b546000906116e590879087906001600160a01b03166110bc565b9050600081116116fb5760009350505050611477565b6001600160a01b0383166000908152600c602052604090205461171d90610f90565b50600182015461172d9082611eee565b600183015560028201546117419082611eee565b60028301556001600160a01b038084166000908152600c60209081526040808320548352600e8252808320938c1683529290522080546117819083611eee565b81554360019182015598975050505050505050565b6000806117a283610715565b90506117bc8160020a600354611eac90919063ffffffff16565b9392505050565b600061088f43610715565b6117d733610ab0565b611816576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600555565b600d54600090815b818110156118e7576000600d828154811061183a57fe5b60009182526020808320858452600e825260408085203386529092529220805460069092029092019250156118dd5761187283610f90565b506000611898836001015461075a84600001548660040154611f4890919063ffffffff16565b825460018501549192506118ac9190611e6a565b600184015560048301546118c09082611e6a565b6004840155600082554360018301556118d98682611eee565b9550505b5050600101611823565b50600082116118f757505061197a565b600a546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b505050505b565b61198533610ab0565b6119c4576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a095760405162461bcd60e51b815260040180806020018281038252602a81526020018061239f602a913960400191505060405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6000610d38600183611fcd565b600043821115611a885760405162461bcd60e51b81526004018080602001828103825260358152602001806123ef6035913960400191505060405180910390fd5b600080611a9484610715565b90506000611aa143610715565b90505b80821015611af657600454600554600190930192600091611aca91610850908690611f48565b9050611aec611ae5611adb83611796565b610f71848a611e6a565b8590611eee565b9095509250611aa4565b611b16611b0f611b0543611796565b610f714389611e6a565b8490611eee565b95945050505050565b611b2833610ab0565b611b67576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b611b7081611fe2565b50565b6000611b7e33610ab0565b611bbd576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611c025760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183612082565b6008546001600160a01b031681565b611c2533610ab0565b611c64576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611cbf576040805162461bcd60e51b815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b8015611ccd57611ccd610dd8565b60006004544311611ce057600454611ce2565b435b600654909150611cf29085611eee565b60069081556040805160c0810182526001600160a01b038681168252600060208301818152938301818152606084018a81526080850183815260a08601898152600d8054600180820183559190965296517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59590990294850180546001600160a01b031916999096169890981790945594517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb782015592517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb8840155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb983015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba90910155611e4761070f565b6001600160a01b039094166000908152600c602052604090209303909255505050565b60006117bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612097565b60006117bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061212e565b6000828201838110156117bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f5757506000610d38565b82820282848281611f6457fe5b04146117bc5760405162461bcd60e51b81526004018080602001828103825260218152602001806124c86021913960400191505060405180910390fd5b60006117bc8383612193565b60006117bc836001600160a01b0384166121f7565b6000610d38826122bd565b60006117bc836001600160a01b0384166122c1565b6001600160a01b0381166120275760405162461bcd60e51b81526004018080602001828103825260268152602001806123c96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117bc836001600160a01b0384166122d9565b600081848411156121265760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120eb5781810151838201526020016120d3565b50505050905090810190601f1680156121185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361217d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120eb5781810151838201526020016120d3565b50600083858161218957fe5b0495945050505050565b815460009082106121d55760405162461bcd60e51b815260040180806020018281038252602281526020018061237d6022913960400191505060405180910390fd5b8260000182815481106121e457fe5b9060005260206000200154905092915050565b600081815260018301602052604081205480156122b3578354600019808301919081019060009087908390811061222a57fe5b906000526020600020015490508087600001848154811061224757fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061227757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d38565b6000915050610d38565b5490565b60009081526001919091016020526040902054151590565b60006122e583836122c1565b61231b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d38565b506000610d38565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a206d757374206c6974746c65207468616e207468652063757272656e7420626c6f636b206e756d626572537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a2074616b65722073776170206f757470757420697320746865207a65726f2061646472657373537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373537761704d696e696e673a2063616c6c6572206973206e6f742074686520726f75746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537761704d696e696e673a2074616b65722073776170206163636f756e7420697320746865207a65726f2061646472657373537761704d696e696e673a2074616b6572207377617020696e70757420697320746865207a65726f2061646472657373a2646970667358221220e7e40616c339d8f4178fc2818f8b8349f7faf87b1dfb3b84ad02f0c6bbf2e10664736f6c634300060c00330000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416

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

0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416

-----Decoded View---------------
Arg [0] : _mdx (address): 0x9c65ab58d8d978db963e63f2bfb7121627e3a739
Arg [1] : _factory (address): 0x3cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [2] : _oracle (address): 0x17c77d7203a7deeb44754c6bc143f249969456f5
Arg [3] : _router (address): 0x7dae51bd3e3376b8c7c4900e9107f12be3af1ba8
Arg [4] : _targetToken (address): 0x55d398326f99059ff775485246999027b3197955
Arg [5] : _mdxPerBlock (uint256): 80000000000000000000
Arg [6] : _startBlock (uint256): 6386710

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a739
Arg [1] : 0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [2] : 00000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f5
Arg [3] : 0000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba8
Arg [4] : 00000000000000000000000055d398326f99059ff775485246999027b3197955
Arg [5] : 000000000000000000000000000000000000000000000004563918244f400000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000617416


Deployed ByteCode Sourcemap

20718:12574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:44;;;;;;;;;;;;;;;;-1:-1:-1;21489:44:0;-1:-1:-1;;;;;21489:44:0;;:::i;:::-;;;;;;;;;;;;;;;;22670:93;;;:::i;25513:291::-;;;;;;;;;;;;;;;;-1:-1:-1;25513:291:0;;:::i;22562:26::-;;;;;;;;;;;;;;;;-1:-1:-1;22562:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;22562:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21159:34;;;:::i;23482:306::-;;;;;;;;;;;;;;;;-1:-1:-1;23482:306:0;;;;;;;;;;;;;;:::i;:::-;;26087:94;;;:::i;31261:798::-;;;;;;;;;;;;;;;;-1:-1:-1;31261:798:0;;:::i;:::-;;;;-1:-1:-1;;;;;31261:798:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:104;;;;;;;;;;;;;;;;-1:-1:-1;336:104:0;-1:-1:-1;;;;;336:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;21425:26;;;:::i;:::-;;;;-1:-1:-1;;;;;21425:26:0;;;;;;;;;;;;;;21015:25;;;:::i;21363:15::-;;;:::i;21082:38::-;;;:::i;448:140::-;;;:::i;23849:134::-;;;;;;;;;;;;;;;;-1:-1:-1;23849:134:0;;:::i;25299:184::-;;;;;;;;;;;;;;;;-1:-1:-1;25299:184:0;-1:-1:-1;;;;;25299:184:0;;:::i;21200:21::-;;;:::i;249:79::-;;;:::i;20933:26::-;;;:::i;22595:64::-;;;;;;;;;;;;;;;;-1:-1:-1;22595:64:0;;;;;;-1:-1:-1;;;;;22595:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24776:218;;;;;;;;;;;;;;;;-1:-1:-1;24776:218:0;;:::i;24276:226::-;;;;;;;;;;;;;;;;-1:-1:-1;24276:226:0;-1:-1:-1;;;;;24276:226:0;;:::i;27146:172::-;;;:::i;30506:715::-;;;;;;;;;;;;;;;;-1:-1:-1;30506:715:0;;:::i;27326:741::-;;;;;;;;;;;;;;;;-1:-1:-1;27326:741:0;;:::i;24510:118::-;;;:::i;32197:1090::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32197:1090:0;;;;;;;;;;;;;;;;;:::i;28106:1351::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28106:1351:0;;;;;;;;;;;;;;;;;;;;;;:::i;25912:167::-;;;;;;;;;;;;;;;;-1:-1:-1;25912:167:0;;:::i;25812:92::-;;;:::i;25002:100::-;;;;;;;;;;;;;;;;-1:-1:-1;25002:100:0;;:::i;29532:915::-;;;:::i;25110:181::-;;;;;;;;;;;;;;;;-1:-1:-1;25110:181:0;-1:-1:-1;;;;;25110:181:0;;:::i;21303:27::-;;;:::i;24636:132::-;;;;;;;;;;;;;;;;-1:-1:-1;24636:132:0;-1:-1:-1;;;;;24636:132:0;;:::i;26227:831::-;;;;;;;;;;;;;;;;-1:-1:-1;26227:831:0;;:::i;833:109::-;;;;;;;;;;;;;;;;-1:-1:-1;833:109:0;-1:-1:-1;;;;;833:109:0;;:::i;24045:223::-;;;;;;;;;;;;;;;;-1:-1:-1;24045:223:0;-1:-1:-1;;;;;24045:223:0;;:::i;21251:21::-;;;:::i;22773:659::-;;;;;;;;;;;;;;;;-1:-1:-1;22773:659:0;;;-1:-1:-1;;;;;22773:659:0;;;;;;;;;;;;:::i;21489:44::-;;;;;;;;;;;;;:::o;22670:93::-;22740:8;:15;22670:93;:::o;25513:291::-;25570:7;25594:13;;25611:1;25594:18;25590:59;;;-1:-1:-1;25636:1:0;25629:8;;25590:59;25677:10;;25663:11;:24;25659:119;;;25711:55;25752:13;;25712:34;25744:1;25712:27;25728:10;;25712:11;:15;;:27;;;;:::i;:::-;:31;;:34::i;:::-;25711:40;;:55::i;:::-;25704:62;;;;25659:119;-1:-1:-1;25795:1:0;25513:291;;;;:::o;22562:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22562:26:0;;;;-1:-1:-1;22562:26:0;;;;;:::o;21159:34::-;;;;:::o;23482:306::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23584:11:::1;23580:59;;;23612:15;:13;:15::i;:::-;23667:63;23718:11;23667:46;23687:8;23696:4;23687:14;;;;;;;;;;;;;;;;;;:25;;;23667:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;23649:15;:81;;;;23769:11;23741:8;23750:4;23741:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;23482:306:::0;;;:::o;26087:94::-;26126:7;26153:20;26160:12;26153:6;:20::i;:::-;26146:27;;26087:94;:::o;31261:798::-;31317:7;31326;31335;31344;31353;31362;31415:1;31397:8;:15;;;;:19;31389:4;:27;;31381:70;;;;;-1:-1:-1;;;31381:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31462:20;;:::i;:::-;31485:8;31494:4;31485:14;;;;;;;;;;;;;;;;31462:37;;;;;;;;31485:14;;;;;;;31462:37;;-1:-1:-1;;;;;31462:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31527:29;;-1:-1:-1;;;31527:29:0;;;;31462:37;;-1:-1:-1;31462:37:0;31527:27;;:29;;;;31485:14;;31527:29;;;;;;31462:37;31527:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31527:29:0;31594:9;;31584:29;;;-1:-1:-1;;;31584:29:0;;;;31527;;-1:-1:-1;31567:14:0;;-1:-1:-1;;;;;31584:27:0;;;;;;:29;;;;;31527;;31584;;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31584:29:0;31644:19;;;;31709:20;;;;31584:29;;-1:-1:-1;31644:19:0;31624:17;;31696:34;;:12;:34::i;:::-;31674:56;;31741:17;31761:53;31798:15;;31761:32;31777:4;:15;;;31761:11;:15;;:32;;;;:::i;:53::-;31741:73;-1:-1:-1;31837:24:0;:9;31741:73;31837:13;:24::i;:::-;32000:18;;;;32020:13;;;;32035:15;;;;;31973:6;;31981;;-1:-1:-1;31825:36:0;;-1:-1:-1;32000:18:0;-1:-1:-1;32020:13:0;;-1:-1:-1;32035:15:0;;-1:-1:-1;31261:798:0;;-1:-1:-1;;;;;31261:798:0:o;336:104::-;391:4;426:6;-1:-1:-1;;;;;426:6:0;;;415:17;;;;336:104::o;21425:26::-;;;-1:-1:-1;;;;;21425:26:0;;:::o;21015:25::-;;;;:::o;21363:15::-;;;-1:-1:-1;;;;;21363:15:0;;:::o;21082:38::-;;;;:::o;448:140::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;547:1:::1;531:6:::0;;510:40:::1;::::0;-1:-1:-1;;;;;531:6:0;;::::1;::::0;510:40:::1;::::0;547:1;;510:40:::1;578:1;561:19:::0;;-1:-1:-1;;;;;;561:19:0::1;::::0;;448:140::o;23849:134::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23923:15:::1;:13;:15::i;:::-;23949:11;:26:::0;23849:134::o;25299:184::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25371:30:0;::::1;25363:85;;;;-1:-1:-1::0;;;25363:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25459:6;:16:::0;;-1:-1:-1;;;;;;25459:16:0::1;-1:-1:-1::0;;;;;25459:16:0;;;::::1;::::0;;;::::1;::::0;;25299:184::o;21200:21::-;;;-1:-1:-1;;;;;21200:21:0;;:::o;249:79::-;287:7;314:6;-1:-1:-1;;;;;314:6:0;249:79;:::o;20933:26::-;;;;:::o;22595:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24776:218::-;24835:7;24895:1;24872:20;:18;:20::i;:::-;:24;24862:6;:34;;24854:78;;;;;-1:-1:-1;;;24854:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24950:36;24967:10;24979:6;24950:16;:36::i;:::-;24943:43;24776:218;-1:-1:-1;;24776:218:0:o;24276:226::-;24343:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24368:23:0;::::1;24360:73;;;;-1:-1:-1::0;;;24360:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24451:43;24472:10;24484:9;24451:20;:43::i;27146:172::-:0;27206:8;:15;27189:14;27232:79;27260:6;27254:3;:12;27232:79;;;27290:9;27295:3;27290:4;:9::i;:::-;-1:-1:-1;27268:5:0;;27232:79;;;;27146:172;:::o;30506:715::-;30608:8;:15;30564:7;;;;-1:-1:-1;;30608:19:0;30600:27;;;30592:70;;;;;-1:-1:-1;;;30592:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30673:15;30699:20;;:::i;:::-;30722:8;30731:4;30722:14;;;;;;;;;;;;;;;;;30699:37;;;;;;;;30722:14;;;;;;;30699:37;;-1:-1:-1;;;;;30699:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30747:20:0;;:::i;:::-;-1:-1:-1;30770:14:0;;;;:8;:14;;;;;;;;30785:10;30770:26;;;;;;;;30747:49;;;;;;;;;;;;;;;;;;;;;;;;;30811:17;30807:306;;30845:19;30867:34;30880:4;:20;;;30867:12;:34::i;:::-;30845:56;;30916:17;30936:53;30973:15;;30936:32;30952:4;:15;;;30936:11;:15;;:32;;;;:::i;:53::-;30916:73;;31014:87;31026:74;31086:4;:13;;;31026:55;31067:4;:13;;;31027:34;31051:9;31027:4;:19;;;:23;;:34;;;;:::i;:::-;31026:40;;:55::i;:74::-;31014:7;;:11;:87::i;:::-;31004:97;;30807:306;;;31199:13;31190:7;;-1:-1:-1;31199:13:0;;-1:-1:-1;;30506:715:0;;;:::o;27326:741::-;27370:4;27387:21;27411:8;27420:4;27411:14;;;;;;;;;;;;;;;;;;27387:38;;27456:4;:20;;;27440:12;:36;27436:81;;27500:5;27493:12;;;;;27436:81;27527:19;27549:34;27562:4;:20;;;27549:12;:34::i;:::-;27527:56;;27613:1;27598:11;:16;27594:61;;27638:5;27631:12;;;;;;27594:61;27744:17;27764:53;27801:15;;27764:32;27780:4;:15;;;27764:11;:15;;:32;;;;:::i;:53::-;27828:3;;:34;;;-1:-1:-1;;;27828:34:0;;27845:4;27828:34;;;;;;;;;;;;27744:73;;-1:-1:-1;;;;;;27828:3:0;;;;:8;;:34;;;;;;;;;;;;;;;:3;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27957:19:0;;;;:34;;27981:9;27957:23;:34::i;:::-;27935:19;;;:56;-1:-1:-1;;28025:12:0;28002:20;;;;:35;-1:-1:-1;28055:4:0;27326:741;;;:::o;24510:118::-;24561:7;24588:32;24609:10;24588:20;:32::i;32197:1090::-;32303:7;;-1:-1:-1;;;;;32358:26:0;;;;;;;32354:900;;;-1:-1:-1;32412:12:0;32354:900;;;32459:7;;32446:55;;;-1:-1:-1;;;32446:55:0;;-1:-1:-1;;;;;32446:55:0;;;;;;;;;;;;;;;;32513:1;;32459:7;;;;32446:29;;:55;;;;;;;;;;;;;;;32459:7;32446:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32446:55:0;-1:-1:-1;;;;;32446:69:0;;32442:812;;32551:6;;32543:63;;;-1:-1:-1;;;32543:63:0;;-1:-1:-1;;;;;32543:63:0;;;;;;;;;;;;;;;;;;;;;;32551:6;;;;;32543:23;;:63;;;;;;;;;;;;;;32551:6;32543:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32543:63:0;;-1:-1:-1;32442:812:0;;;32639:14;32656:20;:18;:20::i;:::-;32639:37;;32696:13;32691:552;32723:6;32715:5;:14;32691:552;;;32759:20;32782:19;32795:5;32782:12;:19::i;:::-;32837:7;;32824:56;;;-1:-1:-1;;;32824:56:0;;-1:-1:-1;;;;;32824:56:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32837:7:0;;;;;32824:29;;:56;;;;;;;;;;;;;;32837:7;32824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32824:56:0;-1:-1:-1;;;;;32824:70:0;;;;;:144;;-1:-1:-1;32911:7:0;;32898:56;;;-1:-1:-1;;;32898:56:0;;-1:-1:-1;;;;;32898:56:0;;;;;;;;;;;;;;;;32966:1;;32911:7;;;;32898:29;;:56;;;;;;;;;;;;;;;32911:7;32898:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32898:56:0;-1:-1:-1;;;;;32898:70:0;;;32824:144;32820:408;;;33025:6;;33017:64;;;-1:-1:-1;;;33017:64:0;;-1:-1:-1;;;;;33017:64:0;;;;;;;;;;;;;;;;;;;;;;32993:21;;33025:6;;;;;33017:23;;:64;;;;;;;;;;;;;;;33025:6;33017:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33017:64:0;33123:6;;33115:65;;;-1:-1:-1;;;33115:65:0;;-1:-1:-1;;;;;33115:65:0;;;;;;;;;;;;;;;;;;;;;;33017:64;;-1:-1:-1;33123:6:0;;;33115:23;;:65;;;;;33017:64;;33115:65;;;;;;;;33123:6;33115:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33115:65:0;;-1:-1:-1;33203:5:0;;-1:-1:-1;;33203:5:0;32820:408;-1:-1:-1;32731:7:0;;32691:552;;;;32442:812;;33271:8;32197:1090;-1:-1:-1;;;;32197:1090:0:o;28106:1351::-;32122:6;;28211:4;;-1:-1:-1;;;;;32122:6:0;32108:10;:20;32100:69;;;;-1:-1:-1;;;32100:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28236:21:0;::::1;28228:84;;;;-1:-1:-1::0;;;28228:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28331:19:0;::::1;28323:80;;;;-1:-1:-1::0;;;28323:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28422:20:0;::::1;28414:82;;;;-1:-1:-1::0;;;28414:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28529:1;28513:12;:10;:12::i;:::-;:17;28509:62;;-1:-1:-1::0;28554:5:0::1;28547:12;;28509:62;28588:18;28600:5;28588:11;:18::i;:::-;28587:19;:43;;;;28611:19;28623:6;28611:11;:19::i;:::-;28610:20;28587:43;28583:88;;;-1:-1:-1::0;28654:5:0::1;28647:12;;28583:88;28711:7;::::0;28698:44:::1;::::0;;-1:-1:-1;;;28698:44:0;;-1:-1:-1;;;;;28698:44:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;28683:12:::1;::::0;28711:7;;;::::1;::::0;28698:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;;28711:7;28698:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28698:44:0;-1:-1:-1;;;;;28788:15:0;::::1;28755:21;28788:15:::0;;;:9:::1;28698:44;28788:15:::0;;;;;28779:8:::1;:25:::0;;28698:44;;-1:-1:-1;28755:21:0;;28779:25;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28887:9:::0;;28779:25;;-1:-1:-1;;;;;;28887:17:0;;::::1;:9:::0;::::1;:17;;::::0;:41:::1;;-1:-1:-1::0;28908:15:0::1;::::0;::::1;::::0;:20;28887:41:::1;28883:86;;;28952:5;28945:12;;;;;;28883:86;29028:11;::::0;28981:16:::1;::::0;29000:40:::1;::::0;29012:6;;29020;;-1:-1:-1;;;;;29028:11:0::1;29000;:40::i;:::-;28981:59;;29067:1;29055:8;:13;29051:58;;29092:5;29085:12;;;;;;;29051:58;-1:-1:-1::0;;;;;29126:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;29121:21:::1;::::0;:4:::1;:21::i;:::-;-1:-1:-1::0;29171:13:0::1;::::0;::::1;::::0;:27:::1;::::0;29189:8;29171:17:::1;:27::i;:::-;29155:13;::::0;::::1;:43:::0;29230:18:::1;::::0;::::1;::::0;:32:::1;::::0;29253:8;29230:22:::1;:32::i;:::-;29209:18;::::0;::::1;:53:::0;-1:-1:-1;;;;;29306:15:0;;::::1;29273:21;29306:15:::0;;;:9:::1;:15;::::0;;;;;;;;29297:25;;:8:::1;:25:::0;;;;;:34;;::::1;::::0;;;;;;29358:13;;:27:::1;::::0;29376:8;29358:17:::1;:27::i;:::-;29342:43:::0;;29415:12:::1;29396:16;::::0;;::::1;:31:::0;:16;28106:1351;-1:-1:-1;;;;;;;;28106:1351:0:o;25912:167::-;25970:7;25990:14;26007:18;26013:11;26007:5;:18::i;:::-;25990:35;;26043:28;26064:6;26059:1;:11;26043;;:15;;:28;;;;:::i;:::-;26036:35;25912:167;-1:-1:-1;;;25912:167:0:o;25812:92::-;25850:7;25877:19;25883:12;25877:5;:19::i;25002:100::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;25072:13:::1;:22:::0;25002:100::o;29532:915::-;29618:8;:15;29575;;;29644:691;29672:6;29666:3;:12;29644:691;;;29702:21;29726:8;29735:3;29726:13;;;;;;;;;;;;;;;;29778;;;:8;:13;;;;;;29792:10;29778:25;;;;;;;29822:13;;29726;;;;;;;;-1:-1:-1;29822:17:0;29818:506;;29860:9;29865:3;29860:4;:9::i;:::-;;29949:18;29970:57;30013:4;:13;;;29970:38;29994:4;:13;;;29970:4;:19;;;:23;;:38;;;;:::i;:57::-;30080:13;;30062;;;;29949:78;;-1:-1:-1;30062:32:0;;:13;:17;:32::i;:::-;30046:13;;;:48;30135:19;;;;:35;;30159:10;30135:23;:35::i;:::-;30113:19;;;:57;30205:1;30189:17;;30244:12;30225:16;;;:31;30285:23;:7;30297:10;30285:11;:23::i;:::-;30275:33;;29818:506;;-1:-1:-1;;29680:5:0;;29644:691;;;;30360:1;30349:7;:12;30345:51;;30378:7;;;;30345:51;30406:3;;:33;;;-1:-1:-1;;;30406:33:0;;30419:10;30406:33;;;;;;;;;;;;-1:-1:-1;;;;;30406:3:0;;;;:12;;:33;;;;;;;;;;;;;;;:3;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29532:915:0;:::o;25110:181::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25184:23:0;::::1;25176:78;;;;-1:-1:-1::0;;;25176:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25265:6;:18:::0;;-1:-1:-1;;;;;;25265:18:0::1;-1:-1:-1::0;;;;;25265:18:0;;;::::1;::::0;;;::::1;::::0;;25110:181::o;21303:27::-;;;-1:-1:-1;;;;;21303:27:0;;:::o;24636:132::-;24694:4;24718:42;24741:10;24753:6;24718:22;:42::i;26227:831::-;26296:7;26344:12;26324:16;:32;;26316:98;;;;-1:-1:-1;;;26316:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26425:19;26459:9;26471:23;26477:16;26471:5;:23::i;:::-;26459:35;;26505:9;26517:19;26523:12;26517:5;:19::i;:::-;26505:31;;26583:335;26594:1;26590;:5;26583:335;;;26724:10;;26705:13;;26612:3;;;;;26687:9;;26699:36;;:20;;26612:3;;26699:5;:20::i;:36::-;26687:48;;26814:57;26830:40;26860:9;26867:1;26860:6;:9::i;:::-;26831:23;:1;26837:16;26831:5;:23::i;26830:40::-;26814:11;;:15;:57::i;:::-;26905:1;;-1:-1:-1;26800:71:0;-1:-1:-1;26583:335:0;;;26942:79;26958:62;26999:20;27006:12;26999:6;:20::i;:::-;26959:34;:12;26976:16;26959;:34::i;26958:62::-;26942:11;;:15;:79::i;:::-;26928:93;26227:831;-1:-1:-1;;;;;26227:831:0:o;833:109::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;906:28:::1;925:8;906:18;:28::i;:::-;833:109:::0;:::o;24045:223::-;24112:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24137:23:0;::::1;24129:73;;;;-1:-1:-1::0;;;24129:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24220:40;24238:10;24250:9;24220:17;:40::i;21251:21::-:0;;;-1:-1:-1;;;;;21251:21:0;;:::o;22773:659::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22880:19:0;::::1;22872:57;;;::::0;;-1:-1:-1;;;22872:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22944:11;22940:59;;;22972:15;:13;:15::i;:::-;23009:23;23050:10;;23035:12;:25;:53;;23078:10;;23035:53;;;23063:12;23035:53;23117:15;::::0;23009:79;;-1:-1:-1;23117:32:0::1;::::0;23137:11;23117:19:::1;:32::i;:::-;23099:15;:50:::0;;;23174:203:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;23174:203:0;;::::1;::::0;;-1:-1:-1;23174:203:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;23160:8:::1;:218:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;23160:218:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23408:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;23389:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;23408;::::1;23389:35:::0;;;-1:-1:-1;;;22773:659:0:o;1622:136::-;1680:7;1707:43;1711:1;1714;1707:43;;;;;;;;;;;;;;;;;:3;:43::i;2445:132::-;2503:7;2530:39;2534:1;2537;2530:39;;;;;;;;;;;;;;;;;:3;:39::i;1433:181::-;1491:7;1523:5;;;1547:6;;;;1539:46;;;;;-1:-1:-1;;;1539:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1966:471;2024:7;2269:6;2265:47;;-1:-1:-1;2299:1:0;2292:8;;2265:47;2336:5;;;2340:1;2336;:5;:1;2360:5;;;;;:10;2352:56;;;;-1:-1:-1;;;2352:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12591:149;12665:7;12708:22;12712:3;12724:5;12708:3;:22::i;11641:149::-;11714:4;11738:44;11746:3;-1:-1:-1;;;;;11766:14:0;;11738:7;:44::i;12120:117::-;12183:7;12210:19;12218:3;12210:7;:19::i;11876:158::-;11956:4;11980:46;11990:3;-1:-1:-1;;;;;12010:14:0;;11980:9;:46::i;596:229::-;-1:-1:-1;;;;;670:22:0;;662:73;;;;-1:-1:-1;;;662:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;772:6;;;751:38;;-1:-1:-1;;;;;751:38:0;;;;772:6;;;751:38;;;800:6;:17;;-1:-1:-1;;;;;;800:17:0;-1:-1:-1;;;;;800:17:0;;;;;;;;;;596:229::o;11322:143::-;11392:4;11416:41;11421:3;-1:-1:-1;;;;;11441:14:0;;11416:4;:41::i;1766:192::-;1852:7;1888:12;1880:6;;;;1872:29;;;;-1:-1:-1;;;1872:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1924:5:0;;;1766:192::o;2585:345::-;2671:7;2773:12;2766:5;2758:28;;;;-1:-1:-1;;;2758:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2797:9;2813:1;2809;:5;;;;;;;2585:345;-1:-1:-1;;;;;2585:345:0:o;9264:204::-;9359:18;;9331:7;;9359:26;-1:-1:-1;9351:73:0;;;;-1:-1:-1;;;9351:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9442:3;:11;;9454:5;9442:18;;;;;;;;;;;;;;;;9435:25;;9264:204;;;;:::o;6944:1556::-;7010:4;7149:19;;;:12;;;:19;;;;;;7185:15;;7181:1312;;7619:18;;-1:-1:-1;;7570:14:0;;;;7619:22;;;;7546:21;;7619:3;;:22;;7906;;;;;;;;;;;;;;7886:42;;8052:9;8023:3;:11;;8035:13;8023:26;;;;;;;;;;;;;;;;;;;:38;;;;8129:23;;;8171:1;8129:12;;;:23;;;;;;8155:17;;;8129:43;;8294:17;;8129:3;;8294:17;;;;;;;;;;;;;;;;;;;;;;8389:3;:12;;:19;8402:5;8389:19;;;;;;;;;;;8382:26;;;8432:4;8425:11;;;;;;;;7181:1312;8476:5;8469:12;;;;;8801:109;8884:18;;8801:109::o;8586:129::-;8659:4;8683:19;;;:12;;;;;:19;;;;;;:24;;;8586:129::o;6354:414::-;6417:4;6439:21;6449:3;6454:5;6439:9;:21::i;:::-;6434:327;;-1:-1:-1;6477:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6660:18;;6638:19;;;:12;;;:19;;;;;;:40;;;;6693:11;;6434:327;-1:-1:-1;6744:5:0;6737:12;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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