Contract 0xfe6a4996cbdb33f95c8789f84bf91975e3a82484

Contract Overview

Balance:
0 HT

HT Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3466daed92d805485e33b277d9796ec39cecc2b21c2f68b1223062f8d79ae140Send Buy Order107133912021-12-09 7:16:457 secs ago0x120d4adddd1c3b7956ab6ce6f5ae728b3c7de185 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00363374752.5
0x3e396889aaebe8265f7374027e5506f94d540a80f07c847211287fade268dd25Send Sell Order107133892021-12-09 7:16:3913 secs ago0x49e18d44b2d399f0abefc788942c721e732d86ff IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.01174822752.5
0xd4a4c2f139074916b46ed762850e166a848bb6d2196745b89ce3442006e6bd53Send Buy Order107133552021-12-09 7:14:571 min ago0x120d4adddd1c3b7956ab6ce6f5ae728b3c7de185 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00407468752.5
0x2d6aafb39497641e9bc33d4ecdcb0d0f4b5e13b4d6ec3f683268118be4a16253Send Buy Order107133542021-12-09 7:14:541 min ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00417190252.5
0xe882b23ef76d0d517045b9c6a4f32394e388430819f4b9d94e3099dadbb7271fSend Sell Order107133472021-12-09 7:14:332 mins ago0x9f80c11d125c7eb6b2f75d49076ef717c19e3d87 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.0012084252.5
0xf032eaaa09c549f5ebd6b69a4323fd10f98bc8c5803a5decfd2be745b5403bbeSend Sell Order107133412021-12-09 7:14:152 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00454988252.5
0xdc8cef9f3e912f762b2970c791b8966f06a2bb1ea199501c316c348be7560cfdSend Buy Order107133272021-12-09 7:13:333 mins ago0xbb841319fa9528291d5cf2ba98e9f3540155c73f IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00112746252.5
0xe6aeb865fd3f63a1e4266ec90667bf32f4c4b5681a1aaa243f35e873fb5ffc0cCancel Order107133232021-12-09 7:13:213 mins ago0x112b6171dc22989cb75a38b544228352afd79715 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00063227252.5
0x855e2b13b51f139c07ba03adad76b8a83750c1911909dfc9b8acc640184a0b88Send Buy Order107133162021-12-09 7:13:003 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00464656752.5
0xd2d8f00bc0393679e95b94a393fbc5cbca65c1f7fe7f2e4cf13d8627987d1e14Send Sell Order107133062021-12-09 7:12:304 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00122296252.5
0xd31ffd5d21588c2f0d27db738c0a55dcb32ec722a171952603d91a88ada9769aCancel Order107132862021-12-09 7:11:305 mins ago0x9f80c11d125c7eb6b2f75d49076ef717c19e3d87 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.0022488152.5
0x9f9b04de2194e62b3f732020e0212eff3682746c4d65c6d948ff58cb8b31077aCancel Order107132572021-12-09 7:10:036 mins ago0x2ff201fdcc4a52cea101491b1c3981eb5f3d9833 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.005503692.5
0x51ccc068b4c9be3f262cc497fe543602b7376c84bae6000fe5efc7a1504aa20dCancel Order107132422021-12-09 7:09:187 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00090971252.5
0x62a38306ee0bea38a403debb7b5745d4d1ca0962ba475841ab32edb4811bedfbSend Sell Order107132332021-12-09 7:08:518 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00416516752.5
0xd15fdd232ce13a0d7430afeb036d97645d35cf048e4bd44ebdaa422a7ff36619Send Sell Order107132292021-12-09 7:08:398 mins ago0x240a0d9f99e677f684e60a5d3139e013d1682bae IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.0042781552.5
0x819d07a494362cb33a5b81aa6b56630fbbad36c96ec877bba828a4ed371842deSend Buy Order107132282021-12-09 7:08:368 mins ago0xd2074dad58dc55412218b8717201d0c26e0d4422 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00123504752.5
0x9b3c6a1dd977fa6c15917ef76ad257a69b6625ceac9b6f43c7109069de358fbdSend Buy Order107131942021-12-09 7:06:549 mins ago0x3d0436a1be2793488fac9c82f87e4d55f49e9204 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00126325752.5
0xbbf37bdd38aee483346085f376b92e91bd6e7e907ac8ed78aca69eae022749e9Send Buy Order107131932021-12-09 7:06:5110 mins ago0x2ff201fdcc4a52cea101491b1c3981eb5f3d9833 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00108471252.5
0x9c7e5c1146e810e35a1b88a107c10178935999af1f7e0d1856dba3ecedc41604Cancel Order107131892021-12-09 7:06:3910 mins ago0x240a0d9f99e677f684e60a5d3139e013d1682bae IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00097984752.5
0x320d72415f5aab48d9edc4a101dc5f98140c5dbc3bb2d9a32c39c676dfb8e8c5Send Buy Order107131742021-12-09 7:05:5410 mins ago0x3d0436a1be2793488fac9c82f87e4d55f49e9204 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.001224712.5
0xcb00e67f37b5e47901d074dfaeef65a9cbc6f43a430168cf509903e0aa23e966Send Sell Order107131712021-12-09 7:05:4511 mins ago0x240a0d9f99e677f684e60a5d3139e013d1682bae IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00853281752.5
0x5b32d28383a1b0e6c1b861d45fa869749d330e5a2fcef7cf2d523768f2af5b80Send Buy Order107131592021-12-09 7:05:0911 mins ago0x4c07671b8af003295db9119b22398e89dde0a65b IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.0033462852.5
0x936a244b6d4dd31a118d9365f692e94d6670f6db9441993c0130a65ddbb69756Send Buy Order107131412021-12-09 7:04:1512 mins ago0x4c07671b8af003295db9119b22398e89dde0a65b IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.003673622.5
0xdf61835e9870bfbbca9917bce2bea52013f4e40d5ed86a9685d9f47b2d5d6f71Send Sell Order107131282021-12-09 7:03:3613 mins ago0x2ff201fdcc4a52cea101491b1c3981eb5f3d9833 IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00122296252.5
0x0206e7d0cfbe9f0f3f15327a97b8f77d52b65d6c593d09a636f6c455cf13c77bSend Buy Order107131272021-12-09 7:03:3313 mins ago0x4c07671b8af003295db9119b22398e89dde0a65b IN 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840 HT0.00832652752.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x47d3a2381effdf36efa4946f5838b77b99931f0e05131130f4dc3d9e7d96ccc6107129412021-12-09 6:54:1522 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xf80fb78eae2d2ece092c48d7ecc28d2578a4327203562f1c70a4271e97adfd07107129342021-12-09 6:53:5422 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xf8b68531e1b1b91e04f8051e57ace67631b10339bfdd372e871a9bcfc92646b7107129162021-12-09 6:53:0023 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xca13056cb588f5d4e4beb297817e187aa82092aa9e46ece8c6ad11f99829f332107129052021-12-09 6:52:2724 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xed84a7f3d8ecb0d2933b8a15ac6d186c54d39f3275b144d6d4f5dc35f1c8cf58107128962021-12-09 6:52:0024 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x1456719ef549ed1301d6974780a0100e7d1fd63f083dd3bed28566900360d184107128882021-12-09 6:51:3625 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x3fb1edd86f1d89176eb86b15d771e0e0d86efbf0ef4c5e973285146c14b53894107128772021-12-09 6:51:0325 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xc67b889724a2dedc5a7be39d35ca2d648c60528a8bf32af898ce433d6f8aea3b107128702021-12-09 6:50:4226 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xe985161cd01c309b5cbf8d3c617b25192c8150f7b5acbf17f34b80220148f6a7107128652021-12-09 6:50:2726 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x90f05e5b2e5dc3006398a3ed640bed31f7bfa9ad62d7fe175285e2c4c1668439107128562021-12-09 6:50:0026 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xe73370085d683cb53700992c719942a76ee3da660215f5f953de50b68dd81aa2107128552021-12-09 6:49:5726 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x30ffa3e0f1715914c009c22d9767f7ebb0c6f27449362bfa4f28da054e62147b107128532021-12-09 6:49:5127 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x36d524d34eec5c810701b216f63f5cf6ac4f46ed1486c69ded1dd23072c2791e107128472021-12-09 6:49:3327 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x73ecbddada1b5684809c243c1d2c00386f241a2a142d9f8088f2f1c06efdaa74107128082021-12-09 6:47:3629 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x37ffff77e93b6feb30c6da40e234bcf65a25f5439c5d8ccbb474cb82ba054eea107126002021-12-09 6:37:1239 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x7773c935819c166dca65ee56c3c44ac17b394c4c24a6378305c9386fc6384a01107125952021-12-09 6:36:5739 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x05bdb69f83d8a7e8817d7f8122d408b9903b1d1afe339cb79268cc8aee0d2fa0107125922021-12-09 6:36:4840 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xc77a232e6f426f23b8e5aebe481e3b020c0dabe29c222729bfff98075772d07d107125862021-12-09 6:36:3040 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xb87e59706a4160641a4dff26a2878e4a59fdd433e7e98add940540482508cff6107120532021-12-09 6:09:511 hr 7 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a2022581.9 HT
0x75f3e0435a00b92a590bd38a2089d06281bbd63867f690491e70439b3a221e46107120292021-12-09 6:08:391 hr 8 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a2022581.9 HT
0xeb5e369f01996b32c2a7a23d26481b55408baad5fe4f2405ed439f3ffa00dfb4107117982021-12-09 5:57:061 hr 19 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0xb6df14ab62d90eee49fda1282c2e4f4edf28ad64a37ac4b9cade2041928f71dc107117962021-12-09 5:57:001 hr 19 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x91ec90471476207570abbfdc915ed2642155324b6581f6506cbb72b3d85c847d107117902021-12-09 5:56:421 hr 20 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x8bcc8ab42b877afc4ecc845ead7a7b45a8484bdbc87813e952b72e4c1ae9e7ef107117902021-12-09 5:56:421 hr 20 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
0x82e0aefa3470cb12a228cd4a89c12199a27a2c55d4bad1de1364128f6f175fdf107117792021-12-09 5:56:091 hr 20 mins ago 0xfe6a4996cbdb33f95c8789f84bf91975e3a824840xecf5152c63b2389a19f7468e4d8413796a202258999 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TDEX

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-11-23
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.0 <0.9.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @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);
}

library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value : value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

library SafeMath {

    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) {
        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 max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) return a;
        return b;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC20 {

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
}


library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface OrderInterface {

    function getPrice(address _tokenContract) external view returns (uint256 price);

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId);

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId);

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length);

    function getBuyOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list);

    function getBuyOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list);

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list);

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length);

    function getSellOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list);

    function getSellOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list);

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list);

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList);

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length);

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length);

    function getOrderUnmatchedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list);

    function getOrderFinishedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list);
}

interface DexInterface {

    function createOrder(address _tokenContract, address _sender, uint256 _price, uint256 _token, uint256 _usdt, uint8 _type, uint256 price_magnification) external returns (uint256 _orderId);

    function removeOrder(address _tokenContract, uint256 _orderId, address _sender) external returns (bool _flag);

    function handleBuyMatchOrder(address _tokenContract, uint256 _orderId, uint price_magnification) external;

    function handleSellMatchOrder(address _tokenContract, uint256 _orderId, uint price_magnification) external;

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    );

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number);

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number);

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    );

    function orderManager() external view returns (address);

    function books() external view returns (address);

    function mining() external view returns (address);
}

struct Token {
    string symbol;
    string name;
    address tokenContract;
    uint decimals;
    uint price_decimals;
}

interface TokenInterface {

    function getToken(address _tokenContract) external view returns (Token memory token);

    function getTokenAddressListLength() external view returns (uint length);

    function getTokenAddressList50(uint index) external view returns (address[50] memory list);
}

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract TDEX {

    Token private USDT = Token({
        symbol:"USDTHECO",
        name:"Heco-Peg USDTHECO Token",
        tokenContract:0xa71EdC38d189767582C38A3145b5873052c3e47a,
        decimals:18,
        price_decimals:0
    });

    Token private ETH = Token({
        symbol:"HT",
        name:"HT",
        tokenContract:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,
        decimals:18,
        price_decimals:8
    });

    address private _owner;

    address private _dexInterface = address(0);

    address private _tokenManager = address(0);

    constructor () {
        _owner = msg.sender;
    }

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

    function mining() external view returns (address)
    {
        return DexInterface(_dexInterface).mining();
    }

    function init(address __dexInterface, address ___tokenManager) external onlyOwner
    {
        // require(_dexInterface == address(0), "Can only be assigned once");
        _dexInterface = __dexInterface;
        _tokenManager = ___tokenManager;
    }

    function getToken(address _tokenContract) external view returns (
        string memory symbol,
        string memory name,
        address tokenContract,
        uint decimals,
        uint price_decimals)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);

        symbol = token.symbol;
        name = token.name;
        tokenContract = token.tokenContract;
        decimals = token.decimals;
        price_decimals = token.price_decimals;
    }

    function getTokenAddressListLength() external view returns (uint length)
    {
        return TokenInterface(_tokenManager).getTokenAddressListLength();
    }

    function getTokenAddressList50(uint index) external view returns (address[50] memory list)
    {
        return TokenInterface(_tokenManager).getTokenAddressList50(index);
    }

    /**********************************************************/

    function sendBuyOrder(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != ETH.tokenContract, "Does not support ETH");
        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);

        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");
        
        uint256 balance = IERC20(USDT.tokenContract).balanceOf(msg.sender);
        require(balance > _usdt_amount, "Sorry, your credit is running low");

        SafeERC20.safeTransferFrom(IERC20(USDT.tokenContract), msg.sender, _dexInterface, _usdt_amount);

        orderId = DexInterface(_dexInterface).createOrder(_tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 0, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleBuyMatchOrder(_tokenContract, orderId, price_magnification);
        }

        return orderId;
    }

    function sendSellOrder(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != ETH.tokenContract, "Does not support ETH");
        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);
        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");

        uint256 balance = IERC20(_tokenContract).balanceOf(msg.sender);
        require(balance > _token_amount, "Sorry, your credit is running low");

        SafeERC20.safeTransferFrom(IERC20(_tokenContract), msg.sender, _dexInterface, _token_amount);

        orderId = DexInterface(_dexInterface).createOrder(_tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 1, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleSellMatchOrder(_tokenContract, orderId, price_magnification);
        }

        return orderId;
    }
    
    function sendBuyOrderETH(uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_price > 0, "No, no price");
        require(_token_amount > 0, "The quantity cannot be 0");

        uint256 price_magnification = 10 ** ETH.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);

        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");
        
        uint256 balance = IERC20(USDT.tokenContract).balanceOf(msg.sender);
        require(balance > _usdt_amount, "Sorry, your credit is running low");

        SafeERC20.safeTransferFrom(IERC20(USDT.tokenContract), msg.sender, _dexInterface, _usdt_amount);

        orderId = DexInterface(_dexInterface).createOrder(ETH.tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 0, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleBuyMatchOrder(ETH.tokenContract, orderId, price_magnification);
        }

        return orderId;
    }

    function sendSellOrderETH(uint256 _price) external payable returns (uint256 orderId)
    {
        require(_price > 0, "No, no price");
        require(msg.value > 0, "The quantity cannot be 0");

        uint256 _token_amount = msg.value;

        uint256 price_magnification = 10 ** ETH.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);
        require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT");

        TransferHelper.safeTransferETH(_dexInterface, _token_amount);
        
        orderId = DexInterface(_dexInterface).createOrder(ETH.tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 1, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleSellMatchOrder(ETH.tokenContract, orderId, price_magnification);
        }

        return orderId;
    }

    function cancelOrder(address _tokenContract, uint256 _orderId) external returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, msg.sender);
    }

    function cancelOrderRoot(address _tokenContract, uint256 _orderId, address _sender) external onlyOwner returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, _sender);
    }

    /**********************************************************/

    function balanceOf(address _tokenContract, address _sender) external view returns (uint256)
    {
        uint256 balance;
        if (_tokenContract == ETH.tokenContract)
        {
            balance = _sender.balance;
        }
        else
        {
            balance = IERC20(_tokenContract).balanceOf(_sender);
        }
        return balance;
    }

    function getPrice(address _tokenContract) external view returns (uint256 price)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getPrice(_tokenContract);
    }

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getLastMatchId(_tokenContract);
    }

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getLastOrderId(_tokenContract);
    }

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    )
    {
        return DexInterface(_dexInterface).getOrder(_tokenContract, _orderId);
    }

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceListLength(_tokenContract);
    }

    function getBuyOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceListCountDesc50(_tokenContract, index);
    }

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceOrderIdList(_tokenContract, _price);
    }


    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceListLength(_tokenContract);
    }

    function getSellOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceListCountDesc50(_tokenContract, index);
    }

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return DexInterface(_dexInterface).getBuyOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return DexInterface(_dexInterface).getSellOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    )
    {
        return DexInterface(_dexInterface).getMatch(_tokenContract, _matchId);
    }

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderMatching(_tokenContract, _orderId);
    }

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderUnmatchedListLength(_tokenContract, _sender);
    }

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderFinishedListLength(_tokenContract, _sender);
    }

    function getOrderUnmatchedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderUnmatchedListValuesCountDesc10(_tokenContract, _sender, index);
    }

    function getOrderFinishedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderFinishedListValuesCountDesc10(_tokenContract, _sender, index);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"cancelOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"cancelOrderRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getBuyOrderPriceListCountDesc50","outputs":[{"internalType":"uint256[50]","name":"list","type":"uint256[50]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastMatchId","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastOrderId","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_matchId","type":"uint256"}],"name":"getMatch","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint256","name":"buyOrderId","type":"uint256"},{"internalType":"uint256","name":"sellOrderId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenDeal","type":"uint256"},{"internalType":"uint256","name":"usdtDeal","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrder","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenTotal","type":"uint256"},{"internalType":"uint256","name":"tokenSurplus","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtSurplus","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"createnTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"orderType","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderFinishedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getOrderFinishedListValuesCountDesc10","outputs":[{"internalType":"uint256[10]","name":"list","type":"uint256[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrderMatching","outputs":[{"internalType":"uint256[]","name":"matchingList","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderUnmatchedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getOrderUnmatchedListValuesCountDesc10","outputs":[{"internalType":"uint256[10]","name":"list","type":"uint256[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSellOrderPriceListCountDesc50","outputs":[{"internalType":"uint256[50]","name":"list","type":"uint256[50]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getToken","outputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"price_decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTokenAddressList50","outputs":[{"internalType":"address[50]","name":"list","type":"address[50]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddressListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__dexInterface","type":"address"},{"internalType":"address","name":"___tokenManager","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendBuyOrder","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendBuyOrderETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendSellOrder","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"sendSellOrderETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"payable","type":"function"}]

60806040526040518060a001604052806040518060400160405280600881526020017f555344544845434f00000000000000000000000000000000000000000000000081525081526020016040518060400160405280601781526020017f4865636f2d50656720555344544845434f20546f6b656e000000000000000000815250815260200173a71edc38d189767582c38a3145b5873052c3e47a73ffffffffffffffffffffffffffffffffffffffff168152602001601281526020016000815250600080820151816000019080519060200190620000e092919062000390565b506020820151816001019080519060200190620000ff92919062000390565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015550506040518060a001604052806040518060400160405280600281526020017f485400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f4854000000000000000000000000000000000000000000000000000000000000815250815260200173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168152602001601281526020016008815250600560008201518160000190805190602001906200023a92919062000390565b5060208201518160010190805190602001906200025992919062000390565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015550506000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200034857600080fd5b5033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004a5565b8280546200039e906200046f565b90600052602060002090601f016020900481019282620003c257600085556200040e565b82601f10620003dd57805160ff19168380011785556200040e565b828001600101855582156200040e579182015b828111156200040d578251825591602001919060010190620003f0565b5b5090506200041d919062000421565b5090565b5b808211156200043c57600081600090555060010162000422565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200048857607f821691505b602082108114156200049f576200049e62000440565b5b50919050565b61598d80620004b56000396000f3fe6080604052600436106101cd5760003560e01c806386c4fc60116100f7578063c7ae35d311610095578063f51022e011610064578063f51022e0146107e7578063f7888aec14610824578063f79fde6714610861578063fd8ff72a1461088c576101cd565b8063c7ae35d3146106fd578063e501d5f41461073a578063edb2584114610777578063f09a4016146107be576101cd565b8063a5f46ad0116100d1578063a5f46ad014610616578063b424bd8314610646578063bdda1d1a14610683578063c27b6f29146106c0576101cd565b806386c4fc601461055f57806394f27d081461059c57806395265e6c146105d9576101cd565b806350ab38711161016f578063662fac391161013e578063662fac391461047d5780636a206137146104a85780636c09a91f146104e55780637c41fb9b14610522576101cd565b806350ab38711461037d57806359425134146103c257806359770438146103ff5780635f8e651e14610440576101cd565b806321dd4946116101ab57806321dd49461461028957806330c62441146102c65780633a271e351461030357806341976e0914610340576101cd565b806305a7b041146101d2578063083c63511461020f578063161b71fa1461024c575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190613d47565b6108c9565b6040516102069190613d8d565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190613d47565b6109fa565b6040516102439190613d8d565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e9190613dd4565b610b2b565b6040516102809190613ed2565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613ef4565b610c64565b6040516102bd9190613d8d565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613f47565b611168565b6040516102fa919061401f565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613dd4565b611223565b60405161033791906140bf565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613d47565b61135e565b6040516103749190613d8d565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613dd4565b61148f565b6040516103b9999897969594939291906140db565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613d47565b61156a565b6040516103f69190613d8d565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190613d47565b61169b565b604051610437959493929190614210565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190614271565b611783565b6040516104749190613d8d565b60405180910390f35b34801561048957600080fd5b506104926118b7565b60405161049f91906142b1565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613dd4565b61195e565b6040516104dc91906142e7565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614302565b611b14565b6040516105199190613d8d565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614342565b611f1a565b60405161055691906142e7565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614395565b612162565b604051610593919061446c565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190613dd4565b6122a0565b6040516105d09190613ed2565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613dd4565b6123d9565b60405161060d9190613d8d565b60405180910390f35b610630600480360381019061062b9190613f47565b612490565b60405161063d9190613d8d565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190613d47565b612780565b60405161067a9190613d8d565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613dd4565b6128b1565b6040516106b79190613ed2565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190614271565b6129ea565b6040516106f49190613d8d565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f9190614395565b612b1e565b604051610731919061446c565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613dd4565b612c5c565b60405161076e9190613d8d565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613dd4565b612d13565b6040516107b59b9a999897969594939291906144a4565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614271565b612df8565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613dd4565b612f0e565b60405161081b91906140bf565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190614271565b613049565b6040516108589190613d8d565b60405180910390f35b34801561086d57600080fd5b5061087661315a565b6040516108839190613d8d565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613ef4565b613201565b6040516108c09190613d8d565b60405180910390f35b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561093357600080fd5b505afa158015610947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096b9190614564565b73ffffffffffffffffffffffffffffffffffffffff166305a7b041836040518263ffffffff1660e01b81526004016109a391906142b1565b60206040518083038186803b1580156109bb57600080fd5b505afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f391906145a6565b9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c9190614564565b73ffffffffffffffffffffffffffffffffffffffff1663083c6351836040518263ffffffff1660e01b8152600401610ad491906142b1565b60206040518083038186803b158015610aec57600080fd5b505afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906145a6565b9050919050565b6060600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9557600080fd5b505afa158015610ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcd9190614564565b73ffffffffffffffffffffffffffffffffffffffff1663161b71fa84846040518363ffffffff1660e01b8152600401610c079291906145d3565b60006040518083038186803b158015610c1f57600080fd5b505afa158015610c33573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c5c9190614744565b905092915050565b6000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906147d9565b60405180910390fd5b60008211610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490614845565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b8152600401610d9a91906142b1565b60006040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610def91906149d9565b90506000816060015111610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90614a94565b60405180910390fd5b60008411610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290614b00565b60405180910390fd5b60008160800151600a610e8e9190614c82565b90506000610ea5610e9f868861374e565b836137c9565b9050600060030154600a610eb99190614c82565b620186a0610ec79190614ccd565b811115610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090614d99565b60405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f4491906142b1565b60206040518083038186803b158015610f5c57600080fd5b505afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9491906145a6565b9050858111610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614e2b565b60405180910390fd5b6110068833600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689613813565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1789338a8a8760018a6040518863ffffffff1660e01b815260040161106e9796959493929190614e90565b602060405180830381600087803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c091906145a6565b9450600085111561115d57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332e668ab8987866040518463ffffffff1660e01b815260040161112a93929190614eff565b600060405180830381600087803b15801561114457600080fd5b505af1158015611158573d6000803e3d6000fd5b505050505b505050509392505050565b611170613c6c565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330c62441836040518263ffffffff1660e01b81526004016111cb9190613d8d565b6106406040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190614fe7565b9050919050565b61122b613c8f565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190614564565b73ffffffffffffffffffffffffffffffffffffffff16633a271e3584846040518363ffffffff1660e01b81526004016113059291906145d3565b6106406040518083038186803b15801561131e57600080fd5b505afa158015611332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135691906150c6565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190614564565b73ffffffffffffffffffffffffffffffffffffffff166341976e09836040518263ffffffff1660e01b815260040161143891906142b1565b60206040518083038186803b15801561145057600080fd5b505afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148891906145a6565b9050919050565b6000806000806000806000806000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350ab38718c8c6040518363ffffffff1660e01b81526004016114fa9291906145d3565b6101206040518083038186803b15801561151357600080fd5b505afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b91906150f4565b9850985098509850985098509850985098509295985092959850929598565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d457600080fd5b505afa1580156115e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160c9190614564565b73ffffffffffffffffffffffffffffffffffffffff166359425134836040518263ffffffff1660e01b815260040161164491906142b1565b60206040518083038186803b15801561165c57600080fd5b505afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169491906145a6565b9050919050565b606080600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438886040518263ffffffff1660e01b81526004016116ff91906142b1565b60006040518083038186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061175491906149d9565b905080600001519550806020015194508060400151935080606001519250806080015191505091939590929450565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ed57600080fd5b505afa158015611801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118259190614564565b73ffffffffffffffffffffffffffffffffffffffff16635f8e651e84846040518363ffffffff1660e01b815260040161185f9291906151be565b60206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af91906145a6565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663662fac396040518163ffffffff1660e01b815260040160206040518083038186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119599190614564565b905090565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438856040518263ffffffff1660e01b81526004016119bc91906142b1565b60006040518083038186803b1580156119d457600080fd5b505afa1580156119e8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a1191906149d9565b90506000816060015111611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190614a94565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8585336040518463ffffffff1660e01b8152600401611ab9939291906151e7565b602060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b919061524a565b91505092915050565b6000808311611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90614b00565b60405180910390fd5b60008211611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614845565b60405180910390fd5b6000600560040154600a611baf9190614c82565b90506000611bc6611bc0858761374e565b836137c9565b9050600060030154600a611bda9190614c82565b620186a0611be89190614ccd565b811115611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190614d99565b60405180910390fd5b60008060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c8991906142b1565b60206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd991906145a6565b9050818111611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614e2b565b60405180910390fd5b611d70600060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685613813565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b17600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163389898760008a6040518863ffffffff1660e01b8152600401611dfd97969594939291906152b2565b602060405180830381600087803b158015611e1757600080fd5b505af1158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f91906145a6565b93506000841115611f1157600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d6a033f600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686866040518463ffffffff1660e01b8152600401611ede93929190614eff565b600060405180830381600087803b158015611ef857600080fd5b505af1158015611f0c573d6000803e3d6000fd5b505050505b50505092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061536d565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b815260040161200991906142b1565b60006040518083038186803b15801561202157600080fd5b505afa158015612035573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061205e91906149d9565b905060008160600151116120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e90614a94565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8686866040518463ffffffff1660e01b8152600401612106939291906151e7565b602060405180830381600087803b15801561212057600080fd5b505af1158015612134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612158919061524a565b9150509392505050565b61216a613cb2565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d257600080fd5b505afa1580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190614564565b73ffffffffffffffffffffffffffffffffffffffff166386c4fc608585856040518463ffffffff1660e01b81526004016122469392919061538d565b6101406040518083038186803b15801561225f57600080fd5b505afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190615475565b90509392505050565b6060600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561230a57600080fd5b505afa15801561231e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123429190614564565b73ffffffffffffffffffffffffffffffffffffffff166394f27d0884846040518363ffffffff1660e01b815260040161237c9291906145d3565b60006040518083038186803b15801561239457600080fd5b505afa1580156123a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123d19190614744565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395265e6c84846040518363ffffffff1660e01b81526004016124389291906145d3565b60206040518083038186803b15801561245057600080fd5b505afa158015612464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248891906145a6565b905092915050565b60008082116124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614b00565b60405180910390fd5b60003411612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614845565b60405180910390fd5b60003490506000600560040154600a6125309190614c82565b90506000612547612541848761374e565b836137c9565b9050600060030154600a61255b9190614c82565b620186a06125699190614ccd565b8111156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614d99565b60405180910390fd5b6125d7600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461389c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b17600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338887866001896040518863ffffffff1660e01b81526004016126649796959493929190614e90565b602060405180830381600087803b15801561267e57600080fd5b505af1158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b691906145a6565b9350600084111561277857600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332e668ab600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686856040518463ffffffff1660e01b815260040161274593929190614eff565b600060405180830381600087803b15801561275f57600080fd5b505af1158015612773573d6000803e3d6000fd5b505050505b505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ea57600080fd5b505afa1580156127fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128229190614564565b73ffffffffffffffffffffffffffffffffffffffff1663b424bd83836040518263ffffffff1660e01b815260040161285a91906142b1565b60206040518083038186803b15801561287257600080fd5b505afa158015612886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128aa91906145a6565b9050919050565b6060600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561291b57600080fd5b505afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190614564565b73ffffffffffffffffffffffffffffffffffffffff1663bdda1d1a84846040518363ffffffff1660e01b815260040161298d9291906145d3565b60006040518083038186803b1580156129a557600080fd5b505afa1580156129b9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129e29190614744565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a5457600080fd5b505afa158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c9190614564565b73ffffffffffffffffffffffffffffffffffffffff1663c27b6f2984846040518363ffffffff1660e01b8152600401612ac69291906151be565b60206040518083038186803b158015612ade57600080fd5b505afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1691906145a6565b905092915050565b612b26613cb2565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8e57600080fd5b505afa158015612ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc69190614564565b73ffffffffffffffffffffffffffffffffffffffff1663c7ae35d38585856040518463ffffffff1660e01b8152600401612c029392919061538d565b6101406040518083038186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c539190615475565b90509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e501d5f484846040518363ffffffff1660e01b8152600401612cbb9291906145d3565b60206040518083038186803b158015612cd357600080fd5b505afa158015612ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0b91906145a6565b905092915050565b6000806000806000806000806000806000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663edb258418e8e6040518363ffffffff1660e01b8152600401612d819291906145d3565b6101606040518083038186803b158015612d9a57600080fd5b505afa158015612dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd291906154cf565b9a509a509a509a509a509a509a509a509a509a509a509295989b509295989b9093969950565b3373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f9061536d565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612f16613c8f565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f7e57600080fd5b505afa158015612f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb69190614564565b73ffffffffffffffffffffffffffffffffffffffff1663f51022e084846040518363ffffffff1660e01b8152600401612ff09291906145d3565b6106406040518083038186803b15801561300957600080fd5b505afa15801561301d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304191906150c6565b905092915050565b600080600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130c4578273ffffffffffffffffffffffffffffffffffffffff16319050613150565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016130fd91906142b1565b60206040518083038186803b15801561311557600080fd5b505afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d91906145a6565b90505b8091505092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fde676040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c457600080fd5b505afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc91906145a6565b905090565b6000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328e906147d9565b60405180910390fd5b600082116132da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d190614845565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b815260040161333791906142b1565b60006040518083038186803b15801561334f57600080fd5b505afa158015613363573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061338c91906149d9565b905060008160600151116133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc90614a94565b60405180910390fd5b60008411613418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340f90614b00565b60405180910390fd5b60008160800151600a61342b9190614c82565b9050600061344261343c868861374e565b836137c9565b9050600060030154600a6134569190614c82565b620186a06134649190614ccd565b8111156134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349d90614d99565b60405180910390fd5b60008060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161350591906142b1565b60206040518083038186803b15801561351d57600080fd5b505afa158015613531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355591906145a6565b9050818111613599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359090614e2b565b60405180910390fd5b6135ec600060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685613813565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1789338a8a8760008a6040518863ffffffff1660e01b815260040161365497969594939291906152b2565b602060405180830381600087803b15801561366e57600080fd5b505af1158015613682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a691906145a6565b9450600085111561374357600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d6a033f8987866040518463ffffffff1660e01b815260040161371093929190614eff565b600060405180830381600087803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505050505b505050509392505050565b60008083141561376157600090506137c3565b6000828461376f9190614ccd565b905082848261377e91906155f2565b146137be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b590615695565b60405180910390fd5b809150505b92915050565b600061380b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061399c565b905092915050565b613896846323b872dd60e01b8585856040516024016138349392919061538d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506139ff565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff8111156138d1576138d0614601565b5b6040519080825280601f01601f1916602001820160405280156139035781602001600182028036833780820191505090505b5060405161391191906156fc565b60006040518083038185875af1925050503d806000811461394e576040519150601f19603f3d011682016040523d82523d6000602084013e613953565b606091505b5050905080613997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398e90615785565b60405180910390fd5b505050565b600080831182906139e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139da91906157a5565b60405180910390fd5b50600083856139f291906155f2565b9050809150509392505050565b6000613a61826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613ac69092919063ffffffff16565b9050600081511115613ac15780806020019051810190613a81919061524a565b613ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab790615839565b60405180910390fd5b5b505050565b6060613ad58484600085613ade565b90509392505050565b606082471015613b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1a906158cb565b60405180910390fd5b613b2c85613bf2565b613b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6290615937565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613b9491906156fc565b60006040518083038185875af1925050503d8060008114613bd1576040519150601f19603f3d011682016040523d82523d6000602084013e613bd6565b606091505b5091509150613be6828286613c05565b92505050949350505050565b600080823b905060008111915050919050565b60608315613c1557829050613c65565b600083511115613c285782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5c91906157a5565b60405180910390fd5b9392505050565b604051806106400160405280603290602082028036833780820191505090505090565b604051806106400160405280603290602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1482613ce9565b9050919050565b613d2481613d09565b8114613d2f57600080fd5b50565b600081359050613d4181613d1b565b92915050565b600060208284031215613d5d57613d5c613cdf565b5b6000613d6b84828501613d32565b91505092915050565b6000819050919050565b613d8781613d74565b82525050565b6000602082019050613da26000830184613d7e565b92915050565b613db181613d74565b8114613dbc57600080fd5b50565b600081359050613dce81613da8565b92915050565b60008060408385031215613deb57613dea613cdf565b5b6000613df985828601613d32565b9250506020613e0a85828601613dbf565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e4981613d74565b82525050565b6000613e5b8383613e40565b60208301905092915050565b6000602082019050919050565b6000613e7f82613e14565b613e898185613e1f565b9350613e9483613e30565b8060005b83811015613ec5578151613eac8882613e4f565b9750613eb783613e67565b925050600181019050613e98565b5085935050505092915050565b60006020820190508181036000830152613eec8184613e74565b905092915050565b600080600060608486031215613f0d57613f0c613cdf565b5b6000613f1b86828701613d32565b9350506020613f2c86828701613dbf565b9250506040613f3d86828701613dbf565b9150509250925092565b600060208284031215613f5d57613f5c613cdf565b5b6000613f6b84828501613dbf565b91505092915050565b600060329050919050565b600081905092915050565b6000819050919050565b613f9d81613d09565b82525050565b6000613faf8383613f94565b60208301905092915050565b6000602082019050919050565b613fd181613f74565b613fdb8184613f7f565b9250613fe682613f8a565b8060005b83811015614017578151613ffe8782613fa3565b965061400983613fbb565b925050600181019050613fea565b505050505050565b6000610640820190506140356000830184613fc8565b92915050565b600060329050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6140718161403b565b61407b8184614046565b925061408682614051565b8060005b838110156140b757815161409e8782613e4f565b96506140a98361405b565b92505060018101905061408a565b505050505050565b6000610640820190506140d56000830184614068565b92915050565b6000610120820190506140f1600083018c613d7e565b6140fe602083018b613d7e565b61410b604083018a613d7e565b6141186060830189613d7e565b6141256080830188613d7e565b61413260a0830187613d7e565b61413f60c0830186613d7e565b61414c60e0830185613d7e565b61415a610100830184613d7e565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141a2578082015181840152602081019050614187565b838111156141b1576000848401525b50505050565b6000601f19601f8301169050919050565b60006141d382614168565b6141dd8185614173565b93506141ed818560208601614184565b6141f6816141b7565b840191505092915050565b61420a81613d09565b82525050565b600060a082019050818103600083015261422a81886141c8565b9050818103602083015261423e81876141c8565b905061424d6040830186614201565b61425a6060830185613d7e565b6142676080830184613d7e565b9695505050505050565b6000806040838503121561428857614287613cdf565b5b600061429685828601613d32565b92505060206142a785828601613d32565b9150509250929050565b60006020820190506142c66000830184614201565b92915050565b60008115159050919050565b6142e1816142cc565b82525050565b60006020820190506142fc60008301846142d8565b92915050565b6000806040838503121561431957614318613cdf565b5b600061432785828601613dbf565b925050602061433885828601613dbf565b9150509250929050565b60008060006060848603121561435b5761435a613cdf565b5b600061436986828701613d32565b935050602061437a86828701613dbf565b925050604061438b86828701613d32565b9150509250925092565b6000806000606084860312156143ae576143ad613cdf565b5b60006143bc86828701613d32565b93505060206143cd86828701613d32565b92505060406143de86828701613dbf565b9150509250925092565b6000600a9050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b61441e816143e8565b61442881846143f3565b9250614433826143fe565b8060005b8381101561446457815161444b8782613e4f565b965061445683614408565b925050600181019050614437565b505050505050565b6000610140820190506144826000830184614415565b92915050565b600060ff82169050919050565b61449e81614488565b82525050565b6000610160820190506144ba600083018e613d7e565b6144c7602083018d613d7e565b6144d4604083018c613d7e565b6144e1606083018b613d7e565b6144ee608083018a613d7e565b6144fb60a0830189613d7e565b61450860c0830188613d7e565b61451560e0830187613d7e565b614523610100830186614495565b614531610120830185614495565b61453f610140830184614201565b9c9b505050505050505050505050565b60008151905061455e81613d1b565b92915050565b60006020828403121561457a57614579613cdf565b5b60006145888482850161454f565b91505092915050565b6000815190506145a081613da8565b92915050565b6000602082840312156145bc576145bb613cdf565b5b60006145ca84828501614591565b91505092915050565b60006040820190506145e86000830185614201565b6145f56020830184613d7e565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614639826141b7565b810181811067ffffffffffffffff8211171561465857614657614601565b5b80604052505050565b600061466b613cd5565b90506146778282614630565b919050565b600067ffffffffffffffff82111561469757614696614601565b5b602082029050602081019050919050565b600080fd5b60006146c06146bb8461467c565b614661565b905080838252602082019050602084028301858111156146e3576146e26146a8565b5b835b8181101561470c57806146f88882614591565b8452602084019350506020810190506146e5565b5050509392505050565b600082601f83011261472b5761472a6145fc565b5b815161473b8482602086016146ad565b91505092915050565b60006020828403121561475a57614759613cdf565b5b600082015167ffffffffffffffff81111561477857614777613ce4565b5b61478484828501614716565b91505092915050565b7f446f6573206e6f7420737570706f727420455448000000000000000000000000600082015250565b60006147c3601483614173565b91506147ce8261478d565b602082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f546865207175616e746974792063616e6e6f7420626520300000000000000000600082015250565b600061482f601883614173565b915061483a826147f9565b602082019050919050565b6000602082019050818103600083015261485e81614822565b9050919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff82111561488f5761488e614601565b5b614898826141b7565b9050602081019050919050565b60006148b86148b384614874565b614661565b9050828152602081018484840111156148d4576148d361486f565b5b6148df848285614184565b509392505050565b600082601f8301126148fc576148fb6145fc565b5b815161490c8482602086016148a5565b91505092915050565b600060a0828403121561492b5761492a614865565b5b61493560a0614661565b9050600082015167ffffffffffffffff8111156149555761495461486a565b5b614961848285016148e7565b600083015250602082015167ffffffffffffffff8111156149855761498461486a565b5b614991848285016148e7565b60208301525060406149a58482850161454f565b60408301525060606149b984828501614591565b60608301525060806149cd84828501614591565b60808301525092915050565b6000602082840312156149ef576149ee613cdf565b5b600082015167ffffffffffffffff811115614a0d57614a0c613ce4565b5b614a1984828501614915565b91505092915050565b7f5468697320636f6e74726163742061646472657373206973206e6f742073757060008201527f706f727465640000000000000000000000000000000000000000000000000000602082015250565b6000614a7e602683614173565b9150614a8982614a22565b604082019050919050565b60006020820190508181036000830152614aad81614a71565b9050919050565b7f4e6f2c206e6f2070726963650000000000000000000000000000000000000000600082015250565b6000614aea600c83614173565b9150614af582614ab4565b602082019050919050565b60006020820190508181036000830152614b1981614add565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614ba657808604811115614b8257614b81614b20565b5b6001851615614b915780820291505b8081029050614b9f85614b4f565b9450614b66565b94509492505050565b600082614bbf5760019050614c7b565b81614bcd5760009050614c7b565b8160018114614be35760028114614bed57614c1c565b6001915050614c7b565b60ff841115614bff57614bfe614b20565b5b8360020a915084821115614c1657614c15614b20565b5b50614c7b565b5060208310610133831016604e8410600b8410161715614c515782820a905083811115614c4c57614c4b614b20565b5b614c7b565b614c5e8484846001614b5c565b92509050818404811115614c7557614c74614b20565b5b81810290505b9392505050565b6000614c8d82613d74565b9150614c9883613d74565b9250614cc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614baf565b905092915050565b6000614cd882613d74565b9150614ce383613d74565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d1c57614d1b614b20565b5b828202905092915050565b7f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60008201527f7420313030303030205553445400000000000000000000000000000000000000602082015250565b6000614d83602d83614173565b9150614d8e82614d27565b604082019050919050565b60006020820190508181036000830152614db281614d76565b9050919050565b7f536f7272792c20796f7572206372656469742069732072756e6e696e67206c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e15602183614173565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b6000819050919050565b6000819050919050565b6000614e7a614e75614e7084614e4b565b614e55565b614488565b9050919050565b614e8a81614e5f565b82525050565b600060e082019050614ea5600083018a614201565b614eb26020830189614201565b614ebf6040830188613d7e565b614ecc6060830187613d7e565b614ed96080830186613d7e565b614ee660a0830185614e81565b614ef360c0830184613d7e565b98975050505050505050565b6000606082019050614f146000830186614201565b614f216020830185613d7e565b614f2e6040830184613d7e565b949350505050565b600067ffffffffffffffff821115614f5157614f50614601565b5b602082029050919050565b6000614f6f614f6a84614f36565b614661565b90508060208402830185811115614f8957614f886146a8565b5b835b81811015614fb25780614f9e888261454f565b845260208401935050602081019050614f8b565b5050509392505050565b600082601f830112614fd157614fd06145fc565b5b6032614fde848285614f5c565b91505092915050565b60006106408284031215614ffe57614ffd613cdf565b5b600061500c84828501614fbc565b91505092915050565b600067ffffffffffffffff8211156150305761502f614601565b5b602082029050919050565b600061504e61504984615015565b614661565b90508060208402830185811115615068576150676146a8565b5b835b81811015615091578061507d8882614591565b84526020840193505060208101905061506a565b5050509392505050565b600082601f8301126150b0576150af6145fc565b5b60326150bd84828561503b565b91505092915050565b600061064082840312156150dd576150dc613cdf565b5b60006150eb8482850161509b565b91505092915050565b60008060008060008060008060006101208a8c03121561511757615116613cdf565b5b60006151258c828d01614591565b99505060206151368c828d01614591565b98505060406151478c828d01614591565b97505060606151588c828d01614591565b96505060806151698c828d01614591565b95505060a061517a8c828d01614591565b94505060c061518b8c828d01614591565b93505060e061519c8c828d01614591565b9250506101006151ae8c828d01614591565b9150509295985092959850929598565b60006040820190506151d36000830185614201565b6151e06020830184614201565b9392505050565b60006060820190506151fc6000830186614201565b6152096020830185613d7e565b6152166040830184614201565b949350505050565b615227816142cc565b811461523257600080fd5b50565b6000815190506152448161521e565b92915050565b6000602082840312156152605761525f613cdf565b5b600061526e84828501615235565b91505092915050565b6000819050919050565b600061529c61529761529284615277565b614e55565b614488565b9050919050565b6152ac81615281565b82525050565b600060e0820190506152c7600083018a614201565b6152d46020830189614201565b6152e16040830188613d7e565b6152ee6060830187613d7e565b6152fb6080830186613d7e565b61530860a08301856152a3565b61531560c0830184613d7e565b98975050505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615357602083614173565b915061536282615321565b602082019050919050565b600060208201905081810360008301526153868161534a565b9050919050565b60006060820190506153a26000830186614201565b6153af6020830185614201565b6153bc6040830184613d7e565b949350505050565b600067ffffffffffffffff8211156153df576153de614601565b5b602082029050919050565b60006153fd6153f8846153c4565b614661565b90508060208402830185811115615417576154166146a8565b5b835b81811015615440578061542c8882614591565b845260208401935050602081019050615419565b5050509392505050565b600082601f83011261545f5761545e6145fc565b5b600a61546c8482856153ea565b91505092915050565b6000610140828403121561548c5761548b613cdf565b5b600061549a8482850161544a565b91505092915050565b6154ac81614488565b81146154b757600080fd5b50565b6000815190506154c9816154a3565b92915050565b60008060008060008060008060008060006101608c8e0312156154f5576154f4613cdf565b5b60006155038e828f01614591565b9b505060206155148e828f01614591565b9a505060406155258e828f01614591565b99505060606155368e828f01614591565b98505060806155478e828f01614591565b97505060a06155588e828f01614591565b96505060c06155698e828f01614591565b95505060e061557a8e828f01614591565b94505061010061558c8e828f016154ba565b93505061012061559e8e828f016154ba565b9250506101406155b08e828f0161454f565b9150509295989b509295989b9093969950565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006155fd82613d74565b915061560883613d74565b925082615618576156176155c3565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061567f602183614173565b915061568a82615623565b604082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b600081519050919050565b600081905092915050565b60006156d6826156b5565b6156e081856156c0565b93506156f0818560208601614184565b80840191505092915050565b600061570882846156cb565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061576f602383614173565b915061577a82615713565b604082019050919050565b6000602082019050818103600083015261579e81615762565b9050919050565b600060208201905081810360008301526157bf81846141c8565b905092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615823602a83614173565b915061582e826157c7565b604082019050919050565b6000602082019050818103600083015261585281615816565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006158b5602683614173565b91506158c082615859565b604082019050919050565b600060208201905081810360008301526158e4816158a8565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615921601d83614173565b915061592c826158eb565b602082019050919050565b6000602082019050818103600083015261595081615914565b905091905056fea2646970667358221220e677c39c10f22e933cee546ee91c39c6dc7287e7fc1e5b62e677b6ade09b629964736f6c63430008090033

Deployed ByteCode Sourcemap

22365:13206:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30757:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32464:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32190:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25858:1373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24207:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32702:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30555:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33725:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;31677:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23527:503;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;34418:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23137:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29339:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27243:1123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29710:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34944:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32981:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33489:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28374:957;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30973:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34156:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35261:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33255:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31189:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;23262:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31913:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30177:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24038:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24463:1387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30757:208;30828:15;30896:13;;;;;;;;;;;30883:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30868:73;;;30942:14;30868:89;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30861:96;;30757:208;;;:::o;32464:230::-;32548:11;32612:13;;;;;;;;;;;32599:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32584:86;;;32671:14;32584:102;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32577:109;;32464:230;;;:::o;32190:264::-;32290:21;32364:13;;;;;;;;;;;32351:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32336:86;;;32423:14;32439:6;32336:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32329:117;;32190:264;;;;:::o;25858:1373::-;25962:15;26021:3;:17;;;;;;;;;;;;26003:35;;:14;:35;;;;25995:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26098:1;26082:13;:17;26074:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26141:18;26177:13;;;;;;;;;;;26162:38;;;26201:14;26162:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26141:75;;26252:1;26235:5;:14;;;:18;26227:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:1;26315:6;:10;26307:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;26355:27;26391:5;:20;;;26385:2;:26;;;;:::i;:::-;26355:56;;26422:20;26445:70;26458:35;26471:13;26486:6;26458:12;:35::i;:::-;26495:19;26445:12;:70::i;:::-;26422:93;;26565:4;:13;;;26559:2;:19;;;;:::i;:::-;26550:6;:28;;;;:::i;:::-;26534:12;:44;;26526:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26641:15;26666:14;26659:32;;;26692:10;26659:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26641:62;;26732:13;26722:7;:23;26714:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26796:92;26830:14;26847:10;26859:13;;;;;;;;;;;26874;26796:26;:92::i;:::-;26924:13;;;;;;;;;;;26911:39;;;26951:14;26967:10;26979:6;26987:13;27002:12;27016:1;27019:19;26911:128;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26901:138;;27064:1;27054:7;:11;27050:147;;;27104:13;;;;;;;;;;;27091:48;;;27140:14;27156:7;27165:19;27091:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27050:147;27209:14;;;;25858:1373;;;;;:::o;24207:180::-;24273:23;;:::i;:::-;24336:13;;;;;;;;;;;24321:51;;;24373:5;24321:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24314:65;;24207:180;;;:::o;32702:271::-;32803:23;;:::i;:::-;32879:13;;;;;;;;;;;32866:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32851:91;;;32943:14;32959:5;32851:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32844:121;;32702:271;;;;:::o;30555:194::-;30620:13;30686;;;;;;;;;;;30673:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30658:67;;;30726:14;30658:83;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30651:90;;30555:194;;;:::o;33725:423::-;33818:15;33844:18;33873:19;33903:13;33927:17;33955:16;33982;34009:15;34035:12;34091:13;;;;;;;;;;;34078:36;;;34115:14;34131:8;34078:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34071:69;;;;;;;;;;;;;;;;;;33725:423;;;;;;;;;;;:::o;31677:228::-;31760:11;31824:13;;;;;;;;;;;31811:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31796:85;;;31882:14;31796:101;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31789:108;;31677:228;;;:::o;23527:503::-;23602:20;23633:18;23662:21;23694:13;23718:19;23755:18;23791:13;;;;;;;;;;;23776:38;;;23815:14;23776:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23755:75;;23852:5;:12;;;23843:21;;23882:5;:10;;;23875:17;;23919:5;:19;;;23903:35;;23960:5;:14;;;23949:25;;24002:5;:20;;;23985:37;;23744:286;23527:503;;;;;;;:::o;34418:256::-;34519:11;34583:13;;;;;;;;;;;34570:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34555:86;;;34642:14;34658:7;34555:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34548:118;;34418:256;;;;:::o;23137:117::-;23178:7;23223:13;;;;;;;;;;;23210:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23203:43;;23137:117;:::o;29339:363::-;29420:4;29442:18;29478:13;;;;;;;;;;;29463:38;;;29502:14;29463:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29442:75;;29553:1;29536:5;:14;;;:18;29528:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29630:13;;;;;;;;;;;29617:39;;;29657:14;29673:8;29683:10;29617:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29610:84;;;29339:363;;;;:::o;27243:1123::-;27325:15;27375:1;27366:6;:10;27358:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;27428:1;27412:13;:17;27404:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27471:27;27507:3;:18;;;27501:2;:24;;;;:::i;:::-;27471:54;;27536:20;27559:70;27572:35;27585:13;27600:6;27572:12;:35::i;:::-;27609:19;27559:12;:70::i;:::-;27536:93;;27681:4;:13;;;27675:2;:19;;;;:::i;:::-;27666:6;:28;;;;:::i;:::-;27650:12;:44;;27642:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;27765:15;27790:4;:18;;;;;;;;;;;;27783:36;;;27820:10;27783:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27765:66;;27860:12;27850:7;:22;27842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27923:95;27957:4;:18;;;;;;;;;;;;27978:10;27990:13;;;;;;;;;;;28005:12;27923:26;:95::i;:::-;28054:13;;;;;;;;;;;28041:39;;;28081:3;:17;;;;;;;;;;;;28100:10;28112:6;28120:13;28135:12;28149:1;28152:19;28041:131;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28031:141;;28197:1;28187:7;:11;28183:149;;;28237:13;;;;;;;;;;;28224:47;;;28272:3;:17;;;;;;;;;;;;28291:7;28300:19;28224:96;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28183:149;28344:14;;;27243:1123;;;;:::o;29710:391::-;29822:4;23062:10;23052:20;;:6;;;;;;;;;;;:20;;;23044:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29844:18:::1;29880:13;;;;;;;;;;;29865:38;;;29904:14;29865:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29844:75;;29955:1;29938:5;:14;;;:18;29930:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:13;;;;;;;;;;;30019:39;;;30059:14;30075:8;30085:7;30019:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30012:81;;;29710:391:::0;;;;;:::o;34944:309::-;35068:23;;:::i;:::-;35144:13;;;;;;;;;;;35131:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35116:97;;;35214:14;35230:7;35239:5;35116:129;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35109:136;;34944:309;;;;;:::o;32981:266::-;33082:21;33156:13;;;;;;;;;;;33143:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33128:87;;;33216:14;33232:6;33128:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33121:118;;32981:266;;;;:::o;33489:228::-;33590:14;33642:13;;;;;;;;;;;33629:56;;;33686:14;33702:6;33629:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33622:87;;33489:228;;;;:::o;28374:957::-;28442:15;28492:1;28483:6;:10;28475:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;28541:1;28529:9;:13;28521:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28584:21;28608:9;28584:33;;28630:27;28666:3;:18;;;28660:2;:24;;;;:::i;:::-;28630:54;;28695:20;28718:70;28731:35;28744:13;28759:6;28731:12;:35::i;:::-;28768:19;28718:12;:70::i;:::-;28695:93;;28838:4;:13;;;28832:2;:19;;;;:::i;:::-;28823:6;:28;;;;:::i;:::-;28807:12;:44;;28799:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28914:60;28945:13;;;;;;;;;;;28960;28914:30;:60::i;:::-;29018:13;;;;;;;;;;;29005:39;;;29045:3;:17;;;;;;;;;;;;29064:10;29076:6;29084:13;29099:12;29113:1;29116:19;29005:131;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28995:141;;29161:1;29151:7;:11;29147:150;;;29201:13;;;;;;;;;;;29188:48;;;29237:3;:17;;;;;;;;;;;;29256:7;29265:19;29188:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29147:150;29309:14;;;28374:957;;;:::o;30973:208::-;31044:15;31112:13;;;;;;;;;;;31099:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31084:73;;;31158:14;31084:89;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31077:96;;30973:208;;;:::o;34156:254::-;34247:29;34329:13;;;;;;;;;;;34316:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34301:75;;;34377:14;34393:8;34301:101;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34294:108;;34156:254;;;;:::o;34682:::-;34782:11;34846:13;;;;;;;;;;;34833:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34818:85;;;34904:14;34920:7;34818:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34811:117;;34682:254;;;;:::o;35261:307::-;35384:23;;:::i;:::-;35460:13;;;;;;;;;;;35447:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35432:96;;;35529:14;35545:7;35554:5;35432:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35425:135;;35261:307;;;;;:::o;33255:226::-;33355:14;33407:13;;;;;;;;;;;33394:55;;;33450:14;33466:6;33394:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33387:86;;33255:226;;;;:::o;31189:480::-;31282:13;31306:18;31335:20;31366:16;31393:19;31423:15;31449:19;31479:15;31505;31531:12;31554:14;31612:13;;;;;;;;;;;31599:36;;;31636:14;31652:8;31599:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31592:69;;;;;;;;;;;;;;;;;;;;;;31189:480;;;;;;;;;;;;;;:::o;23262:257::-;23062:10;23052:20;;:6;;;;;;;;;;;:20;;;23044:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23455:14:::1;23439:13;;:30;;;;;;;;;;;;;;;;;;23496:15;23480:13;;:31;;;;;;;;;;;;;;;;;;23262:257:::0;;:::o;31913:269::-;32013:23;;:::i;:::-;32089:13;;;;;;;;;;;32076:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32061:90;;;32152:14;32168:5;32061:113;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32054:120;;31913:269;;;;:::o;30177:370::-;30260:7;30285:15;30333:3;:17;;;;;;;;;;;;30315:35;;:14;:35;;;30311:204;;;30386:7;:15;;;30376:25;;30311:204;;;30469:14;30462:32;;;30495:7;30462:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30452:51;;30311:204;30532:7;30525:14;;;30177:370;;;;:::o;24038:161::-;24098:11;24149:13;;;;;;;;;;;24134:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24127:64;;24038:161;:::o;24463:1387::-;24566:15;24625:3;:17;;;;;;;;;;;;24607:35;;:14;:35;;;;24599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:1;24686:13;:17;24678:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24745:18;24781:13;;;;;;;;;;;24766:38;;;24805:14;24766:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24745:75;;24856:1;24839:5;:14;;;:18;24831:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24928:1;24919:6;:10;24911:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;24959:27;24995:5;:20;;;24989:2;:26;;;;:::i;:::-;24959:56;;25026:20;25049:70;25062:35;25075:13;25090:6;25062:12;:35::i;:::-;25099:19;25049:12;:70::i;:::-;25026:93;;25171:4;:13;;;25165:2;:19;;;;:::i;:::-;25156:6;:28;;;;:::i;:::-;25140:12;:44;;25132:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25255:15;25280:4;:18;;;;;;;;;;;;25273:36;;;25310:10;25273:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25255:66;;25350:12;25340:7;:22;25332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25413:95;25447:4;:18;;;;;;;;;;;;25468:10;25480:13;;;;;;;;;;;25495:12;25413:26;:95::i;:::-;25544:13;;;;;;;;;;;25531:39;;;25571:14;25587:10;25599:6;25607:13;25622:12;25636:1;25639:19;25531:128;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25521:138;;25684:1;25674:7;:11;25670:146;;;25724:13;;;;;;;;;;;25711:47;;;25759:14;25775:7;25784:19;25711:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25670:146;25828:14;;;;24463:1387;;;;;:::o;4725:471::-;4783:7;5033:1;5028;:6;5024:47;;;5058:1;5051:8;;;;5024:47;5083:9;5099:1;5095;:5;;;;:::i;:::-;5083:17;;5128:1;5123;5119;:5;;;;:::i;:::-;:10;5111:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5187:1;5180:8;;;4725:471;;;;;:::o;5204:132::-;5262:7;5289:39;5293:1;5296;5289:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5282:46;;5204:132;;;;:::o;15250:205::-;15351:96;15371:5;15401:27;;;15430:4;15436:2;15440:5;15378:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15351:19;:96::i;:::-;15250:205;;;;:::o;3962:197::-;4032:12;4049:2;:7;;4065:5;4082:1;4072:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4049:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4031:54;;;4104:7;4096:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4020:139;3962:197;;:::o;5344:278::-;5430:7;5462:1;5458;:5;5465:12;5450:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5489:9;5505:1;5501;:5;;;;:::i;:::-;5489:17;;5613:1;5606:8;;;5344:278;;;;;:::o;17370:761::-;17794:23;17820:69;17848:4;17820:69;;;;;;;;;;;;;;;;;17828:5;17820:27;;;;:69;;;;;:::i;:::-;17794:95;;17924:1;17904:10;:17;:21;17900:224;;;18046:10;18035:30;;;;;;;;;;;;:::i;:::-;18027:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17900:224;17440:691;17370:761;;:::o;9806:195::-;9909:12;9941:52;9963:6;9971:4;9977:1;9980:12;9941:21;:52::i;:::-;9934:59;;9806:195;;;;;:::o;10858:530::-;10985:12;11043:5;11018:21;:30;;11010:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11110:18;11121:6;11110:10;:18::i;:::-;11102:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11236:12;11250:23;11277:6;:11;;11297:5;11305:4;11277:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11235:75;;;;11328:52;11346:7;11355:10;11367:12;11328:17;:52::i;:::-;11321:59;;;;10858:530;;;;;;:::o;6888:422::-;6948:4;7156:12;7267:7;7255:20;7247:28;;7301:1;7294:4;:8;7287:15;;;6888:422;;;:::o;13398:742::-;13513:12;13542:7;13538:595;;;13573:10;13566:17;;;;13538:595;13707:1;13687:10;:17;:21;13683:439;;;13950:10;13944:17;14011:15;13998:10;13994:2;13990:19;13983:44;13683:439;14093:12;14086:20;;;;;;;;;;;:::i;:::-;;;;;;;;13398:742;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:114::-;2431:6;2465:5;2459:12;2449:22;;2364:114;;;:::o;2484:184::-;2583:11;2617:6;2612:3;2605:19;2657:4;2652:3;2648:14;2633:29;;2484:184;;;;:::o;2674:132::-;2741:4;2764:3;2756:11;;2794:4;2789:3;2785:14;2777:22;;2674:132;;;:::o;2812:108::-;2889:24;2907:5;2889:24;:::i;:::-;2884:3;2877:37;2812:108;;:::o;2926:179::-;2995:10;3016:46;3058:3;3050:6;3016:46;:::i;:::-;3094:4;3089:3;3085:14;3071:28;;2926:179;;;;:::o;3111:113::-;3181:4;3213;3208:3;3204:14;3196:22;;3111:113;;;:::o;3260:732::-;3379:3;3408:54;3456:5;3408:54;:::i;:::-;3478:86;3557:6;3552:3;3478:86;:::i;:::-;3471:93;;3588:56;3638:5;3588:56;:::i;:::-;3667:7;3698:1;3683:284;3708:6;3705:1;3702:13;3683:284;;;3784:6;3778:13;3811:63;3870:3;3855:13;3811:63;:::i;:::-;3804:70;;3897:60;3950:6;3897:60;:::i;:::-;3887:70;;3743:224;3730:1;3727;3723:9;3718:14;;3683:284;;;3687:14;3983:3;3976:10;;3384:608;;;3260:732;;;;:::o;3998:373::-;4141:4;4179:2;4168:9;4164:18;4156:26;;4228:9;4222:4;4218:20;4214:1;4203:9;4199:17;4192:47;4256:108;4359:4;4350:6;4256:108;:::i;:::-;4248:116;;3998:373;;;;:::o;4377:619::-;4454:6;4462;4470;4519:2;4507:9;4498:7;4494:23;4490:32;4487:119;;;4525:79;;:::i;:::-;4487:119;4645:1;4670:53;4715:7;4706:6;4695:9;4691:22;4670:53;:::i;:::-;4660:63;;4616:117;4772:2;4798:53;4843:7;4834:6;4823:9;4819:22;4798:53;:::i;:::-;4788:63;;4743:118;4900:2;4926:53;4971:7;4962:6;4951:9;4947:22;4926:53;:::i;:::-;4916:63;;4871:118;4377:619;;;;;:::o;5002:329::-;5061:6;5110:2;5098:9;5089:7;5085:23;5081:32;5078:119;;;5116:79;;:::i;:::-;5078:119;5236:1;5261:53;5306:7;5297:6;5286:9;5282:22;5261:53;:::i;:::-;5251:63;;5207:117;5002:329;;;;:::o;5337:105::-;5403:6;5431:4;5421:14;;5337:105;;;:::o;5448:144::-;5546:11;5583:3;5568:18;;5448:144;;;;:::o;5598:99::-;5664:4;5687:3;5679:11;;5598:99;;;:::o;5703:108::-;5780:24;5798:5;5780:24;:::i;:::-;5775:3;5768:37;5703:108;;:::o;5817:179::-;5886:10;5907:46;5949:3;5941:6;5907:46;:::i;:::-;5985:4;5980:3;5976:14;5962:28;;5817:179;;;;:::o;6002:112::-;6071:4;6103;6098:3;6094:14;6086:22;;6002:112;;;:::o;6154:700::-;6292:53;6339:5;6292:53;:::i;:::-;6361:85;6439:6;6434:3;6361:85;:::i;:::-;6354:92;;6470:55;6519:5;6470:55;:::i;:::-;6548:7;6579:1;6564:283;6589:6;6586:1;6583:13;6564:283;;;6665:6;6659:13;6692:63;6751:3;6736:13;6692:63;:::i;:::-;6685:70;;6778:59;6830:6;6778:59;:::i;:::-;6768:69;;6624:223;6611:1;6608;6604:9;6599:14;;6564:283;;;6568:14;6268:586;;;6154:700;;:::o;6860:320::-;7001:4;7039;7028:9;7024:20;7016:28;;7054:119;7170:1;7159:9;7155:17;7146:6;7054:119;:::i;:::-;6860:320;;;;:::o;7186:105::-;7252:6;7280:4;7270:14;;7186:105;;;:::o;7297:144::-;7395:11;7432:3;7417:18;;7297:144;;;;:::o;7447:99::-;7513:4;7536:3;7528:11;;7447:99;;;:::o;7552:112::-;7621:4;7653;7648:3;7644:14;7636:22;;7552:112;;;:::o;7704:700::-;7842:53;7889:5;7842:53;:::i;:::-;7911:85;7989:6;7984:3;7911:85;:::i;:::-;7904:92;;8020:55;8069:5;8020:55;:::i;:::-;8098:7;8129:1;8114:283;8139:6;8136:1;8133:13;8114:283;;;8215:6;8209:13;8242:63;8301:3;8286:13;8242:63;:::i;:::-;8235:70;;8328:59;8380:6;8328:59;:::i;:::-;8318:69;;8174:223;8161:1;8158;8154:9;8149:14;;8114:283;;;8118:14;7818:586;;;7704:700;;:::o;8410:320::-;8551:4;8589;8578:9;8574:20;8566:28;;8604:119;8720:1;8709:9;8705:17;8696:6;8604:119;:::i;:::-;8410:320;;;;:::o;8736:1108::-;9053:4;9091:3;9080:9;9076:19;9068:27;;9105:71;9173:1;9162:9;9158:17;9149:6;9105:71;:::i;:::-;9186:72;9254:2;9243:9;9239:18;9230:6;9186:72;:::i;:::-;9268;9336:2;9325:9;9321:18;9312:6;9268:72;:::i;:::-;9350;9418:2;9407:9;9403:18;9394:6;9350:72;:::i;:::-;9432:73;9500:3;9489:9;9485:19;9476:6;9432:73;:::i;:::-;9515;9583:3;9572:9;9568:19;9559:6;9515:73;:::i;:::-;9598;9666:3;9655:9;9651:19;9642:6;9598:73;:::i;:::-;9681;9749:3;9738:9;9734:19;9725:6;9681:73;:::i;:::-;9764;9832:3;9821:9;9817:19;9808:6;9764:73;:::i;:::-;8736:1108;;;;;;;;;;;;:::o;9850:99::-;9902:6;9936:5;9930:12;9920:22;;9850:99;;;:::o;9955:169::-;10039:11;10073:6;10068:3;10061:19;10113:4;10108:3;10104:14;10089:29;;9955:169;;;;:::o;10130:307::-;10198:1;10208:113;10222:6;10219:1;10216:13;10208:113;;;10307:1;10302:3;10298:11;10292:18;10288:1;10283:3;10279:11;10272:39;10244:2;10241:1;10237:10;10232:15;;10208:113;;;10339:6;10336:1;10333:13;10330:101;;;10419:1;10410:6;10405:3;10401:16;10394:27;10330:101;10179:258;10130:307;;;:::o;10443:102::-;10484:6;10535:2;10531:7;10526:2;10519:5;10515:14;10511:28;10501:38;;10443:102;;;:::o;10551:364::-;10639:3;10667:39;10700:5;10667:39;:::i;:::-;10722:71;10786:6;10781:3;10722:71;:::i;:::-;10715:78;;10802:52;10847:6;10842:3;10835:4;10828:5;10824:16;10802:52;:::i;:::-;10879:29;10901:6;10879:29;:::i;:::-;10874:3;10870:39;10863:46;;10643:272;10551:364;;;;:::o;10921:118::-;11008:24;11026:5;11008:24;:::i;:::-;11003:3;10996:37;10921:118;;:::o;11045:846::-;11290:4;11328:3;11317:9;11313:19;11305:27;;11378:9;11372:4;11368:20;11364:1;11353:9;11349:17;11342:47;11406:78;11479:4;11470:6;11406:78;:::i;:::-;11398:86;;11531:9;11525:4;11521:20;11516:2;11505:9;11501:18;11494:48;11559:78;11632:4;11623:6;11559:78;:::i;:::-;11551:86;;11647:72;11715:2;11704:9;11700:18;11691:6;11647:72;:::i;:::-;11729;11797:2;11786:9;11782:18;11773:6;11729:72;:::i;:::-;11811:73;11879:3;11868:9;11864:19;11855:6;11811:73;:::i;:::-;11045:846;;;;;;;;:::o;11897:474::-;11965:6;11973;12022:2;12010:9;12001:7;11997:23;11993:32;11990:119;;;12028:79;;:::i;:::-;11990:119;12148:1;12173:53;12218:7;12209:6;12198:9;12194:22;12173:53;:::i;:::-;12163:63;;12119:117;12275:2;12301:53;12346:7;12337:6;12326:9;12322:22;12301:53;:::i;:::-;12291:63;;12246:118;11897:474;;;;;:::o;12377:222::-;12470:4;12508:2;12497:9;12493:18;12485:26;;12521:71;12589:1;12578:9;12574:17;12565:6;12521:71;:::i;:::-;12377:222;;;;:::o;12605:90::-;12639:7;12682:5;12675:13;12668:21;12657:32;;12605:90;;;:::o;12701:109::-;12782:21;12797:5;12782:21;:::i;:::-;12777:3;12770:34;12701:109;;:::o;12816:210::-;12903:4;12941:2;12930:9;12926:18;12918:26;;12954:65;13016:1;13005:9;13001:17;12992:6;12954:65;:::i;:::-;12816:210;;;;:::o;13032:474::-;13100:6;13108;13157:2;13145:9;13136:7;13132:23;13128:32;13125:119;;;13163:79;;:::i;:::-;13125:119;13283:1;13308:53;13353:7;13344:6;13333:9;13329:22;13308:53;:::i;:::-;13298:63;;13254:117;13410:2;13436:53;13481:7;13472:6;13461:9;13457:22;13436:53;:::i;:::-;13426:63;;13381:118;13032:474;;;;;:::o;13512:619::-;13589:6;13597;13605;13654:2;13642:9;13633:7;13629:23;13625:32;13622:119;;;13660:79;;:::i;:::-;13622:119;13780:1;13805:53;13850:7;13841:6;13830:9;13826:22;13805:53;:::i;:::-;13795:63;;13751:117;13907:2;13933:53;13978:7;13969:6;13958:9;13954:22;13933:53;:::i;:::-;13923:63;;13878:118;14035:2;14061:53;14106:7;14097:6;14086:9;14082:22;14061:53;:::i;:::-;14051:63;;14006:118;13512:619;;;;;:::o;14137:::-;14214:6;14222;14230;14279:2;14267:9;14258:7;14254:23;14250:32;14247:119;;;14285:79;;:::i;:::-;14247:119;14405:1;14430:53;14475:7;14466:6;14455:9;14451:22;14430:53;:::i;:::-;14420:63;;14376:117;14532:2;14558:53;14603:7;14594:6;14583:9;14579:22;14558:53;:::i;:::-;14548:63;;14503:118;14660:2;14686:53;14731:7;14722:6;14711:9;14707:22;14686:53;:::i;:::-;14676:63;;14631:118;14137:619;;;;;:::o;14762:105::-;14828:6;14856:4;14846:14;;14762:105;;;:::o;14873:144::-;14971:11;15008:3;14993:18;;14873:144;;;;:::o;15023:99::-;15089:4;15112:3;15104:11;;15023:99;;;:::o;15128:112::-;15197:4;15229;15224:3;15220:14;15212:22;;15128:112;;;:::o;15280:700::-;15418:53;15465:5;15418:53;:::i;:::-;15487:85;15565:6;15560:3;15487:85;:::i;:::-;15480:92;;15596:55;15645:5;15596:55;:::i;:::-;15674:7;15705:1;15690:283;15715:6;15712:1;15709:13;15690:283;;;15791:6;15785:13;15818:63;15877:3;15862:13;15818:63;:::i;:::-;15811:70;;15904:59;15956:6;15904:59;:::i;:::-;15894:69;;15750:223;15737:1;15734;15730:9;15725:14;;15690:283;;;15694:14;15394:586;;;15280:700;;:::o;15986:319::-;16127:4;16165:3;16154:9;16150:19;16142:27;;16179:119;16295:1;16284:9;16280:17;16271:6;16179:119;:::i;:::-;15986:319;;;;:::o;16311:86::-;16346:7;16386:4;16379:5;16375:16;16364:27;;16311:86;;;:::o;16403:112::-;16486:22;16502:5;16486:22;:::i;:::-;16481:3;16474:35;16403:112;;:::o;16521:1316::-;16887:4;16925:3;16914:9;16910:19;16902:27;;16939:71;17007:1;16996:9;16992:17;16983:6;16939:71;:::i;:::-;17020:72;17088:2;17077:9;17073:18;17064:6;17020:72;:::i;:::-;17102;17170:2;17159:9;17155:18;17146:6;17102:72;:::i;:::-;17184;17252:2;17241:9;17237:18;17228:6;17184:72;:::i;:::-;17266:73;17334:3;17323:9;17319:19;17310:6;17266:73;:::i;:::-;17349;17417:3;17406:9;17402:19;17393:6;17349:73;:::i;:::-;17432;17500:3;17489:9;17485:19;17476:6;17432:73;:::i;:::-;17515;17583:3;17572:9;17568:19;17559:6;17515:73;:::i;:::-;17598:69;17662:3;17651:9;17647:19;17638:6;17598:69;:::i;:::-;17677;17741:3;17730:9;17726:19;17717:6;17677:69;:::i;:::-;17756:74;17825:3;17814:9;17810:19;17800:7;17756:74;:::i;:::-;16521:1316;;;;;;;;;;;;;;:::o;17843:143::-;17900:5;17931:6;17925:13;17916:22;;17947:33;17974:5;17947:33;:::i;:::-;17843:143;;;;:::o;17992:351::-;18062:6;18111:2;18099:9;18090:7;18086:23;18082:32;18079:119;;;18117:79;;:::i;:::-;18079:119;18237:1;18262:64;18318:7;18309:6;18298:9;18294:22;18262:64;:::i;:::-;18252:74;;18208:128;17992:351;;;;:::o;18349:143::-;18406:5;18437:6;18431:13;18422:22;;18453:33;18480:5;18453:33;:::i;:::-;18349:143;;;;:::o;18498:351::-;18568:6;18617:2;18605:9;18596:7;18592:23;18588:32;18585:119;;;18623:79;;:::i;:::-;18585:119;18743:1;18768:64;18824:7;18815:6;18804:9;18800:22;18768:64;:::i;:::-;18758:74;;18714:128;18498:351;;;;:::o;18855:332::-;18976:4;19014:2;19003:9;18999:18;18991:26;;19027:71;19095:1;19084:9;19080:17;19071:6;19027:71;:::i;:::-;19108:72;19176:2;19165:9;19161:18;19152:6;19108:72;:::i;:::-;18855:332;;;;;:::o;19193:117::-;19302:1;19299;19292:12;19316:180;19364:77;19361:1;19354:88;19461:4;19458:1;19451:15;19485:4;19482:1;19475:15;19502:281;19585:27;19607:4;19585:27;:::i;:::-;19577:6;19573:40;19715:6;19703:10;19700:22;19679:18;19667:10;19664:34;19661:62;19658:88;;;19726:18;;:::i;:::-;19658:88;19766:10;19762:2;19755:22;19545:238;19502:281;;:::o;19789:129::-;19823:6;19850:20;;:::i;:::-;19840:30;;19879:33;19907:4;19899:6;19879:33;:::i;:::-;19789:129;;;:::o;19924:311::-;20001:4;20091:18;20083:6;20080:30;20077:56;;;20113:18;;:::i;:::-;20077:56;20163:4;20155:6;20151:17;20143:25;;20223:4;20217;20213:15;20205:23;;19924:311;;;:::o;20241:117::-;20350:1;20347;20340:12;20381:732;20488:5;20513:81;20529:64;20586:6;20529:64;:::i;:::-;20513:81;:::i;:::-;20504:90;;20614:5;20643:6;20636:5;20629:21;20677:4;20670:5;20666:16;20659:23;;20730:4;20722:6;20718:17;20710:6;20706:30;20759:3;20751:6;20748:15;20745:122;;;20778:79;;:::i;:::-;20745:122;20893:6;20876:231;20910:6;20905:3;20902:15;20876:231;;;20985:3;21014:48;21058:3;21046:10;21014:48;:::i;:::-;21009:3;21002:61;21092:4;21087:3;21083:14;21076:21;;20952:155;20936:4;20931:3;20927:14;20920:21;;20876:231;;;20880:21;20494:619;;20381:732;;;;;:::o;21136:385::-;21218:5;21267:3;21260:4;21252:6;21248:17;21244:27;21234:122;;21275:79;;:::i;:::-;21234:122;21385:6;21379:13;21410:105;21511:3;21503:6;21496:4;21488:6;21484:17;21410:105;:::i;:::-;21401:114;;21224:297;21136:385;;;;:::o;21527:554::-;21622:6;21671:2;21659:9;21650:7;21646:23;21642:32;21639:119;;;21677:79;;:::i;:::-;21639:119;21818:1;21807:9;21803:17;21797:24;21848:18;21840:6;21837:30;21834:117;;;21870:79;;:::i;:::-;21834:117;21975:89;22056:7;22047:6;22036:9;22032:22;21975:89;:::i;:::-;21965:99;;21768:306;21527:554;;;;:::o;22087:170::-;22227:22;22223:1;22215:6;22211:14;22204:46;22087:170;:::o;22263:366::-;22405:3;22426:67;22490:2;22485:3;22426:67;:::i;:::-;22419:74;;22502:93;22591:3;22502:93;:::i;:::-;22620:2;22615:3;22611:12;22604:19;;22263:366;;;:::o;22635:419::-;22801:4;22839:2;22828:9;22824:18;22816:26;;22888:9;22882:4;22878:20;22874:1;22863:9;22859:17;22852:47;22916:131;23042:4;22916:131;:::i;:::-;22908:139;;22635:419;;;:::o;23060:174::-;23200:26;23196:1;23188:6;23184:14;23177:50;23060:174;:::o;23240:366::-;23382:3;23403:67;23467:2;23462:3;23403:67;:::i;:::-;23396:74;;23479:93;23568:3;23479:93;:::i;:::-;23597:2;23592:3;23588:12;23581:19;;23240:366;;;:::o;23612:419::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23865:9;23859:4;23855:20;23851:1;23840:9;23836:17;23829:47;23893:131;24019:4;23893:131;:::i;:::-;23885:139;;23612:419;;;:::o;24037:117::-;24146:1;24143;24136:12;24160:117;24269:1;24266;24259:12;24283:117;24392:1;24389;24382:12;24406:308;24468:4;24558:18;24550:6;24547:30;24544:56;;;24580:18;;:::i;:::-;24544:56;24618:29;24640:6;24618:29;:::i;:::-;24610:37;;24702:4;24696;24692:15;24684:23;;24406:308;;;:::o;24720:421::-;24809:5;24834:66;24850:49;24892:6;24850:49;:::i;:::-;24834:66;:::i;:::-;24825:75;;24923:6;24916:5;24909:21;24961:4;24954:5;24950:16;24999:3;24990:6;24985:3;24981:16;24978:25;24975:112;;;25006:79;;:::i;:::-;24975:112;25096:39;25128:6;25123:3;25118;25096:39;:::i;:::-;24815:326;24720:421;;;;;:::o;25161:355::-;25228:5;25277:3;25270:4;25262:6;25258:17;25254:27;25244:122;;25285:79;;:::i;:::-;25244:122;25395:6;25389:13;25420:90;25506:3;25498:6;25491:4;25483:6;25479:17;25420:90;:::i;:::-;25411:99;;25234:282;25161:355;;;;:::o;25542:1473::-;25625:5;25669:4;25657:9;25652:3;25648:19;25644:30;25641:117;;;25677:79;;:::i;:::-;25641:117;25776:21;25792:4;25776:21;:::i;:::-;25767:30;;25879:1;25868:9;25864:17;25858:24;25909:18;25901:6;25898:30;25895:117;;;25931:79;;:::i;:::-;25895:117;26051:70;26117:3;26108:6;26097:9;26093:22;26051:70;:::i;:::-;26044:4;26037:5;26033:16;26026:96;25807:326;26213:2;26202:9;26198:18;26192:25;26244:18;26236:6;26233:30;26230:117;;;26266:79;;:::i;:::-;26230:117;26386:70;26452:3;26443:6;26432:9;26428:22;26386:70;:::i;:::-;26379:4;26372:5;26368:16;26361:96;26143:325;26536:2;26577:60;26633:3;26624:6;26613:9;26609:22;26577:60;:::i;:::-;26570:4;26563:5;26559:16;26552:86;26478:171;26712:2;26753:60;26809:3;26800:6;26789:9;26785:22;26753:60;:::i;:::-;26746:4;26739:5;26735:16;26728:86;26659:166;26894:3;26936:60;26992:3;26983:6;26972:9;26968:22;26936:60;:::i;:::-;26929:4;26922:5;26918:16;26911:86;26835:173;25542:1473;;;;:::o;27021:550::-;27114:6;27163:2;27151:9;27142:7;27138:23;27134:32;27131:119;;;27169:79;;:::i;:::-;27131:119;27310:1;27299:9;27295:17;27289:24;27340:18;27332:6;27329:30;27326:117;;;27362:79;;:::i;:::-;27326:117;27467:87;27546:7;27537:6;27526:9;27522:22;27467:87;:::i;:::-;27457:97;;27260:304;27021:550;;;;:::o;27577:225::-;27717:34;27713:1;27705:6;27701:14;27694:58;27786:8;27781:2;27773:6;27769:15;27762:33;27577:225;:::o;27808:366::-;27950:3;27971:67;28035:2;28030:3;27971:67;:::i;:::-;27964:74;;28047:93;28136:3;28047:93;:::i;:::-;28165:2;28160:3;28156:12;28149:19;;27808:366;;;:::o;28180:419::-;28346:4;28384:2;28373:9;28369:18;28361:26;;28433:9;28427:4;28423:20;28419:1;28408:9;28404:17;28397:47;28461:131;28587:4;28461:131;:::i;:::-;28453:139;;28180:419;;;:::o;28605:162::-;28745:14;28741:1;28733:6;28729:14;28722:38;28605:162;:::o;28773:366::-;28915:3;28936:67;29000:2;28995:3;28936:67;:::i;:::-;28929:74;;29012:93;29101:3;29012:93;:::i;:::-;29130:2;29125:3;29121:12;29114:19;;28773:366;;;:::o;29145:419::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:180::-;29618:77;29615:1;29608:88;29715:4;29712:1;29705:15;29739:4;29736:1;29729:15;29756:102;29798:8;29845:5;29842:1;29838:13;29817:34;;29756:102;;;:::o;29864:848::-;29925:5;29932:4;29956:6;29947:15;;29980:5;29971:14;;29994:712;30015:1;30005:8;30002:15;29994:712;;;30110:4;30105:3;30101:14;30095:4;30092:24;30089:50;;;30119:18;;:::i;:::-;30089:50;30169:1;30159:8;30155:16;30152:451;;;30584:4;30577:5;30573:16;30564:25;;30152:451;30634:4;30628;30624:15;30616:23;;30664:32;30687:8;30664:32;:::i;:::-;30652:44;;29994:712;;;29864:848;;;;;;;:::o;30718:1073::-;30772:5;30963:8;30953:40;;30984:1;30975:10;;30986:5;;30953:40;31012:4;31002:36;;31029:1;31020:10;;31031:5;;31002:36;31098:4;31146:1;31141:27;;;;31182:1;31177:191;;;;31091:277;;31141:27;31159:1;31150:10;;31161:5;;;31177:191;31222:3;31212:8;31209:17;31206:43;;;31229:18;;:::i;:::-;31206:43;31278:8;31275:1;31271:16;31262:25;;31313:3;31306:5;31303:14;31300:40;;;31320:18;;:::i;:::-;31300:40;31353:5;;;31091:277;;31477:2;31467:8;31464:16;31458:3;31452:4;31449:13;31445:36;31427:2;31417:8;31414:16;31409:2;31403:4;31400:12;31396:35;31380:111;31377:246;;;31533:8;31527:4;31523:19;31514:28;;31568:3;31561:5;31558:14;31555:40;;;31575:18;;:::i;:::-;31555:40;31608:5;;31377:246;31648:42;31686:3;31676:8;31670:4;31667:1;31648:42;:::i;:::-;31633:57;;;;31722:4;31717:3;31713:14;31706:5;31703:25;31700:51;;;31731:18;;:::i;:::-;31700:51;31780:4;31773:5;31769:16;31760:25;;30718:1073;;;;;;:::o;31797:285::-;31857:5;31881:23;31899:4;31881:23;:::i;:::-;31873:31;;31925:27;31943:8;31925:27;:::i;:::-;31913:39;;31971:104;32008:66;31998:8;31992:4;31971:104;:::i;:::-;31962:113;;31797:285;;;;:::o;32088:348::-;32128:7;32151:20;32169:1;32151:20;:::i;:::-;32146:25;;32185:20;32203:1;32185:20;:::i;:::-;32180:25;;32373:1;32305:66;32301:74;32298:1;32295:81;32290:1;32283:9;32276:17;32272:105;32269:131;;;32380:18;;:::i;:::-;32269:131;32428:1;32425;32421:9;32410:20;;32088:348;;;;:::o;32442:232::-;32582:34;32578:1;32570:6;32566:14;32559:58;32651:15;32646:2;32638:6;32634:15;32627:40;32442:232;:::o;32680:366::-;32822:3;32843:67;32907:2;32902:3;32843:67;:::i;:::-;32836:74;;32919:93;33008:3;32919:93;:::i;:::-;33037:2;33032:3;33028:12;33021:19;;32680:366;;;:::o;33052:419::-;33218:4;33256:2;33245:9;33241:18;33233:26;;33305:9;33299:4;33295:20;33291:1;33280:9;33276:17;33269:47;33333:131;33459:4;33333:131;:::i;:::-;33325:139;;33052:419;;;:::o;33477:220::-;33617:34;33613:1;33605:6;33601:14;33594:58;33686:3;33681:2;33673:6;33669:15;33662:28;33477:220;:::o;33703:366::-;33845:3;33866:67;33930:2;33925:3;33866:67;:::i;:::-;33859:74;;33942:93;34031:3;33942:93;:::i;:::-;34060:2;34055:3;34051:12;34044:19;;33703:366;;;:::o;34075:419::-;34241:4;34279:2;34268:9;34264:18;34256:26;;34328:9;34322:4;34318:20;34314:1;34303:9;34299:17;34292:47;34356:131;34482:4;34356:131;:::i;:::-;34348:139;;34075:419;;;:::o;34500:85::-;34545:7;34574:5;34563:16;;34500:85;;;:::o;34591:60::-;34619:3;34640:5;34633:12;;34591:60;;;:::o;34657:154::-;34713:9;34746:59;34762:42;34771:32;34797:5;34771:32;:::i;:::-;34762:42;:::i;:::-;34746:59;:::i;:::-;34733:72;;34657:154;;;:::o;34817:143::-;34910:43;34947:5;34910:43;:::i;:::-;34905:3;34898:56;34817:143;;:::o;34966:898::-;35233:4;35271:3;35260:9;35256:19;35248:27;;35285:71;35353:1;35342:9;35338:17;35329:6;35285:71;:::i;:::-;35366:72;35434:2;35423:9;35419:18;35410:6;35366:72;:::i;:::-;35448;35516:2;35505:9;35501:18;35492:6;35448:72;:::i;:::-;35530;35598:2;35587:9;35583:18;35574:6;35530:72;:::i;:::-;35612:73;35680:3;35669:9;35665:19;35656:6;35612:73;:::i;:::-;35695:79;35769:3;35758:9;35754:19;35745:6;35695:79;:::i;:::-;35784:73;35852:3;35841:9;35837:19;35828:6;35784:73;:::i;:::-;34966:898;;;;;;;;;;:::o;35870:442::-;36019:4;36057:2;36046:9;36042:18;36034:26;;36070:71;36138:1;36127:9;36123:17;36114:6;36070:71;:::i;:::-;36151:72;36219:2;36208:9;36204:18;36195:6;36151:72;:::i;:::-;36233;36301:2;36290:9;36286:18;36277:6;36233:72;:::i;:::-;35870:442;;;;;;:::o;36318:250::-;36394:4;36484:18;36476:6;36473:30;36470:56;;;36506:18;;:::i;:::-;36470:56;36556:4;36548:6;36544:17;36536:25;;36318:250;;;:::o;36593:667::-;36699:5;36724:80;36740:63;36796:6;36740:63;:::i;:::-;36724:80;:::i;:::-;36715:89;;36824:5;36877:4;36869:6;36865:17;36857:6;36853:30;36906:3;36898:6;36895:15;36892:122;;;36925:79;;:::i;:::-;36892:122;37040:6;37023:231;37057:6;37052:3;37049:15;37023:231;;;37132:3;37161:48;37205:3;37193:10;37161:48;:::i;:::-;37156:3;37149:61;37239:4;37234:3;37230:14;37223:21;;37099:155;37083:4;37078:3;37074:14;37067:21;;37023:231;;;37027:21;36705:555;;36593:667;;;;;:::o;37285:363::-;37366:5;37415:3;37408:4;37400:6;37396:17;37392:27;37382:122;;37423:79;;:::i;:::-;37382:122;37527:4;37549:93;37638:3;37630:6;37622;37549:93;:::i;:::-;37540:102;;37372:276;37285:363;;;;:::o;37654:401::-;37748:6;37797:4;37785:9;37776:7;37772:23;37768:34;37765:121;;;37805:79;;:::i;:::-;37765:121;37925:1;37950:88;38030:7;38021:6;38010:9;38006:22;37950:88;:::i;:::-;37940:98;;37896:152;37654:401;;;;:::o;38061:250::-;38137:4;38227:18;38219:6;38216:30;38213:56;;;38249:18;;:::i;:::-;38213:56;38299:4;38291:6;38287:17;38279:25;;38061:250;;;:::o;38336:667::-;38442:5;38467:80;38483:63;38539:6;38483:63;:::i;:::-;38467:80;:::i;:::-;38458:89;;38567:5;38620:4;38612:6;38608:17;38600:6;38596:30;38649:3;38641:6;38638:15;38635:122;;;38668:79;;:::i;:::-;38635:122;38783:6;38766:231;38800:6;38795:3;38792:15;38766:231;;;38875:3;38904:48;38948:3;38936:10;38904:48;:::i;:::-;38899:3;38892:61;38982:4;38977:3;38973:14;38966:21;;38842:155;38826:4;38821:3;38817:14;38810:21;;38766:231;;;38770:21;38448:555;;38336:667;;;;;:::o;39028:363::-;39109:5;39158:3;39151:4;39143:6;39139:17;39135:27;39125:122;;39166:79;;:::i;:::-;39125:122;39270:4;39292:93;39381:3;39373:6;39365;39292:93;:::i;:::-;39283:102;;39115:276;39028:363;;;;:::o;39397:401::-;39491:6;39540:4;39528:9;39519:7;39515:23;39511:34;39508:121;;;39548:79;;:::i;:::-;39508:121;39668:1;39693:88;39773:7;39764:6;39753:9;39749:22;39693:88;:::i;:::-;39683:98;;39639:152;39397:401;;;;:::o;39804:1605::-;39946:6;39954;39962;39970;39978;39986;39994;40002;40010;40059:3;40047:9;40038:7;40034:23;40030:33;40027:120;;;40066:79;;:::i;:::-;40027:120;40186:1;40211:64;40267:7;40258:6;40247:9;40243:22;40211:64;:::i;:::-;40201:74;;40157:128;40324:2;40350:64;40406:7;40397:6;40386:9;40382:22;40350:64;:::i;:::-;40340:74;;40295:129;40463:2;40489:64;40545:7;40536:6;40525:9;40521:22;40489:64;:::i;:::-;40479:74;;40434:129;40602:2;40628:64;40684:7;40675:6;40664:9;40660:22;40628:64;:::i;:::-;40618:74;;40573:129;40741:3;40768:64;40824:7;40815:6;40804:9;40800:22;40768:64;:::i;:::-;40758:74;;40712:130;40881:3;40908:64;40964:7;40955:6;40944:9;40940:22;40908:64;:::i;:::-;40898:74;;40852:130;41021:3;41048:64;41104:7;41095:6;41084:9;41080:22;41048:64;:::i;:::-;41038:74;;40992:130;41161:3;41188:64;41244:7;41235:6;41224:9;41220:22;41188:64;:::i;:::-;41178:74;;41132:130;41301:3;41328:64;41384:7;41375:6;41364:9;41360:22;41328:64;:::i;:::-;41318:74;;41272:130;39804:1605;;;;;;;;;;;:::o;41415:332::-;41536:4;41574:2;41563:9;41559:18;41551:26;;41587:71;41655:1;41644:9;41640:17;41631:6;41587:71;:::i;:::-;41668:72;41736:2;41725:9;41721:18;41712:6;41668:72;:::i;:::-;41415:332;;;;;:::o;41753:442::-;41902:4;41940:2;41929:9;41925:18;41917:26;;41953:71;42021:1;42010:9;42006:17;41997:6;41953:71;:::i;:::-;42034:72;42102:2;42091:9;42087:18;42078:6;42034:72;:::i;:::-;42116;42184:2;42173:9;42169:18;42160:6;42116:72;:::i;:::-;41753:442;;;;;;:::o;42201:116::-;42271:21;42286:5;42271:21;:::i;:::-;42264:5;42261:32;42251:60;;42307:1;42304;42297:12;42251:60;42201:116;:::o;42323:137::-;42377:5;42408:6;42402:13;42393:22;;42424:30;42448:5;42424:30;:::i;:::-;42323:137;;;;:::o;42466:345::-;42533:6;42582:2;42570:9;42561:7;42557:23;42553:32;42550:119;;;42588:79;;:::i;:::-;42550:119;42708:1;42733:61;42786:7;42777:6;42766:9;42762:22;42733:61;:::i;:::-;42723:71;;42679:125;42466:345;;;;:::o;42817:85::-;42862:7;42891:5;42880:16;;42817:85;;;:::o;42908:154::-;42964:9;42997:59;43013:42;43022:32;43048:5;43022:32;:::i;:::-;43013:42;:::i;:::-;42997:59;:::i;:::-;42984:72;;42908:154;;;:::o;43068:143::-;43161:43;43198:5;43161:43;:::i;:::-;43156:3;43149:56;43068:143;;:::o;43217:898::-;43484:4;43522:3;43511:9;43507:19;43499:27;;43536:71;43604:1;43593:9;43589:17;43580:6;43536:71;:::i;:::-;43617:72;43685:2;43674:9;43670:18;43661:6;43617:72;:::i;:::-;43699;43767:2;43756:9;43752:18;43743:6;43699:72;:::i;:::-;43781;43849:2;43838:9;43834:18;43825:6;43781:72;:::i;:::-;43863:73;43931:3;43920:9;43916:19;43907:6;43863:73;:::i;:::-;43946:79;44020:3;44009:9;44005:19;43996:6;43946:79;:::i;:::-;44035:73;44103:3;44092:9;44088:19;44079:6;44035:73;:::i;:::-;43217:898;;;;;;;;;;:::o;44121:182::-;44261:34;44257:1;44249:6;44245:14;44238:58;44121:182;:::o;44309:366::-;44451:3;44472:67;44536:2;44531:3;44472:67;:::i;:::-;44465:74;;44548:93;44637:3;44548:93;:::i;:::-;44666:2;44661:3;44657:12;44650:19;;44309:366;;;:::o;44681:419::-;44847:4;44885:2;44874:9;44870:18;44862:26;;44934:9;44928:4;44924:20;44920:1;44909:9;44905:17;44898:47;44962:131;45088:4;44962:131;:::i;:::-;44954:139;;44681:419;;;:::o;45106:442::-;45255:4;45293:2;45282:9;45278:18;45270:26;;45306:71;45374:1;45363:9;45359:17;45350:6;45306:71;:::i;:::-;45387:72;45455:2;45444:9;45440:18;45431:6;45387:72;:::i;:::-;45469;45537:2;45526:9;45522:18;45513:6;45469:72;:::i;:::-;45106:442;;;;;;:::o;45554:250::-;45630:4;45720:18;45712:6;45709:30;45706:56;;;45742:18;;:::i;:::-;45706:56;45792:4;45784:6;45780:17;45772:25;;45554:250;;;:::o;45829:667::-;45935:5;45960:80;45976:63;46032:6;45976:63;:::i;:::-;45960:80;:::i;:::-;45951:89;;46060:5;46113:4;46105:6;46101:17;46093:6;46089:30;46142:3;46134:6;46131:15;46128:122;;;46161:79;;:::i;:::-;46128:122;46276:6;46259:231;46293:6;46288:3;46285:15;46259:231;;;46368:3;46397:48;46441:3;46429:10;46397:48;:::i;:::-;46392:3;46385:61;46475:4;46470:3;46466:14;46459:21;;46335:155;46319:4;46314:3;46310:14;46303:21;;46259:231;;;46263:21;45941:555;;45829:667;;;;;:::o;46521:363::-;46602:5;46651:3;46644:4;46636:6;46632:17;46628:27;46618:122;;46659:79;;:::i;:::-;46618:122;46763:4;46785:93;46874:3;46866:6;46858;46785:93;:::i;:::-;46776:102;;46608:276;46521:363;;;;:::o;46890:400::-;46984:6;47033:3;47021:9;47012:7;47008:23;47004:33;47001:120;;;47040:79;;:::i;:::-;47001:120;47160:1;47185:88;47265:7;47256:6;47245:9;47241:22;47185:88;:::i;:::-;47175:98;;47131:152;46890:400;;;;:::o;47296:118::-;47367:22;47383:5;47367:22;:::i;:::-;47360:5;47357:33;47347:61;;47404:1;47401;47394:12;47347:61;47296:118;:::o;47420:139::-;47475:5;47506:6;47500:13;47491:22;;47522:31;47547:5;47522:31;:::i;:::-;47420:139;;;;:::o;47565:1913::-;47721:6;47729;47737;47745;47753;47761;47769;47777;47785;47793;47801:7;47851:3;47839:9;47830:7;47826:23;47822:33;47819:120;;;47858:79;;:::i;:::-;47819:120;47978:1;48003:64;48059:7;48050:6;48039:9;48035:22;48003:64;:::i;:::-;47993:74;;47949:128;48116:2;48142:64;48198:7;48189:6;48178:9;48174:22;48142:64;:::i;:::-;48132:74;;48087:129;48255:2;48281:64;48337:7;48328:6;48317:9;48313:22;48281:64;:::i;:::-;48271:74;;48226:129;48394:2;48420:64;48476:7;48467:6;48456:9;48452:22;48420:64;:::i;:::-;48410:74;;48365:129;48533:3;48560:64;48616:7;48607:6;48596:9;48592:22;48560:64;:::i;:::-;48550:74;;48504:130;48673:3;48700:64;48756:7;48747:6;48736:9;48732:22;48700:64;:::i;:::-;48690:74;;48644:130;48813:3;48840:64;48896:7;48887:6;48876:9;48872:22;48840:64;:::i;:::-;48830:74;;48784:130;48953:3;48980:64;49036:7;49027:6;49016:9;49012:22;48980:64;:::i;:::-;48970:74;;48924:130;49093:3;49120:62;49174:7;49165:6;49154:9;49150:22;49120:62;:::i;:::-;49110:72;;49064:128;49231:3;49258:62;49312:7;49303:6;49292:9;49288:22;49258:62;:::i;:::-;49248:72;;49202:128;49369:3;49397:64;49453:7;49444:6;49433:9;49429:22;49397:64;:::i;:::-;49386:75;;49340:131;47565:1913;;;;;;;;;;;;;;:::o;49484:180::-;49532:77;49529:1;49522:88;49629:4;49626:1;49619:15;49653:4;49650:1;49643:15;49670:185;49710:1;49727:20;49745:1;49727:20;:::i;:::-;49722:25;;49761:20;49779:1;49761:20;:::i;:::-;49756:25;;49800:1;49790:35;;49805:18;;:::i;:::-;49790:35;49847:1;49844;49840:9;49835:14;;49670:185;;;;:::o;49861:220::-;50001:34;49997:1;49989:6;49985:14;49978:58;50070:3;50065:2;50057:6;50053:15;50046:28;49861:220;:::o;50087:366::-;50229:3;50250:67;50314:2;50309:3;50250:67;:::i;:::-;50243:74;;50326:93;50415:3;50326:93;:::i;:::-;50444:2;50439:3;50435:12;50428:19;;50087:366;;;:::o;50459:419::-;50625:4;50663:2;50652:9;50648:18;50640:26;;50712:9;50706:4;50702:20;50698:1;50687:9;50683:17;50676:47;50740:131;50866:4;50740:131;:::i;:::-;50732:139;;50459:419;;;:::o;50884:98::-;50935:6;50969:5;50963:12;50953:22;;50884:98;;;:::o;50988:147::-;51089:11;51126:3;51111:18;;50988:147;;;;:::o;51141:373::-;51245:3;51273:38;51305:5;51273:38;:::i;:::-;51327:88;51408:6;51403:3;51327:88;:::i;:::-;51320:95;;51424:52;51469:6;51464:3;51457:4;51450:5;51446:16;51424:52;:::i;:::-;51501:6;51496:3;51492:16;51485:23;;51249:265;51141:373;;;;:::o;51520:271::-;51650:3;51672:93;51761:3;51752:6;51672:93;:::i;:::-;51665:100;;51782:3;51775:10;;51520:271;;;;:::o;51797:222::-;51937:34;51933:1;51925:6;51921:14;51914:58;52006:5;52001:2;51993:6;51989:15;51982:30;51797:222;:::o;52025:366::-;52167:3;52188:67;52252:2;52247:3;52188:67;:::i;:::-;52181:74;;52264:93;52353:3;52264:93;:::i;:::-;52382:2;52377:3;52373:12;52366:19;;52025:366;;;:::o;52397:419::-;52563:4;52601:2;52590:9;52586:18;52578:26;;52650:9;52644:4;52640:20;52636:1;52625:9;52621:17;52614:47;52678:131;52804:4;52678:131;:::i;:::-;52670:139;;52397:419;;;:::o;52822:313::-;52935:4;52973:2;52962:9;52958:18;52950:26;;53022:9;53016:4;53012:20;53008:1;52997:9;52993:17;52986:47;53050:78;53123:4;53114:6;53050:78;:::i;:::-;53042:86;;52822:313;;;;:::o;53141:229::-;53281:34;53277:1;53269:6;53265:14;53258:58;53350:12;53345:2;53337:6;53333:15;53326:37;53141:229;:::o;53376:366::-;53518:3;53539:67;53603:2;53598:3;53539:67;:::i;:::-;53532:74;;53615:93;53704:3;53615:93;:::i;:::-;53733:2;53728:3;53724:12;53717:19;;53376:366;;;:::o;53748:419::-;53914:4;53952:2;53941:9;53937:18;53929:26;;54001:9;53995:4;53991:20;53987:1;53976:9;53972:17;53965:47;54029:131;54155:4;54029:131;:::i;:::-;54021:139;;53748:419;;;:::o;54173:225::-;54313:34;54309:1;54301:6;54297:14;54290:58;54382:8;54377:2;54369:6;54365:15;54358:33;54173:225;:::o;54404:366::-;54546:3;54567:67;54631:2;54626:3;54567:67;:::i;:::-;54560:74;;54643:93;54732:3;54643:93;:::i;:::-;54761:2;54756:3;54752:12;54745:19;;54404:366;;;:::o;54776:419::-;54942:4;54980:2;54969:9;54965:18;54957:26;;55029:9;55023:4;55019:20;55015:1;55004:9;55000:17;54993:47;55057:131;55183:4;55057:131;:::i;:::-;55049:139;;54776:419;;;:::o;55201:179::-;55341:31;55337:1;55329:6;55325:14;55318:55;55201:179;:::o;55386:366::-;55528:3;55549:67;55613:2;55608:3;55549:67;:::i;:::-;55542:74;;55625:93;55714:3;55625:93;:::i;:::-;55743:2;55738:3;55734:12;55727:19;;55386:366;;;:::o;55758:419::-;55924:4;55962:2;55951:9;55947:18;55939:26;;56011:9;56005:4;56001:20;55997:1;55986:9;55982:17;55975:47;56039:131;56165:4;56039:131;:::i;:::-;56031:139;;55758:419;;;:::o

Swarm Source

ipfs://e677c39c10f22e933cee546ee91c39c6dc7287e7fc1e5b62e677b6ade09b6299
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading