Contract 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc57

Contract Overview

Balance:
0 DEV

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xab717a09c230711ecee1be72509d98717b8c2cef2b90f66540405c6747f7efdaApprove24425092022-07-07 18:25:36332 days 22 hrs ago0xc945a5a960fef1a9c3fef8593fc2446d1d7c6146 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x97cae222734053486135f036e354b5f0fe60a94cd60f0f6291e54882e8a96830Approve24276222022-07-05 10:28:54335 days 6 hrs ago0xf9a40a2235bd0a4acb79364c76a3103f7cee62cf IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xa089c175c9b88432f6d9b084376cca79148ff254658ed6bbb237a7cbd17ef8e3Approve23047342022-06-13 13:31:36357 days 3 hrs ago0xc385e1d1ab597bccc30a32776b522cac8ff39f02 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xa5724d86507bd22667a4a7afa6d4e02eb645172c1c5757daa345e68478e29eb6Approve22887482022-06-10 5:54:12360 days 11 hrs ago0xcf7927b2a95f729eeee54f1ae2c43cf51aac67b3 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x5ec239c4b8602a46e3b454457a1d063ef624578a3964deb8c71b92c57f23315bApprove22759622022-06-07 16:25:42363 days 47 mins ago0x583c2f4e7cdbc6f234aa4b535e003c87cb294eca IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x0c740f6ac5f30eb176149593592f683c176559f6467f3acbfd25f6f531ae9e6dApprove22703322022-06-06 13:24:30364 days 3 hrs ago0xb87b4944a9decdc72d7acd941fa024607f8953c8 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x42429013f7613ea5253ea5ed92713cb7282cdadfad0da06650e258a8b8deeefcApprove22454182022-06-01 14:21:06369 days 2 hrs ago0x97618aa68adecbbfc78358b5578ca6dee2ae8e17 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xd06c48ba341f3cf3f55cb9097a389a0c0f84ebe81e259a59fd6a80dfbeeead66Approve22443682022-06-01 9:09:24369 days 8 hrs ago0xcf1c29931a7a9d21f27da389e187b8f27dbf1dbb IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xcb722e405da37670dcea02055233689858306d5cb42275c730ecde52ae13d75fApprove22399662022-05-31 12:10:18370 days 5 hrs ago0x8a9f7ed63c09ec4187bf673177db06c1950f34be IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00006584
0x6c713eb439a2beccd3c05929611ad8e35b6d8d3e8fe39924d08b11557038f35cApprove22399662022-05-31 12:10:18370 days 5 hrs ago0x8a9f7ed63c09ec4187bf673177db06c1950f34be IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011559
0x4830e8c942b24eb07f46017390bfc6ccbb5e5ccac204544ab2d94675d83afdccApprove22389512022-05-31 7:21:24370 days 9 hrs ago0xdd1ba3a8fe6085233639736d93759c027a682e26 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xf838ab709064dae95769734d12604d3692eec719bea0afc4859778eb62cb4081Approve22389502022-05-31 7:21:12370 days 9 hrs ago0x74c1ebc68fced89a6074ec54218cb2e03b02c922 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x94099740db50cff44855a7e2cfa56cca3d3f42999ca86c2b26f403dcff4f2139Approve22389502022-05-31 7:21:12370 days 9 hrs ago0xf177d02242ba9d01e48b782a5b41b615f5f2384e IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xbb330e166aaf7cb04239b7cf2ba0370be234c16a54dd2b4cbd43a8206abfb8a9Approve22338832022-05-30 7:39:54371 days 9 hrs ago0x4c839bd72640903dd81c55ddcb258160ea4dd3bc IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x31e3783ae3e7411dfb4471e8087abc1228c4eb25ab90984e06e129b7b0923138Approve22283862022-05-29 5:54:36372 days 11 hrs ago0xe6d0c2b3e3645d8ca03015a8e6d6479d7f8b9691 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x6b0c0ffac51a22cf99fc51345ba900846336c667cdc8ab21af3f663ab46ea30fApprove22252662022-05-28 15:06:30373 days 2 hrs ago0xbb161f190490c1a411766a758a76f8747486b2fb IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x6f0de56a04c5f99be05caf80a8a43bde434777296c21ca81bf567fa31699b67bApprove22250782022-05-28 14:10:54373 days 3 hrs ago0x347415c44dad33431235820b895df65c27ced75a IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x10a04d4ab990eb748ca16d07d3ba68e187751521adcff44a23338159c193a319Approve22238932022-05-28 8:41:18373 days 8 hrs ago0x4c259ee9e69d4d79e7db7a11f4600474e5dfce2a IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x09873485a977e86914b94a4623522376433d97534f83fd84f1d688c3e0e17394Approve22235452022-05-28 7:01:54373 days 10 hrs ago0xa3032b3ff008941ac805761742803c021ecc99ef IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xedb6a33ae8c73431b2488146adf6de6c8c2446843a89e6b8498d7b439dd1f564Approve22212422022-05-27 20:17:30373 days 20 hrs ago0xd28539e592ba2285d7d55f8c920dc92f728111a6 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xeb521144de3dd7e5a93fec637f72a5d5e060501fe70ee96ebb0370756c8013e5Approve22210802022-05-27 19:29:36373 days 21 hrs ago0xcf0699a11765c32f98ec9d91e93cd52ab3a2ea60 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x9d108bdc592dba3ee0f597a39d99f28d3a865938709fbff3f8d86234430553e1Approve22208682022-05-27 18:31:00373 days 22 hrs ago0x4b925a35bd8449226321f695542534538ddc20da IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x9cbbfb2d987ad10d823c586242d9875a92732c84a829904ab1e5fa73e581877cApprove22206792022-05-27 17:17:00373 days 23 hrs ago0xcaf05746c7891a84a01da12064f12f91f4941fd9 IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0xbb8d49d9b986b58cfc78511576be4432016717b29a9ee06020d43e7c39b86d23Approve22201972022-05-27 15:01:00374 days 2 hrs ago0xf5eafce404570cfaca04350524a808db262d4bcf IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
0x819f15552c2782dfa50f6ba5ed35bfc77c7ae09c4532ed6ddff58c5783440057Approve22201972022-05-27 15:01:00374 days 2 hrs ago0xd81c1d292b0eb8bacbd6852759a68388485a5dbb IN  0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV0.00011634
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x40e55a8ebd90fda21aab18b96af8aaded8d815e4075e4d9ce3e63953ec21316132809812022-12-01 14:49:06186 days 2 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570xa5fd1f6e7980fd5ca9d062a762030d449990bbbf0 DEV
0x40e55a8ebd90fda21aab18b96af8aaded8d815e4075e4d9ce3e63953ec21316132809812022-12-01 14:49:06186 days 2 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x40e55a8ebd90fda21aab18b96af8aaded8d815e4075e4d9ce3e63953ec21316132809812022-12-01 14:49:06186 days 2 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x40e55a8ebd90fda21aab18b96af8aaded8d815e4075e4d9ce3e63953ec21316132809812022-12-01 14:49:06186 days 2 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0x40e55a8ebd90fda21aab18b96af8aaded8d815e4075e4d9ce3e63953ec21316132809812022-12-01 14:49:06186 days 2 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0x5211bbf980d5d57611b074038251f92bb48b591cf763a512d76ea20d183f611b30665492022-10-25 8:11:18223 days 9 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570xa5fd1f6e7980fd5ca9d062a762030d449990bbbf0 DEV
0x5211bbf980d5d57611b074038251f92bb48b591cf763a512d76ea20d183f611b30665492022-10-25 8:11:18223 days 9 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x5211bbf980d5d57611b074038251f92bb48b591cf763a512d76ea20d183f611b30665492022-10-25 8:11:18223 days 9 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x5211bbf980d5d57611b074038251f92bb48b591cf763a512d76ea20d183f611b30665492022-10-25 8:11:18223 days 9 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0x5211bbf980d5d57611b074038251f92bb48b591cf763a512d76ea20d183f611b30665492022-10-25 8:11:18223 days 9 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0xa7426530503cad8287857d4ee8d88db640f69704b5343df0265a624c8c62992f28121192022-09-10 8:30:54268 days 8 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570xa5fd1f6e7980fd5ca9d062a762030d449990bbbf0 DEV
0xa7426530503cad8287857d4ee8d88db640f69704b5343df0265a624c8c62992f28121192022-09-10 8:30:54268 days 8 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0xa7426530503cad8287857d4ee8d88db640f69704b5343df0265a624c8c62992f28121192022-09-10 8:30:54268 days 8 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0xa7426530503cad8287857d4ee8d88db640f69704b5343df0265a624c8c62992f28121192022-09-10 8:30:54268 days 8 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0xa7426530503cad8287857d4ee8d88db640f69704b5343df0265a624c8c62992f28121192022-09-10 8:30:54268 days 8 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0xdb52184a4be26126bcc8307d5acf312ffaa2e4a7a28ae09dd82b7bc448eec99a27612022022-09-01 19:34:54276 days 21 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570xa5fd1f6e7980fd5ca9d062a762030d449990bbbf0 DEV
0xdb52184a4be26126bcc8307d5acf312ffaa2e4a7a28ae09dd82b7bc448eec99a27612022022-09-01 19:34:54276 days 21 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0xdb52184a4be26126bcc8307d5acf312ffaa2e4a7a28ae09dd82b7bc448eec99a27612022022-09-01 19:34:54276 days 21 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0xdb52184a4be26126bcc8307d5acf312ffaa2e4a7a28ae09dd82b7bc448eec99a27612022022-09-01 19:34:54276 days 21 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0xdb52184a4be26126bcc8307d5acf312ffaa2e4a7a28ae09dd82b7bc448eec99a27612022022-09-01 19:34:54276 days 21 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0x1cf5e932e5f515fab6df5770c10306460b0198f37f63b13c567b5f3030e782f727372072022-08-28 10:52:42281 days 6 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570xa5fd1f6e7980fd5ca9d062a762030d449990bbbf0 DEV
0x1cf5e932e5f515fab6df5770c10306460b0198f37f63b13c567b5f3030e782f727372072022-08-28 10:52:42281 days 6 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x1cf5e932e5f515fab6df5770c10306460b0198f37f63b13c567b5f3030e782f727372072022-08-28 10:52:42281 days 6 hrs ago 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570x1a4a94a202b97ce490e867634b2535815b2133490 DEV
0x1cf5e932e5f515fab6df5770c10306460b0198f37f63b13c567b5f3030e782f727372072022-08-28 10:52:42281 days 6 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
0x1cf5e932e5f515fab6df5770c10306460b0198f37f63b13c567b5f3030e782f727372072022-08-28 10:52:42281 days 6 hrs ago 0x46ab221ac1e51968f4c05e57137011c27696d137 0x0e4c6f47aca216c9980d0b2aa43eb9dbb6b8bc570 DEV
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x002ca9e59eb1e6Aa52F2081a08BE72AA1beFA7cF

Contract Name:
UniswapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbase.moonscan.io on 2022-04-28
*/

/**
 *Submitted for verification at moonbase.moonscan.io on 2022-04-25
*/

/**
 *Submitted for verification at moonbase.moonscan.io on 2022-03-25
*/

// Sources flattened with hardhat v2.6.8 https://hardhat.org

// File contracts/uniswapv2/interfaces/IUniswapV2Factory.sol


// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}


// File contracts/uniswapv2/libraries/SafeMath.sol



pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}


// File contracts/uniswapv2/UniswapV2ERC20.sol



pragma solidity =0.6.12;

contract UniswapV2ERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'EnergyFiSwap LP Token';
    string public constant symbol = 'ELP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

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

    constructor() public {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// File contracts/uniswapv2/libraries/Math.sol



pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


// File contracts/uniswapv2/libraries/UQ112x112.sol



pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}


// File contracts/uniswapv2/interfaces/IERC20.sol



pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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


// File contracts/uniswapv2/interfaces/IUniswapV2Callee.sol



pragma solidity >=0.5.0;

interface IUniswapV2Callee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}


// File contracts/uniswapv2/UniswapV2Pair.sol



pragma solidity =0.6.12;






interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract UniswapV2Pair is UniswapV2ERC20 {
    using SafeMathUniswap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'UniswapV2: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');
    }

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

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IUniswapV2Factory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IUniswapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');
        if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
        if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
        if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);
    }
}


// File contracts/uniswapv2/UniswapV2Factory.sol



pragma solidity =0.6.12;


contract UniswapV2Factory is IUniswapV2Factory {
    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

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

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external override view returns (uint) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(UniswapV2Pair).creationCode);
    }

    function createPair(address tokenA, address tokenB) external override returns (address pair) {
        require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'UniswapV2: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(UniswapV2Pair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        UniswapV2Pair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setMigrator(address _migrator) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        migrator = _migrator;
    }

    function setFeeToSetter(address _feeToSetter) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b5060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280601581526020017f456e65726779466953776170204c5020546f6b656e0000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206003819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613b20806101676000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610869578063d505accf1461089d578063dd62ed3e14610936578063fff6cae9146109ae576101a9565b8063ba9a7a56146107d3578063bc25cf77146107f1578063c45a015514610835576101a9565b80637ecebe00116100d35780637ecebe001461063557806389afcb441461068d57806395d89b41146106ec578063a9059cbb1461076f576101a9565b80636a6278421461056757806370a08231146105bf5780637464fc3d14610617576101a9565b806323b872dd116101665780633644e515116101405780633644e515146104a9578063485cc955146104c75780635909c0d51461052b5780635a3d549314610549576101a9565b806323b872dd146103e657806330adf81f1461046a578063313ce56714610488576101a9565b8063022c0d9f146101ae57806306fdde031461025b5780630902f1ac146102de578063095ea7b3146103305780630dfe16811461039457806318160ddd146103c8575b600080fd5b610259600480360360808110156101c457600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561021557600080fd5b82018360208201111561022757600080fd5b8035906020019184600183028401116401000000008311171561024957600080fd5b90919293919293905050506109b8565b005b610263611163565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a3578082015181840152602081019050610288565b50505050905090810190601f1680156102d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e661119c565b60405180846dffffffffffffffffffffffffffff168152602001836dffffffffffffffffffffffffffff1681526020018263ffffffff168152602001935050505060405180910390f35b61037c6004803603604081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111f9565b60405180821515815260200191505060405180910390f35b61039c611210565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103d0611236565b6040518082815260200191505060405180910390f35b610452600480360360608110156103fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061123c565b60405180821515815260200191505060405180910390f35b610472611407565b6040518082815260200191505060405180910390f35b61049061142e565b604051808260ff16815260200191505060405180910390f35b6104b1611433565b6040518082815260200191505060405180910390f35b610529600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611439565b005b610533611582565b6040518082815260200191505060405180910390f35b610551611588565b6040518082815260200191505060405180910390f35b6105a96004803603602081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061158e565b6040518082815260200191505060405180910390f35b610601600480360360208110156105d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbc565b6040518082815260200191505060405180910390f35b61061f611cd4565b6040518082815260200191505060405180910390f35b6106776004803603602081101561064b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cda565b6040518082815260200191505060405180910390f35b6106cf600480360360208110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf2565b604051808381526020018281526020019250505060405180910390f35b6106f4612287565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610734578082015181840152602081019050610719565b50505050905090810190601f1680156107615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107bb6004803603604081101561078557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122c0565b60405180821515815260200191505060405180910390f35b6107db6122d7565b6040518082815260200191505060405180910390f35b6108336004803603602081101561080757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122dd565b005b61083d61258c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108716125b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610934600480360360e08110156108b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506125d8565b005b6109986004803603604081101561094c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ed565b6040518082815260200191505060405180910390f35b6109b6612912565b005b6001600c5414610a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f556e697377617056323a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c819055506000851180610a475750600084115b610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a316025913960400191505060405180910390fd5b600080610aa761119c565b5091509150816dffffffffffffffffffffffffffff1687108015610ada5750806dffffffffffffffffffffffffffff1686105b610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a7a6021913960400191505060405180910390fd5b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015610be857508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f556e697377617056323a20494e56414c49445f544f000000000000000000000081525060200191505060405180910390fd5b60008b1115610c6f57610c6e828a8d612b66565b5b60008a1115610c8457610c83818a8c612b66565b5b6000888890501115610d56578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dbd57600080fd5b505afa158015610dd1573d6000803e3d6000fd5b505050506040513d6020811015610de757600080fd5b810190808051906020019092919050505093508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6157600080fd5b505afa158015610e75573d6000803e3d6000fd5b505050506040513d6020811015610e8b57600080fd5b810190808051906020019092919050505092505050600089856dffffffffffffffffffffffffffff16038311610ec2576000610ed8565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610efc576000610f12565b89856dffffffffffffffffffffffffffff160383035b90506000821180610f235750600081115b610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613a566024913960400191505060405180910390fd5b6000610fb4610f91600385612d9d90919063ffffffff16565b610fa66103e888612d9d90919063ffffffff16565b612e3290919063ffffffff16565b90506000610ff2610fcf600385612d9d90919063ffffffff16565b610fe46103e888612d9d90919063ffffffff16565b612e3290919063ffffffff16565b905061103c620f424061102e896dffffffffffffffffffffffffffff168b6dffffffffffffffffffffffffffff16612d9d90919063ffffffff16565b612d9d90919063ffffffff16565b61104f8284612d9d90919063ffffffff16565b10156110c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f556e697377617056323a204b000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506110d184848888612eb5565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050506001600c819055505050505050565b6040518060400160405280601581526020017f456e65726779466953776170204c5020546f6b656e000000000000000000000081525081565b6000806000600860009054906101000a90046dffffffffffffffffffffffffffff1692506008600e9054906101000a90046dffffffffffffffffffffffffffff1691506008601c9054906101000a900463ffffffff169050909192565b6000611206338484613213565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113f15761137082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113fc8484846132fe565b600190509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e697377617056323a20464f5242494444454e00000000000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60095481565b600a5481565b60006001600c5414611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f556e697377617056323a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c8190555060008061161b61119c565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d60208110156116d557600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561177357600080fd5b505afa158015611787573d6000803e3d6000fd5b505050506040513d602081101561179d57600080fd5b8101908080519060200190929190505050905060006117d5856dffffffffffffffffffffffffffff1684612e3290919063ffffffff16565b905060006117fc856dffffffffffffffffffffffffffff1684612e3290919063ffffffff16565b9050600061180a8787613492565b90506000805490506000811415611b07576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cd07e476040518163ffffffff1660e01b815260040160206040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b505050506040513d60208110156118af57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611a20578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d602081101561196657600080fd5b8101908080519060200190929190505050995060008a1180156119a957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b611a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4261642064657369726564206c6971756964697479000000000000000000000081525060200191505060405180910390fd5b611b01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ac2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d757374206e6f742068617665206d69677261746f720000000000000000000081525060200191505060405180910390fd5b611af16103e8611ae3611ade8789612d9d90919063ffffffff16565b613673565b612e3290919063ffffffff16565b9950611b0060006103e86136d5565b5b50611b6a565b611b67886dffffffffffffffffffffffffffff16611b2e8387612d9d90919063ffffffff16565b81611b3557fe5b04886dffffffffffffffffffffffffffff16611b5a8487612d9d90919063ffffffff16565b81611b6157fe5b046137ef565b98505b60008911611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613ac36028913960400191505060405180910390fd5b611bcd8a8a6136d5565b611bd986868a8a612eb5565b8115611c5157611c4a6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612d9d90919063ffffffff16565b600b819055505b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250505050505050506001600c81905550919050565b60016020528060005260406000206000915090505481565b600b5481565b60046020528060005260406000206000915090505481565b6000806001600c5414611d6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f556e697377617056323a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c81905550600080611d8061119c565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e3c57600080fd5b505afa158015611e50573d6000803e3d6000fd5b505050506040513d6020811015611e6657600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ee257600080fd5b505afa158015611ef6573d6000803e3d6000fd5b505050506040513d6020811015611f0c57600080fd5b810190808051906020019092919050505090506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611f6f8888613492565b905060008054905080611f8b8685612d9d90919063ffffffff16565b81611f9257fe5b049a5080611fa98585612d9d90919063ffffffff16565b81611fb057fe5b04995060008b118015611fc3575060008a115b612018576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613a9b6028913960400191505060405180910390fd5b6120223084613808565b61202d878d8d612b66565b612038868d8c612b66565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561209f57600080fd5b505afa1580156120b3573d6000803e3d6000fd5b505050506040513d60208110156120c957600080fd5b810190808051906020019092919050505094508573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561214357600080fd5b505afa158015612157573d6000803e3d6000fd5b505050506040513d602081101561216d57600080fd5b8101908080519060200190929190505050935061218c85858b8b612eb5565b8115612204576121fd6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612d9d90919063ffffffff16565b600b819055505b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020017f454c50000000000000000000000000000000000000000000000000000000000081525081565b60006122cd3384846132fe565b6001905092915050565b6103e881565b6001600c5414612355576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f556e697377617056323a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506124958284612490600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561244757600080fd5b505afa15801561245b573d6000803e3d6000fd5b505050506040513d602081101561247157600080fd5b8101908080519060200190929190505050612e3290919063ffffffff16565b612b66565b61257f818461257a6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561253157600080fd5b505afa158015612545573d6000803e3d6000fd5b505050506040513d602081101561255b57600080fd5b8101908080519060200190929190505050612e3290919063ffffffff16565b612b66565b50506001600c8190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f556e697377617056323a2045585049524544000000000000000000000000000081525060200191505060405180910390fd5b60006003547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156127f1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561286557508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6128d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f556e697377617056323a20494e56414c49445f5349474e41545552450000000081525060200191505060405180910390fd5b6128e2898989613213565b505050505050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b6001600c541461298a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f556e697377617056323a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c81905550612b5c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a1e57600080fd5b505afa158015612a32573d6000803e3d6000fd5b505050506040513d6020811015612a4857600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b8101908080519060200190929190505050600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff16612eb5565b6001600c81905550565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612c7d5780518252602082019150602081019050602083039250612c5a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612cdf576040519150601f19603f3d011682016040523d82523d6000602084013e612ce4565b606091505b5091509150818015612d245750600081511480612d235750808060200190516020811015612d1157600080fd5b81019080805190602001909291905050505b5b612d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f556e697377617056323a205452414e534645525f4641494c454400000000000081525060200191505060405180910390fd5b5050505050565b600080821480612dba5750828283850292508281612db757fe5b04145b612e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284039150811115612eaf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168411158015612f2557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168311155b612f97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f556e697377617056323a204f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b60006401000000004281612fa757fe5b06905060006008601c9054906101000a900463ffffffff168203905060008163ffffffff16118015612fea57506000846dffffffffffffffffffffffffffff1614155b801561300757506000836dffffffffffffffffffffffffffff1614155b156130e9578063ffffffff1661304c8561302086613922565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661394d90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16026009600082825401925050819055508063ffffffff166130ba8461308e87613922565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661394d90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600a600082825401925050819055505b85600860006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550846008600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550816008601c6101000a81548163ffffffff021916908363ffffffff1602179055507f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff1660405180836dffffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61335081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ad90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156134fd57600080fd5b505afa158015613511573d6000803e3d6000fd5b505050506040513d602081101561352757600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141591506000600b549050821561365957600081146136545760006135bf6135ba866dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff16612d9d90919063ffffffff16565b613673565b905060006135cc83613673565b9050808211156136515760006135ff6135ee8385612e3290919063ffffffff16565b600054612d9d90919063ffffffff16565b905060006136298361361b600587612d9d90919063ffffffff16565b6139ad90919063ffffffff16565b9050600081838161363657fe5b049050600081111561364d5761364c87826136d5565b5b5050505b50505b61366b565b6000811461366a576000600b819055505b5b505092915050565b600060038211156136c257819050600060016002848161368f57fe5b040190505b818110156136bc578091506002818285816136ab57fe5b0401816136b457fe5b049050613694565b506136d0565b600082146136cf57600190505b5b919050565b6136ea816000546139ad90919063ffffffff16565b60008190555061374281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ad90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008183106137fe5781613800565b825b905092915050565b61385a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b281600054612e3290919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16816139a457fe5b04905092915050565b6000828284019150811015613a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a26469706673582212203f5f5064d16c70db16e35f226c7082a3f3e27563d83f99c10d803336ba489da664736f6c634300060c0033

Deployed ByteCode Sourcemap

8012:10161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15649:1903;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1911:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9024:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3968:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8313:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2057:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4270:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2349:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2015:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2206:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10084:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8664:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8703;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12278:1653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2088:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8742:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2464:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14043:1494;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1971:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4123:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8134:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17601:348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8284:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8341:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4579:674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2136:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17998:172;;;:::i;:::-;;15649:1903;8927:1;8915:8;;:13;8907:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:1;8961:8;:12;;;;15776:1:::1;15763:10;:14;:32;;;;15794:1;15781:10;:14;15763:32;15755:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15849:17;15868::::0;15890:13:::1;:11;:13::i;:::-;15848:55;;;;;15950:9;15937:22;;:10;:22;:48;;;;;15976:9;15963:22;;:10;:22;15937:48;15929:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16036:13;16060::::0;16150:15:::1;16168:6;;;;;;;;;;;16150:24;;16185:15;16203:6;;;;;;;;;;;16185:24;;16234:7;16228:13;;:2;:13;;;;:30;;;;;16251:7;16245:13;;:2;:13;;;;16228:30;16220:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16312:1;16299:10;:14;16295:58;;;16315:38;16329:7;16338:2;16342:10;16315:13;:38::i;:::-;16295:58;16415:1;16402:10;:14;16398:58;;;16418:38;16432:7;16441:2;16445:10;16418:13;:38::i;:::-;16398:58;16519:1;16505:4;;:11;;:15;16501:97;;;16539:2;16522:34;;;16557:10;16569;16581;16593:4;;16522:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16501:97;16634:7;16620:32;;;16661:4;16620:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16609:58;;16703:7;16689:32;;;16730:4;16689:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16678:58;;8984:1;;16758:14;16798:10;16786:9;:22;;;16775:8;:33;:75;;16849:1;16775:75;;;16835:10;16823:9;:22;;;16811:8;:35;16775:75;16758:92;;16861:14;16901:10;16889:9;:22;;;16878:8;:33;:75;;16952:1;16878:75;;;16938:10;16926:9;:22;;;16914:8;:35;16878:75;16861:92;;16984:1;16972:9;:13;:30;;;;17001:1;16989:9;:13;16972:30;16964:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17129:21;17153:40;17176:16;17190:1;17176:9;:13;;:16;;;;:::i;:::-;17153:18;17166:4;17153:8;:12;;:18;;;;:::i;:::-;:22;;:40;;;;:::i;:::-;17129:64;;17204:21;17228:40;17251:16;17265:1;17251:9;:13;;:16;;;;:::i;:::-;17228:18;17241:4;17228:8;:12;;:18;;;;:::i;:::-;:22;;:40;;;;:::i;:::-;17204:64;;17329:43;17364:7;17329:30;17349:9;17329:30;;17334:9;17329:15;;:19;;:30;;;;:::i;:::-;:34;;:43;;;;:::i;:::-;17287:38;17308:16;17287;:20;;:38;;;;:::i;:::-;:85;;17279:110;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8984:1;;17413:49;17421:8;17431;17441:9;17452;17413:7;:49::i;:::-;17541:2;17478:66;;17483:10;17478:66;;;17495:9;17506;17517:10;17529;17478:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8984:1;;;;;;9007::::0;8996:8;:12;;;;15649:1903;;;;;:::o;1911:53::-;;;;;;;;;;;;;;;;;;;:::o;9024:231::-;9068:17;9087;9106:26;9157:8;;;;;;;;;;;9145:20;;9188:8;;;;;;;;;;;9176:20;;9229:18;;;;;;;;;;;9207:40;;9024:231;;;:::o;3968:147::-;4032:4;4049:36;4058:10;4070:7;4079:5;4049:8;:36::i;:::-;4103:4;4096:11;;3968:147;;;;:::o;8313:21::-;;;;;;;;;;;;;:::o;2057:24::-;;;;:::o;4270:301::-;4348:4;4405:2;4369:9;:15;4379:4;4369:15;;;;;;;;;;;;;;;:27;4385:10;4369:27;;;;;;;;;;;;;;;;:39;4365:140;;4455:38;4487:5;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:27;4471:10;4455:27;;;;;;;;;;;;;;;;:31;;:38;;;;:::i;:::-;4425:9;:15;4435:4;4425:15;;;;;;;;;;;;;;;:27;4441:10;4425:27;;;;;;;;;;;;;;;:68;;;;4365:140;4515:26;4525:4;4531:2;4535:5;4515:9;:26::i;:::-;4559:4;4552:11;;4270:301;;;;;:::o;2349:108::-;2391:66;2349:108;;;:::o;2015:35::-;2048:2;2015:35;:::o;2206:31::-;;;;:::o;10084:210::-;10180:7;;;;;;;;;;;10166:21;;:10;:21;;;10158:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10252:7;10243:6;;:16;;;;;;;;;;;;;;;;;;10279:7;10270:6;;:16;;;;;;;;;;;;;;;;;;10084:210;;:::o;8664:32::-;;;;:::o;8703:::-;;;;:::o;12278:1653::-;12327:14;8927:1;8915:8;;:13;8907:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:1;8961:8;:12;;;;12355:17:::1;12374::::0;12396:13:::1;:11;:13::i;:::-;12354:55;;;;;12435:13;12465:6;;;;;;;;;;;12451:31;;;12491:4;12451:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12435:62;;12508:13;12538:6;;;;;;;;;;;12524:31;;;12564:4;12524:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12508:62;;12581:12;12596:23;12609:9;12596:23;;:8;:12;;:23;;;;:::i;:::-;12581:38;;12630:12;12645:23;12658:9;12645:23;;:8;:12;;:23;;;;:::i;:::-;12630:38;;12681:10;12694:30;12703:9;12714;12694:8;:30::i;:::-;12681:43;;12735:17;12755:11:::0;::::1;12735:31;;12875:1;12859:12;:17;12855:751;;;12893:16;12930:7;;;;;;;;;;;12912:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12893:56;;12982:8;12968:22;;:10;:22;;;12964:500;;;13033:8;13023:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13011:50;;13100:1;13088:9;:13;:41;;;;;13126:2;13105:9;:24;;13088:41;13080:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12964:500;;;13224:1;13204:22;;:8;:22;;;13196:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13284:54;8175:5;13284:31;13294:20;13306:7;13294;:11;;:20;;;;:::i;:::-;13284:9;:31::i;:::-;:35;;:54;;;;:::i;:::-;13272:66;;13357:36;13371:1;8175:5;13357;:36::i;:::-;12964:500;12855:751;;;;13508:86;13545:9;13517:37;;:25;13529:12;13517:7;:11;;:25;;;;:::i;:::-;:37;;;;;;13584:9;13556:37;;:25;13568:12;13556:7;:11;;:25;;;;:::i;:::-;:37;;;;;;13508:8;:86::i;:::-;13496:98;;12855:751;13636:1;13624:9;:13;13616:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13693:20;13699:2;13703:9;13693:5;:20::i;:::-;13726:49;13734:8;13744;13754:9;13765;13726:7;:49::i;:::-;13790:5;13786:47;;;13805:28;13824:8;;;;;;;;;;;13805:28;;13810:8;;;;;;;;;;;13805:14;;:18;;:28;;;;:::i;:::-;13797:5;:36;;;;13786:47;13894:10;13889:34;;;13906:7;13915;13889:34;;;;;;;;;;;;;;;;;;;;;;;;8984:1;;;;;;;;9007::::0;8996:8;:12;;;;12278:1653;;;:::o;2088:41::-;;;;;;;;;;;;;;;;;:::o;8742:17::-;;;;:::o;2464:38::-;;;;;;;;;;;;;;;;;:::o;14043:1494::-;14092:12;14106;8927:1;8915:8;;:13;8907:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:1;8961:8;:12;;;;14132:17:::1;14151::::0;14173:13:::1;:11;:13::i;:::-;14131:55;;;;;14212:15;14230:6;;;;;;;;;;;14212:24;;14293:15;14311:6;;;;;;;;;;;14293:24;;14374:13;14404:7;14390:32;;;14431:4;14390:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14374:63;;14448:13;14478:7;14464:32;;;14505:4;14464:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14448:63;;14522:14;14539:9;:24;14557:4;14539:24;;;;;;;;;;;;;;;;14522:41;;14576:10;14589:30;14598:9;14609;14589:8;:30::i;:::-;14576:43;;14630:17;14650:11:::0;::::1;14630:31;;14786:12;14760:23;14774:8;14760:9;:13;;:23;;;;:::i;:::-;:38;;;;;;14750:48;;14893:12;14867:23;14881:8;14867:9;:13;;:23;;;;:::i;:::-;:38;;;;;;14857:48;;14982:1;14972:7;:11;:26;;;;;14997:1;14987:7;:11;14972:26;14964:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15054:31;15068:4;15075:9;15054:5;:31::i;:::-;15096:35;15110:7;15119:2;15123:7;15096:13;:35::i;:::-;15142;15156:7;15165:2;15169:7;15142:13;:35::i;:::-;15213:7;15199:32;;;15240:4;15199:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15188:58;;15282:7;15268:32;;;15309:4;15268:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15257:58;;15328:49;15336:8;15346;15356:9;15367;15328:7;:49::i;:::-;15392:5;15388:47;;;15407:28;15426:8;;;;;;;;;;;15407:28;;15412:8;;;;;;;;;;;15407:14;;:18;;:28;;;;:::i;:::-;15399:5;:36;;;;15388:47;15526:2;15491:38;;15496:10;15491:38;;;15508:7;15517;15491:38;;;;;;;;;;;;;;;;;;;;;;;;8984:1;;;;;;;;;9007::::0;8996:8;:12;;;;14043:1494;;;:::o;1971:37::-;;;;;;;;;;;;;;;;;;;:::o;4123:139::-;4183:4;4200:32;4210:10;4222:2;4226:5;4200:9;:32::i;:::-;4250:4;4243:11;;4123:139;;;;:::o;8134:46::-;8175:5;8134:46;:::o;17601:348::-;8927:1;8915:8;;:13;8907:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:1;8961:8;:12;;;;17652:15:::1;17670:6;;;;;;;;;;;17652:24;;17702:15;17720:6;;;;;;;;;;;17702:24;;17752:89;17766:7;17775:2;17779:61;17831:8;;;;;;;;;;;17779:61;;17793:7;17779:32;;;17820:4;17779:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:51;;:61;;;;:::i;:::-;17752:13;:89::i;:::-;17852;17866:7;17875:2;17879:61;17931:8;;;;;;;;;;;17879:61;;17893:7;17879:32;;;17920:4;17879:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:51;;:61;;;;:::i;:::-;17852:13;:89::i;:::-;8984:1;;9007::::0;8996:8;:12;;;;17601:348;:::o;8284:22::-;;;;;;;;;;;;;:::o;8341:21::-;;;;;;;;;;;;;:::o;4579:674::-;4725:15;4713:8;:27;;4705:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4774:14;4879:16;;2391:66;4935:15;;4952:5;4959:7;4968:5;4975:6;:13;4982:5;4975:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;4992:8;4924:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4914:88;;;;;;4815:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4791:237;;;;;;4774:254;;5039:24;5066:26;5076:6;5084:1;5087;5090;5066:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5039:53;;5139:1;5111:30;;:16;:30;;;;:59;;;;;5165:5;5145:25;;:16;:25;;;5111:59;5103:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5214:31;5223:5;5230:7;5239:5;5214:8;:31::i;:::-;4579:674;;;;;;;;;:::o;2136:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17998:172::-;8927:1;8915:8;;:13;8907:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:1;8961:8;:12;;;;18039:123:::1;18061:6;;;;;;;;;;;18047:31;;;18087:4;18047:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18109:6;;;;;;;;;;;18095:31;;;18135:4;18095:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18143:8;;;;;;;;;;;18153;;;;;;;;;;;18039:7;:123::i;:::-;9007:1:::0;8996:8;:12;;;;17998:172::o;9263:287::-;9345:12;9359:17;9380:5;:10;;8239:34;;;;;;;;;;;;;;;;;8229:45;;;;;;9424:2;9428:5;9391:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9380:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:91;;;;9454:7;:57;;;;;9481:1;9466:4;:11;:16;:44;;;;9497:4;9486:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9466:44;9454:57;9446:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9263:287;;;;;:::o;1608:142::-;1660:6;1692:1;1687;:6;:30;;;;1716:1;1711;1706;1702;:5;1698:9;;;1697:15;;;;;;:20;1687:30;1679:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1608:142;;;;:::o;1471:129::-;1523:6;1565:1;1559;1555;:5;1551:9;;;1550:16;;1542:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:129;;;;:::o;10379:860::-;10511:2;10491:23;;:8;:23;;:50;;;;;10538:2;10518:23;;:8;:23;;10491:50;10483:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10576:21;10625:5;10607:15;:23;;;;;;10576:55;;10642:18;10680;;;;;;;;;;;10663:14;:35;10642:56;;10750:1;10736:11;:15;;;:33;;;;;10768:1;10755:9;:14;;;;10736:33;:51;;;;;10786:1;10773:9;:14;;;;10736:51;10732:336;;;10942:11;10889:64;;10894:44;10928:9;10894:27;10911:9;10894:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;10889:50;;:64;10865:20;;:88;;;;;;;;;;;11045:11;10992:64;;10997:44;11031:9;10997:27;11014:9;10997:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;10992:50;;:64;10968:20;;:88;;;;;;;;;;;10732:336;11097:8;11078;;:28;;;;;;;;;;;;;;;;;;11136:8;11117;;:28;;;;;;;;;;;;;;;;;;11177:14;11156:18;;:35;;;;;;;;;;;;;;;;;;11207:24;11212:8;;;;;;;;;;;11222;;;;;;;;;;;11207:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;10379:860;;;;;;:::o;3563:169::-;3672:5;3644:9;:16;3654:5;3644:16;;;;;;;;;;;;;;;:25;3661:7;3644:25;;;;;;;;;;;;;;;:33;;;;3709:7;3693:31;;3702:5;3693:31;;;3718:5;3693:31;;;;;;;;;;;;;;;;;;3563:169;;;:::o;3740:220::-;3834:26;3854:5;3834:9;:15;3844:4;3834:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3816:9;:15;3826:4;3816:15;;;;;;;;;;;;;;;:44;;;;3887:24;3905:5;3887:9;:13;3897:2;3887:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;3871:9;:13;3881:2;3871:13;;;;;;;;;;;;;;;:40;;;;3942:2;3927:25;;3936:4;3927:25;;;3946:5;3927:25;;;;;;;;;;;;;;;;;;3740:220;;;:::o;11329:837::-;11402:10;11425:13;11459:7;;;;;;;;;;;11441:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11425:50;;11511:1;11494:19;;:5;:19;;;;11486:27;;11524:11;11538:5;;11524:19;;11573:5;11569:590;;;11609:1;11599:6;:11;11595:494;;11631:10;11644:41;11654:30;11674:9;11654:30;;11659:9;11654:15;;:19;;:30;;;;:::i;:::-;11644:9;:41::i;:::-;11631:54;;11704:14;11721:17;11731:6;11721:9;:17::i;:::-;11704:34;;11769:9;11761:5;:17;11757:317;;;11803:14;11820:37;11836:20;11846:9;11836:5;:9;;:20;;;;:::i;:::-;11820:11;;:15;;:37;;;;:::i;:::-;11803:54;;11880:16;11899:27;11916:9;11899:12;11909:1;11899:5;:9;;:12;;;;:::i;:::-;:16;;:27;;;;:::i;:::-;11880:46;;11949:14;11978:11;11966:9;:23;;;;;;11949:40;;12028:1;12016:9;:13;12012:42;;;12031:23;12037:5;12044:9;12031:5;:23::i;:::-;12012:42;11757:317;;;;11595:494;;;11569:590;;;12120:1;12110:6;:11;12106:53;;12146:1;12138:5;:9;;;;12106:53;11569:590;11329:837;;;;;;:::o;5633:303::-;5678:6;5705:1;5701;:5;5697:232;;;5727:1;5723:5;;5743:6;5760:1;5756;5752;:5;;;;;;:9;5743:18;;5776:92;5787:1;5783;:5;5776:92;;;5813:1;5809:5;;5851:1;5846;5842;5838;:5;;;;;;:9;5837:15;;;;;;5833:19;;5776:92;;;5697:232;;;;5894:1;5889;:6;5885:44;;5916:1;5912:5;;5885:44;5697:232;5633:303;;;:::o;3137:201::-;3210:22;3226:5;3210:11;;:15;;:22;;;;:::i;:::-;3196:11;:36;;;;3259:24;3277:5;3259:9;:13;3269:2;3259:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;3243:9;:13;3253:2;3243:13;;;;;;;;;;;;;;;:40;;;;3320:2;3299:31;;3316:1;3299:31;;;3324:5;3299:31;;;;;;;;;;;;;;;;;;3137:201;;:::o;5419:96::-;5471:6;5498:1;5494;:5;:13;;5506:1;5494:13;;;5502:1;5494:13;5490:17;;5419:96;;;;:::o;3346:209::-;3425:26;3445:5;3425:9;:15;3435:4;3425:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3407:9;:15;3417:4;3407:15;;;;;;;;;;;;;;;:44;;;;3476:22;3492:5;3476:11;;:15;;:22;;;;:::i;:::-;3462:11;:36;;;;3537:1;3514:33;;3523:4;3514:33;;;3541:5;3514:33;;;;;;;;;;;;;;;;;;3346:209;;:::o;6298:120::-;6348:9;6243:6;6382:1;6374:10;;:17;6370:21;;6298:120;;;:::o;6489:108::-;6549:9;6587:1;6579:10;;6575:14;;:1;:14;;;;;;;;6571:18;;6489:108;;;;:::o;1335:128::-;1387:6;1429:1;1423;1419;:5;1415:9;;;1414:16;;1406:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1335:128;;;;:::o

Swarm Source

ipfs://3f5f5064d16c70db16e35f226c7082a3f3e27563d83f99c10d803336ba489da6
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading