Contract 0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4 21

 
Txn Hash Method
Block
From
To
Value
0x1b88b0cf6b28e2bec0ee5db76b96632226a485a693d987a566c43f41a6966fa6Buy Shares132301942024-04-16 6:42:155 secs ago0x03d91bccf082b765c6a06b3f00eb5023f86296f4 IN  Friend.tech: Shares0 ETH0.0000010396440.018973653
0xe0d3765180c284d1d6faa6d1d21634339c023cc6ff1d8287ee551d446f917f19Buy Shares132301932024-04-16 6:42:137 secs ago0xc1019cee89c2cc453fc6eea1a4e9ec921cf45223 IN  Friend.tech: Shares0 ETH0.0000010882810.018988505
0x4e4f9d537bf0ab7fb94afbf031fc08fd38f1c3f3c0c5845d687c7aaa2972d4acBuy Shares132301932024-04-16 6:42:137 secs ago0x67cfe58ea98ac483cda3cea9136d26ec0ce2f7d9 IN  Friend.tech: Shares0 ETH0.000001040810.018988505
0x5efc793e88427d0baedf11a098c8b4f51535f876769b54b1c428c35f4d3b8fdfBuy Shares132301922024-04-16 6:42:119 secs ago0xa0b966392d5b470c90807c707afa6847be800b51 IN  Friend.tech: Shares0 ETH0.0000010901930.019007642
0x4f48c9d6672270a8a8b15a6a422bc876bd66d9b7569cb7dc1e9c86169614e0c4Buy Shares132301922024-04-16 6:42:119 secs ago0xd7943ef6c799f3060a48c2a85d27ba73d9afc6d9 IN  Friend.tech: Shares0.01546875 ETH0.0000109716870.118997642
0x2b6c545c61777dfef6586452de8c83ff9bfc51de6fa6fd6a0ad70014b9b3d3f7Buy Shares132301912024-04-16 6:42:0911 secs ago0x1f991eb5202cf638025096434abd0029056d1c20 IN  Friend.tech: Shares0 ETH0.0000010442720.019044721
0xf8e46d6cd10536e9d0716cb08349c3e6df9924af00c8ab581e642b5b284dbe48Buy Shares132301902024-04-16 6:42:0713 secs ago0xa75f6af2d6916097c125bd327f5bfe36028ddc83 IN  Friend.tech: Shares0 ETH0.0000010464910.019079215
0xeb85186ad2bc42f986b3875623e8beda9bbf0c16fcbecfd90ff8d5f223008109Buy Shares132301902024-04-16 6:42:0713 secs ago0xf57e5759ae2f91b43b0346f4b06793c1e692bda9 IN  Friend.tech: Shares0 ETH0.0000010941890.019079215
0x7b78ffcec9ec34f4b61349258ce34b71af1e630ba7c5fb28c35cffac3f17b4b6Buy Shares132301882024-04-16 6:42:0317 secs ago0xf7200143cad24c3a454fa6d3715c3c22835b3dd4 IN  Friend.tech: Shares0 ETH0.0000010496450.019138347
0xd41135ec32e101d4e4012c8edb07f228dd06c4abaf80d9f6063b3a8c8c207dadBuy Shares132301882024-04-16 6:42:0317 secs ago0xa924151c5b65a92738f4827d9084f4b08c8b8beb IN  Friend.tech: Shares0 ETH0.000001097110.019138347
0x4a6b92c0f065d69764b372a94aa4d577f5bc78b9b67f2ba027780a6691306402Buy Shares132301882024-04-16 6:42:0317 secs ago0x6a8dbf5667d5ab846ebd2e4ec7e5a2fac55ea579 IN  Friend.tech: Shares1.716275 ETH0.0000109841060.119128347
0x1e59ac2845b4c319016fb215f9ac34d23f28e410bd0340189268ae1a69014b6fBuy Shares132301872024-04-16 6:42:0119 secs ago0xc11a66db2553b6868742f47529bed130a1a0735b IN  Friend.tech: Shares0 ETH0.0000010468060.019085123
0x5c912ff9dcc58635ce0df3d4001e6a72c5e1616f4e5872f2d6dcd77f7cc27b4cBuy Shares132301872024-04-16 6:42:0119 secs ago0x47156ca74345abc1cdf79693b7122a517d637d28 IN  Friend.tech: Shares0 ETH0.0000010945190.019085123
0x68d53ee709bd5f0fe52daed4ea86eefd700f4d399f09f9a93fd0c1d43013d312Buy Shares132301852024-04-16 6:41:5723 secs ago0xe738d4ca44e66baaf48ef6c56598509aeb8250bf IN  Friend.tech: Shares0 ETH0.0000010423190.019062613
0x06b76475eaa437aa926023b196120f7f8ac83c50afb5aa940c49912bae7b666fBuy Shares132301852024-04-16 6:41:5723 secs ago0x10f39a87bda2f6b107767020777c7b4a8256699a IN  Friend.tech: Shares0 ETH0.0000010899750.019062613
0x74e150b2b26a37508edb0fc23fa20f312f1fe9d2e73ba932b172330d7ddb66dbBuy Shares132301842024-04-16 6:41:5525 secs ago0x3e400d2760b49dd311a24896fb949c253687c683 IN  Friend.tech: Shares0 ETH0.0000010432690.01907792
0x6c27c999f524d8952bf8cc1d5683a8df74dacf283d212ad5c7745bf7932e5e07Buy Shares132301842024-04-16 6:41:5525 secs ago0xc7c029fc994a9615d9b111c0714bd37b72413b44 IN  Friend.tech: Shares0 ETH0.0000010909640.01907792
0x1f5ea76ff1135c2d4c7b257c79c19e151072b42e23d73f4ae97dc1e50b7aa3b0Buy Shares132301822024-04-16 6:41:5129 secs ago0xb8223efc51de90da866e8f6c9537169959eccd22 IN  Friend.tech: Shares0 ETH0.0000010439390.019090485
0xcc62df09f01dbefc9679dfa4d5f5c07b9e1075607f87fbb2647cf7acd5faa903Buy Shares132301822024-04-16 6:41:5129 secs ago0x03fa4d62c0da278e507735ddfc30c3ec77629825 IN  Friend.tech: Shares0 ETH0.0000010916660.019090485
0xe1ff4b5cc8273497f2f006be7c30df3362beca2039def34781e91a40f129efd7Buy Shares132301812024-04-16 6:41:4931 secs ago0xa617ab9e7e423e2d4e418ce597b1885ab0c55e25 IN  Friend.tech: Shares0 ETH0.0000010426080.0190584
0xbb271fce513c27f47f99b7459259513da2a58c476a1705b31751a139e67f03fdBuy Shares132301812024-04-16 6:41:4931 secs ago0x6ac1b09affb12ac029e906e4dbf721c73e413d41 IN  Friend.tech: Shares0 ETH0.0000010902540.0190584
0x49a31f7195352146404ad3d3d7789ade15e389680778bb734f6ae4020181c8a7Buy Shares132301792024-04-16 6:41:4535 secs ago0xd998b2758ca5eb7f44f050f5542f380f4439d151 IN  Friend.tech: Shares0 ETH0.0000010430740.019061708
0x63ddc8429370ff6b6d6094a11f015138db91566538add87e26f035ed2b064681Buy Shares132301792024-04-16 6:41:4535 secs ago0x31a56903e90789b7395989808334bf411426296b IN  Friend.tech: Shares0 ETH0.0000010903610.019061708
0xd893db32bffc9f4a01164060b2c2ca78327f99044d4bc199a95e7acde7dca1daBuy Shares132301772024-04-16 6:41:4139 secs ago0x05fbb041adaa161adffb6ca4877e9566750529db IN  Friend.tech: Shares0 ETH0.0000010429150.01905873
0xf2f628ffb11953ccb40964fe7105a4c2e5fd1eb7837d7b899090cc6f27c5a0f8Buy Shares132301772024-04-16 6:41:4139 secs ago0x36a7005535272a73734fe8abdbb248c46d4bf460 IN  Friend.tech: Shares0 ETH0.0000010905620.01905873
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4f48c9d6672270a8a8b15a6a422bc876bd66d9b7569cb7dc1e9c86169614e0c4132301922024-04-16 6:42:119 secs ago Friend.tech: Shares0x82238a651b8c8619342a32fec20669e2b364b8d10.000703125 ETH
0x4f48c9d6672270a8a8b15a6a422bc876bd66d9b7569cb7dc1e9c86169614e0c4132301922024-04-16 6:42:119 secs ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000703125 ETH
0x4a6b92c0f065d69764b372a94aa4d577f5bc78b9b67f2ba027780a6691306402132301882024-04-16 6:42:0317 secs ago Friend.tech: Shares0xa5a9966a58172855d5ec1b7779b0449ee00d99bb0.0780125 ETH
0x4a6b92c0f065d69764b372a94aa4d577f5bc78b9b67f2ba027780a6691306402132301882024-04-16 6:42:0317 secs ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0780125 ETH
0x10402ac94f48629621b6eaf300724671c3813a107ae21a72b32f28470e877965132301742024-04-16 6:41:3545 secs ago Friend.tech: Shares0xa787db48282601a0f5dcc4ea341eb5f46759e1580.0000125 ETH
0x10402ac94f48629621b6eaf300724671c3813a107ae21a72b32f28470e877965132301742024-04-16 6:41:3545 secs ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0000125 ETH
0x10402ac94f48629621b6eaf300724671c3813a107ae21a72b32f28470e877965132301742024-04-16 6:41:3545 secs ago Friend.tech: Shares0xab196a5f3ad5ff7de5da48d6a544dd219b83515f0.000225 ETH
0x7917f1b513944ca65f63c0fc4da4cb69b68bfc6039e0f5d47ebd6918a4174ee8132301382024-04-16 6:40:231 min ago Friend.tech: Shares0x998e3f7792c5ddc352728c34b1d0be97dbaddd290.000078125 ETH
0x7917f1b513944ca65f63c0fc4da4cb69b68bfc6039e0f5d47ebd6918a4174ee8132301382024-04-16 6:40:231 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000078125 ETH
0x7917f1b513944ca65f63c0fc4da4cb69b68bfc6039e0f5d47ebd6918a4174ee8132301382024-04-16 6:40:231 min ago Friend.tech: Shares0x106aaf1985c36ec50dc2be01ac9a7b20978b8ea60.00140625 ETH
0xd258404161b9460dc260bb002a8e8fa02a9a41c80473e991c6c8a1d942fd0dec132301292024-04-16 6:40:052 mins ago Friend.tech: Shares0x998e3f7792c5ddc352728c34b1d0be97dbaddd290.0001125 ETH
0xd258404161b9460dc260bb002a8e8fa02a9a41c80473e991c6c8a1d942fd0dec132301292024-04-16 6:40:052 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0001125 ETH
0xd258404161b9460dc260bb002a8e8fa02a9a41c80473e991c6c8a1d942fd0dec132301292024-04-16 6:40:052 mins ago Friend.tech: Shares0x8a0ae997cea0c8c62cec961e8c283558e87040f50.002025 ETH
0x1d42201376b18dbb021cd2c3e1a3632c77fbb0df0ffcb6d480b1ebd88afebad5132301202024-04-16 6:39:472 mins ago Friend.tech: Shares0x4f244a7339bb6807a76c398a016161c160d2d7ef0.000153125 ETH
0x1d42201376b18dbb021cd2c3e1a3632c77fbb0df0ffcb6d480b1ebd88afebad5132301202024-04-16 6:39:472 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000153125 ETH
0x86164af76f8614afc2495a24fd6fd1c1fda6683f91cea8490afe7c2c122e20b3132301082024-04-16 6:39:232 mins ago Friend.tech: Shares0x0901c282bfe6c9f33ee06952afe00d8e7dcd953a0.0000125 ETH
0x86164af76f8614afc2495a24fd6fd1c1fda6683f91cea8490afe7c2c122e20b3132301082024-04-16 6:39:232 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0000125 ETH
0x99acb3c78c0404c3a5d01de47131e93de72eeb474f5cc38b1a87b6167f483c2e132301072024-04-16 6:39:212 mins ago Friend.tech: Shares0x0901c282bfe6c9f33ee06952afe00d8e7dcd953a0.000003125 ETH
0x99acb3c78c0404c3a5d01de47131e93de72eeb474f5cc38b1a87b6167f483c2e132301072024-04-16 6:39:212 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000003125 ETH
0x99acb3c78c0404c3a5d01de47131e93de72eeb474f5cc38b1a87b6167f483c2e132301072024-04-16 6:39:212 mins ago 0x7198fe13fe2dade17c0fda963925f8ab86965f9a Friend.tech: Shares0.00006875 ETH
0x5f6fee4d1b2fa841f6ef7dd80d242c593a7dbd03b7fe9dcc2eb7e46a1aef9e58132301032024-04-16 6:39:133 mins ago Friend.tech: Shares0xb09a32774a3bcda84b310e0bbce573b6e009b4480.000003125 ETH
0x5f6fee4d1b2fa841f6ef7dd80d242c593a7dbd03b7fe9dcc2eb7e46a1aef9e58132301032024-04-16 6:39:133 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000003125 ETH
0xc54afabaa0cae0f3de7aa29c6ba6b1ded32349e432bb8adbb4a941ae2aa832dc132301012024-04-16 6:39:093 mins ago Friend.tech: Shares0xde7588eb2a31812f01402005a4ba2587bbb410470.000003125 ETH
0xc54afabaa0cae0f3de7aa29c6ba6b1ded32349e432bb8adbb4a941ae2aa832dc132301012024-04-16 6:39:093 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000003125 ETH
0xd42273160254d99b8357b5c46a14cceb9f8a7e52066cb001ca9aa05f535cd179132300832024-04-16 6:38:333 mins ago Friend.tech: Shares0x998e3f7792c5ddc352728c34b1d0be97dbaddd290.0001125 ETH
[ Download CSV Export 
Latest 14 Deposits
L2 Txn Hash L1 Deposit Txn Value Token
0x4baaaa6c29a88d46d0d9f67ab1d53516564fe2a5998abae0dd99a3158fd07cd32023-09-19 20:57:35209 days 9 hrs ago0xb5b828efc15cd890655c8c268079c4b80658d88646f27cc9e7f89dfd904ee74c0.0396 Ether (ETH)
0xd299eb59c1902bfd494a2562acac83101fa5fded6767a4af746058e9623b1fc52023-09-18 21:58:35210 days 8 hrs ago0xc3c43b3b3760954c17ea2c3bee9e4a8246c94fa7142f954e4c63fc17b7a53eea0.20796875 Ether (ETH)
0x005442b78f501f07de3af58ccc58089fab9c4a41d07bc659d0ddf2f5c1e0ea6d2023-09-18 21:36:11210 days 9 hrs ago0x071940e5fe57627f42eeb92197dad0cbf2ca30544544331152f1dab2c97e1b060.20796875 Ether (ETH)
0x04fddb5f3520110f6625a9544e07b7cd6a85ce9434580f020633381c0187dbe42023-09-18 18:56:41210 days 11 hrs ago0xd72017ac2b3ca11fa08cc6dae57356a36918c438ce4a3f60b65f2c46d77664f70.0044 Ether (ETH)
0x6912c690ddbd56f345af0ca05c967ad28b6e9ea814d8cc0cc00b12f68302a5922023-09-18 18:16:41210 days 12 hrs ago0xa8f9cbf487f25670362f7ec642b35b9886896a65d82531fc1f581a801649e3e40.00336875 Ether (ETH)
0xd9c0f17ee50376a7159c93f2329eb220d785322730441d26f63672dba5ec4f0d2023-09-18 17:58:03210 days 12 hrs ago0xf3048a1ec317d51371f40ab2b7b9e706a781dc5104491e74e431c39082ded60e0.01161875 Ether (ETH)
0xdcbf63cab94cc25bd047b5592a1c8e2b8be6fba65fda6ebd3c52e2856230e6572023-09-18 17:54:27210 days 12 hrs ago0x71df21f4ff13379d49553a02052b83760ed9d2733dddefe10576564b4956a5a20.01546875 Ether (ETH)
0xddc381dbb25b558fb847b8122fe04e17805d14e55ad6efa9c7d41dab00a7acbd2023-09-18 17:19:39210 days 13 hrs ago0xfbd011e42ca5233ae2267b5fbd0a32d2d34c4fb135536d38d0580dfc4ebbfe0d0.013475 Ether (ETH)
0x28dce24b28c04461ae27d16c7279c346ce358e48cdd0ffd2ed225b1ca6be18412023-09-17 21:10:43211 days 9 hrs ago0x374721d7842a45eb6f7afb5a7767759871b6f1a8392512187f8738047370d95d0.013475 Ether (ETH)
0xb6384071b3948d4676c91a44582bf3e3637d954be26caa9d08bf60f882fc044e2023-09-17 21:03:21211 days 9 hrs ago0x694e2ec382f0f6773af3b658f839dd6f3c24c8abac17e33c1ba2fcee3984ef560.01161875 Ether (ETH)
0xdc4a7ecaeb11af99c4431e2c56621843b7df8d13eb79603bed4c562707a0d42c2023-09-17 18:20:25211 days 12 hrs ago0xf36f9ba6424dd96ce297ae27a378b148f3aa77f926ddfad764ddcd95fb7db88f0.01161875 Ether (ETH)
0xd39fa51228d8849a4460cda99c462af04dc641916456222072a448bdc0932ab82023-09-17 17:53:01211 days 12 hrs ago0x8541abf9ac887ff2fc5e83f37f344b1c58a1d94f2c6d3acca1e7513ed825ffa60.01161875 Ether (ETH)
0x49a0f6b168a98706b5a7df73502c9595a8297843ab481664ec00ffc0f8ea9fa72023-09-15 6:49:59213 days 23 hrs ago0xcaa937044b6ed8bee17e23c4e99c5dba8e9020f95683a6ac275fb6698344a3c90.00034375 Ether (ETH)
0x45e4423403c9b7b42088ab5803fa879fb0334706589e54eda842c71bf94f50902023-09-15 6:20:35214 days 21 mins ago0x0021b176097d77ce9ac1e44953476f51a14f02257284c838ed23a69c6029fc280.0003125 Ether (ETH)
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FriendtechSharesV1

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at basescan.org on 2023-08-10
*/

// File: contracts/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: contracts/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/FriendtechShares.sol



pragma solidity >=0.8.2 <0.9.0;


// TODO: Events, final pricing model, 

contract FriendtechSharesV1 is Ownable {
    address public protocolFeeDestination;
    uint256 public protocolFeePercent;
    uint256 public subjectFeePercent;

    event Trade(address trader, address subject, bool isBuy, uint256 shareAmount, uint256 ethAmount, uint256 protocolEthAmount, uint256 subjectEthAmount, uint256 supply);

    // SharesSubject => (Holder => Balance)
    mapping(address => mapping(address => uint256)) public sharesBalance;

    // SharesSubject => Supply
    mapping(address => uint256) public sharesSupply;

    function setFeeDestination(address _feeDestination) public onlyOwner {
        protocolFeeDestination = _feeDestination;
    }

    function setProtocolFeePercent(uint256 _feePercent) public onlyOwner {
        protocolFeePercent = _feePercent;
    }

    function setSubjectFeePercent(uint256 _feePercent) public onlyOwner {
        subjectFeePercent = _feePercent;
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
        uint256 sum1 = supply == 0 ? 0 : (supply - 1 )* (supply) * (2 * (supply - 1) + 1) / 6;
        uint256 sum2 = supply == 0 && amount == 1 ? 0 : (supply - 1 + amount) * (supply + amount) * (2 * (supply - 1 + amount) + 1) / 6;
        uint256 summation = sum2 - sum1;
        return summation * 1 ether / 16000;
    }

    function getBuyPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
        return getPrice(sharesSupply[sharesSubject], amount);
    }

    function getSellPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
        return getPrice(sharesSupply[sharesSubject] - amount, amount);
    }

    function getBuyPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(sharesSubject, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        return price + protocolFee + subjectFee;
    }

    function getSellPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(sharesSubject, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        return price - protocolFee - subjectFee;
    }

    function buyShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        require(supply > 0 || sharesSubject == msg.sender, "Only the shares' subject can buy the first share");
        uint256 price = getPrice(supply, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        require(msg.value >= price + protocolFee + subjectFee, "Insufficient payment");
        sharesBalance[sharesSubject][msg.sender] = sharesBalance[sharesSubject][msg.sender] + amount;
        sharesSupply[sharesSubject] = supply + amount;
        emit Trade(msg.sender, sharesSubject, true, amount, price, protocolFee, subjectFee, supply + amount);
        (bool success1, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success2, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2, "Unable to send funds");
    }

    function sellShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        require(supply > amount, "Cannot sell the last share");
        uint256 price = getPrice(supply - amount, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        require(sharesBalance[sharesSubject][msg.sender] >= amount, "Insufficient shares");
        sharesBalance[sharesSubject][msg.sender] = sharesBalance[sharesSubject][msg.sender] - amount;
        sharesSupply[sharesSubject] = supply - amount;
        emit Trade(msg.sender, sharesSubject, false, amount, price, protocolFee, subjectFee, supply - amount);
        (bool success1, ) = msg.sender.call{value: price - protocolFee - subjectFee}("");
        (bool success2, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success3, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2 && success3, "Unable to send funds");
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"subject","type":"address"},{"indexed":false,"internalType":"bool","name":"isBuy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"shareAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"subjectEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Trade","type":"event"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDestination","type":"address"}],"name":"setFeeDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setProtocolFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setSubjectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"sharesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subjectFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b508061010d6000396000f3fe6080604052600436106101095760003560e01c8063715018a611610095578063b51d053411610064578063b51d053414610382578063d6e6eb9f1461039e578063f2fde38b146103c9578063f9931be0146103f2578063fbe532341461042f57610109565b8063715018a6146102da5780638da5cb5b146102f15780639ae717811461031c578063a49834211461035957610109565b80634635256e116100dc5780634635256e146101f05780634ce7957c1461022d5780635a8a764e146102585780635cf4ee91146102815780636945b123146102be57610109565b8063020235ff1461010e5780630f026f6d1461014b5780632267a89c1461018857806324dc441d146101c5575b600080fd5b34801561011a57600080fd5b506101356004803603810190610130919061140d565b610458565b6040516101429190611466565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d91906114ad565b61047d565b60405161017f9190611466565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa91906114ad565b6104f8565b6040516101bc9190611466565b60405180910390f35b3480156101d157600080fd5b506101da610573565b6040516101e79190611466565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906114ad565b610579565b6040516102249190611466565b60405180910390f35b34801561023957600080fd5b506102426105cc565b60405161024f91906114fc565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611517565b6105f2565b005b34801561028d57600080fd5b506102a860048036038101906102a39190611544565b610604565b6040516102b59190611466565b60405180910390f35b6102d860048036038101906102d391906114ad565b61073a565b005b3480156102e657600080fd5b506102ef610b9d565b005b3480156102fd57600080fd5b50610306610bb1565b60405161031391906114fc565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906114ad565b610bda565b6040516103509190611466565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611517565b610c38565b005b61039c600480360381019061039791906114ad565b610c4a565b005b3480156103aa57600080fd5b506103b3611173565b6040516103c09190611466565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611584565b611179565b005b3480156103fe57600080fd5b5061041960048036038101906104149190611584565b6111fc565b6040516104269190611466565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611584565b611214565b005b6004602052816000526040600020602052806000526040600020600091509150505481565b60008061048a8484610579565b90506000670de0b6b3a7640000600254836104a591906115e0565b6104af9190611651565b90506000670de0b6b3a7640000600354846104ca91906115e0565b6104d49190611651565b90508082846104e39190611682565b6104ed9190611682565b935050505092915050565b6000806105058484610bda565b90506000670de0b6b3a76400006002548361052091906115e0565b61052a9190611651565b90506000670de0b6b3a76400006003548461054591906115e0565b61054f9190611651565b905080828461055e91906116b6565b61056891906116b6565b935050505092915050565b60035481565b60006105c4600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610604565b905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105fa611260565b8060038190555050565b600080600084146106665760066001808661061f91906116b6565b600261062b91906115e0565b6106359190611682565b8560018761064391906116b6565b61064d91906115e0565b61065791906115e0565b6106619190611651565b610669565b60005b90506000808514801561067c5750600184145b6106f957600660018560018861069291906116b6565b61069c9190611682565b60026106a891906115e0565b6106b29190611682565b85876106be9190611682565b866001896106cc91906116b6565b6106d69190611682565b6106e091906115e0565b6106ea91906115e0565b6106f49190611651565b6106fc565b60005b90506000828261070c91906116b6565b9050613e80670de0b6b3a76400008261072591906115e0565b61072f9190611651565b935050505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111806107b857503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee9061176d565b60405180910390fd5b60006108038284610604565b90506000670de0b6b3a76400006002548361081e91906115e0565b6108289190611651565b90506000670de0b6b3a76400006003548461084391906115e0565b61084d9190611651565b905080828461085c9190611682565b6108669190611682565b3410156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f906117d9565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109309190611682565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084846109bc9190611682565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876001888787878c8c610a349190611682565b604051610a48989796959493929190611814565b60405180910390a16000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610a98906118c3565b60006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905060008773ffffffffffffffffffffffffffffffffffffffff1683604051610b04906118c3565b60006040518083038185875af1925050503d8060008114610b41576040519150601f19603f3d011682016040523d82523d6000602084013e610b46565b606091505b50509050818015610b545750805b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90611924565b60405180910390fd5b5050505050505050565b610ba5611260565b610baf60006112de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c3082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c2a91906116b6565b83610604565b905092915050565b610c40611260565b8060028190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790611990565b60405180910390fd5b6000610ce78383610ce191906116b6565b84610604565b90506000670de0b6b3a764000060025483610d0291906115e0565b610d0c9190611651565b90506000670de0b6b3a764000060035484610d2791906115e0565b610d319190611651565b905084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906119fc565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7a91906116b6565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508484610f0691906116b6565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876000888787878c8c610f7e91906116b6565b604051610f92989796959493929190611814565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff16828486610fc091906116b6565b610fca91906116b6565b604051610fd6906118c3565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611064906118c3565b60006040518083038185875af1925050503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b5050905060008873ffffffffffffffffffffffffffffffffffffffff16846040516110d0906118c3565b60006040518083038185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b505090508280156111205750815b80156111295750805b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90611924565b60405180910390fd5b505050505050505050565b60025481565b611181611260565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790611a8e565b60405180910390fd5b6111f9816112de565b50565b60056020528060005260406000206000915090505481565b61121c611260565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112686113a2565b73ffffffffffffffffffffffffffffffffffffffff16611286610bb1565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390611afa565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113da826113af565b9050919050565b6113ea816113cf565b81146113f557600080fd5b50565b600081359050611407816113e1565b92915050565b60008060408385031215611424576114236113aa565b5b6000611432858286016113f8565b9250506020611443858286016113f8565b9150509250929050565b6000819050919050565b6114608161144d565b82525050565b600060208201905061147b6000830184611457565b92915050565b61148a8161144d565b811461149557600080fd5b50565b6000813590506114a781611481565b92915050565b600080604083850312156114c4576114c36113aa565b5b60006114d2858286016113f8565b92505060206114e385828601611498565b9150509250929050565b6114f6816113cf565b82525050565b600060208201905061151160008301846114ed565b92915050565b60006020828403121561152d5761152c6113aa565b5b600061153b84828501611498565b91505092915050565b6000806040838503121561155b5761155a6113aa565b5b600061156985828601611498565b925050602061157a85828601611498565b9150509250929050565b60006020828403121561159a576115996113aa565b5b60006115a8848285016113f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115eb8261144d565b91506115f68361144d565b92508282026116048161144d565b9150828204841483151761161b5761161a6115b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061165c8261144d565b91506116678361144d565b92508261167757611676611622565b5b828204905092915050565b600061168d8261144d565b91506116988361144d565b92508282019050808211156116b0576116af6115b1565b5b92915050565b60006116c18261144d565b91506116cc8361144d565b92508282039050818111156116e4576116e36115b1565b5b92915050565b600082825260208201905092915050565b7f4f6e6c79207468652073686172657327207375626a6563742063616e2062757960008201527f2074686520666972737420736861726500000000000000000000000000000000602082015250565b60006117576030836116ea565b9150611762826116fb565b604082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006117c36014836116ea565b91506117ce8261178d565b602082019050919050565b600060208201905081810360008301526117f2816117b6565b9050919050565b60008115159050919050565b61180e816117f9565b82525050565b60006101008201905061182a600083018b6114ed565b611837602083018a6114ed565b6118446040830189611805565b6118516060830188611457565b61185e6080830187611457565b61186b60a0830186611457565b61187860c0830185611457565b61188560e0830184611457565b9998505050505050505050565b600081905092915050565b50565b60006118ad600083611892565b91506118b88261189d565b600082019050919050565b60006118ce826118a0565b9150819050919050565b7f556e61626c6520746f2073656e642066756e6473000000000000000000000000600082015250565b600061190e6014836116ea565b9150611919826118d8565b602082019050919050565b6000602082019050818103600083015261193d81611901565b9050919050565b7f43616e6e6f742073656c6c20746865206c617374207368617265000000000000600082015250565b600061197a601a836116ea565b915061198582611944565b602082019050919050565b600060208201905081810360008301526119a98161196d565b9050919050565b7f496e73756666696369656e742073686172657300000000000000000000000000600082015250565b60006119e66013836116ea565b91506119f1826119b0565b602082019050919050565b60006020820190508181036000830152611a15816119d9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a786026836116ea565b9150611a8382611a1c565b604082019050919050565b60006020820190508181036000830152611aa781611a6b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ae46020836116ea565b9150611aef82611aae565b602082019050919050565b60006020820190508181036000830152611b1381611ad7565b905091905056fea2646970667358221220cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e864736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101095760003560e01c8063715018a611610095578063b51d053411610064578063b51d053414610382578063d6e6eb9f1461039e578063f2fde38b146103c9578063f9931be0146103f2578063fbe532341461042f57610109565b8063715018a6146102da5780638da5cb5b146102f15780639ae717811461031c578063a49834211461035957610109565b80634635256e116100dc5780634635256e146101f05780634ce7957c1461022d5780635a8a764e146102585780635cf4ee91146102815780636945b123146102be57610109565b8063020235ff1461010e5780630f026f6d1461014b5780632267a89c1461018857806324dc441d146101c5575b600080fd5b34801561011a57600080fd5b506101356004803603810190610130919061140d565b610458565b6040516101429190611466565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d91906114ad565b61047d565b60405161017f9190611466565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa91906114ad565b6104f8565b6040516101bc9190611466565b60405180910390f35b3480156101d157600080fd5b506101da610573565b6040516101e79190611466565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906114ad565b610579565b6040516102249190611466565b60405180910390f35b34801561023957600080fd5b506102426105cc565b60405161024f91906114fc565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611517565b6105f2565b005b34801561028d57600080fd5b506102a860048036038101906102a39190611544565b610604565b6040516102b59190611466565b60405180910390f35b6102d860048036038101906102d391906114ad565b61073a565b005b3480156102e657600080fd5b506102ef610b9d565b005b3480156102fd57600080fd5b50610306610bb1565b60405161031391906114fc565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906114ad565b610bda565b6040516103509190611466565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611517565b610c38565b005b61039c600480360381019061039791906114ad565b610c4a565b005b3480156103aa57600080fd5b506103b3611173565b6040516103c09190611466565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611584565b611179565b005b3480156103fe57600080fd5b5061041960048036038101906104149190611584565b6111fc565b6040516104269190611466565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611584565b611214565b005b6004602052816000526040600020602052806000526040600020600091509150505481565b60008061048a8484610579565b90506000670de0b6b3a7640000600254836104a591906115e0565b6104af9190611651565b90506000670de0b6b3a7640000600354846104ca91906115e0565b6104d49190611651565b90508082846104e39190611682565b6104ed9190611682565b935050505092915050565b6000806105058484610bda565b90506000670de0b6b3a76400006002548361052091906115e0565b61052a9190611651565b90506000670de0b6b3a76400006003548461054591906115e0565b61054f9190611651565b905080828461055e91906116b6565b61056891906116b6565b935050505092915050565b60035481565b60006105c4600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610604565b905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105fa611260565b8060038190555050565b600080600084146106665760066001808661061f91906116b6565b600261062b91906115e0565b6106359190611682565b8560018761064391906116b6565b61064d91906115e0565b61065791906115e0565b6106619190611651565b610669565b60005b90506000808514801561067c5750600184145b6106f957600660018560018861069291906116b6565b61069c9190611682565b60026106a891906115e0565b6106b29190611682565b85876106be9190611682565b866001896106cc91906116b6565b6106d69190611682565b6106e091906115e0565b6106ea91906115e0565b6106f49190611651565b6106fc565b60005b90506000828261070c91906116b6565b9050613e80670de0b6b3a76400008261072591906115e0565b61072f9190611651565b935050505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111806107b857503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee9061176d565b60405180910390fd5b60006108038284610604565b90506000670de0b6b3a76400006002548361081e91906115e0565b6108289190611651565b90506000670de0b6b3a76400006003548461084391906115e0565b61084d9190611651565b905080828461085c9190611682565b6108669190611682565b3410156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f906117d9565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109309190611682565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084846109bc9190611682565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876001888787878c8c610a349190611682565b604051610a48989796959493929190611814565b60405180910390a16000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610a98906118c3565b60006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905060008773ffffffffffffffffffffffffffffffffffffffff1683604051610b04906118c3565b60006040518083038185875af1925050503d8060008114610b41576040519150601f19603f3d011682016040523d82523d6000602084013e610b46565b606091505b50509050818015610b545750805b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90611924565b60405180910390fd5b5050505050505050565b610ba5611260565b610baf60006112de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c3082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c2a91906116b6565b83610604565b905092915050565b610c40611260565b8060028190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790611990565b60405180910390fd5b6000610ce78383610ce191906116b6565b84610604565b90506000670de0b6b3a764000060025483610d0291906115e0565b610d0c9190611651565b90506000670de0b6b3a764000060035484610d2791906115e0565b610d319190611651565b905084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906119fc565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7a91906116b6565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508484610f0691906116b6565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876000888787878c8c610f7e91906116b6565b604051610f92989796959493929190611814565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff16828486610fc091906116b6565b610fca91906116b6565b604051610fd6906118c3565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611064906118c3565b60006040518083038185875af1925050503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b5050905060008873ffffffffffffffffffffffffffffffffffffffff16846040516110d0906118c3565b60006040518083038185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b505090508280156111205750815b80156111295750805b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90611924565b60405180910390fd5b505050505050505050565b60025481565b611181611260565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790611a8e565b60405180910390fd5b6111f9816112de565b50565b60056020528060005260406000206000915090505481565b61121c611260565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112686113a2565b73ffffffffffffffffffffffffffffffffffffffff16611286610bb1565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390611afa565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113da826113af565b9050919050565b6113ea816113cf565b81146113f557600080fd5b50565b600081359050611407816113e1565b92915050565b60008060408385031215611424576114236113aa565b5b6000611432858286016113f8565b9250506020611443858286016113f8565b9150509250929050565b6000819050919050565b6114608161144d565b82525050565b600060208201905061147b6000830184611457565b92915050565b61148a8161144d565b811461149557600080fd5b50565b6000813590506114a781611481565b92915050565b600080604083850312156114c4576114c36113aa565b5b60006114d2858286016113f8565b92505060206114e385828601611498565b9150509250929050565b6114f6816113cf565b82525050565b600060208201905061151160008301846114ed565b92915050565b60006020828403121561152d5761152c6113aa565b5b600061153b84828501611498565b91505092915050565b6000806040838503121561155b5761155a6113aa565b5b600061156985828601611498565b925050602061157a85828601611498565b9150509250929050565b60006020828403121561159a576115996113aa565b5b60006115a8848285016113f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115eb8261144d565b91506115f68361144d565b92508282026116048161144d565b9150828204841483151761161b5761161a6115b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061165c8261144d565b91506116678361144d565b92508261167757611676611622565b5b828204905092915050565b600061168d8261144d565b91506116988361144d565b92508282019050808211156116b0576116af6115b1565b5b92915050565b60006116c18261144d565b91506116cc8361144d565b92508282039050818111156116e4576116e36115b1565b5b92915050565b600082825260208201905092915050565b7f4f6e6c79207468652073686172657327207375626a6563742063616e2062757960008201527f2074686520666972737420736861726500000000000000000000000000000000602082015250565b60006117576030836116ea565b9150611762826116fb565b604082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006117c36014836116ea565b91506117ce8261178d565b602082019050919050565b600060208201905081810360008301526117f2816117b6565b9050919050565b60008115159050919050565b61180e816117f9565b82525050565b60006101008201905061182a600083018b6114ed565b611837602083018a6114ed565b6118446040830189611805565b6118516060830188611457565b61185e6080830187611457565b61186b60a0830186611457565b61187860c0830185611457565b61188560e0830184611457565b9998505050505050505050565b600081905092915050565b50565b60006118ad600083611892565b91506118b88261189d565b600082019050919050565b60006118ce826118a0565b9150819050919050565b7f556e61626c6520746f2073656e642066756e6473000000000000000000000000600082015250565b600061190e6014836116ea565b9150611919826118d8565b602082019050919050565b6000602082019050818103600083015261193d81611901565b9050919050565b7f43616e6e6f742073656c6c20746865206c617374207368617265000000000000600082015250565b600061197a601a836116ea565b915061198582611944565b602082019050919050565b600060208201905081810360008301526119a98161196d565b9050919050565b7f496e73756666696369656e742073686172657300000000000000000000000000600082015250565b60006119e66013836116ea565b91506119f1826119b0565b602082019050919050565b60006020820190508181036000830152611a15816119d9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a786026836116ea565b9150611a8382611a1c565b604082019050919050565b60006020820190508181036000830152611aa781611a6b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ae46020836116ea565b9150611aef82611aae565b602082019050919050565b60006020820190508181036000830152611b1381611ad7565b905091905056fea2646970667358221220cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e864736f6c63430008120033

Deployed ByteCode Sourcemap

3678:4541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4068:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5388:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5749:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3808:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5040:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3724:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4497:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4623:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6112:1013;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2735:103;;;;;;;;;;;;;:::i;:::-;;2087:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5209:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4369:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7133:1083;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3768:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2993:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4177:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4233:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4068:68;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5388:353::-;5477:7;5497:13;5513:34;5525:13;5540:6;5513:11;:34::i;:::-;5497:50;;5558:19;5609:7;5588:18;;5580:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;5558:58;;5627:18;5676:7;5656:17;;5648:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;5627:56;;5723:10;5709:11;5701:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;5694:39;;;;;5388:353;;;;:::o;5749:355::-;5839:7;5859:13;5875:35;5888:13;5903:6;5875:12;:35::i;:::-;5859:51;;5921:19;5972:7;5951:18;;5943:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;5921:58;;5990:18;6039:7;6019:17;;6011:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;5990:56;;6086:10;6072:11;6064:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;6057:39;;;;;5749:355;;;;:::o;3808:32::-;;;;:::o;5040:161::-;5121:7;5148:45;5157:12;:27;5170:13;5157:27;;;;;;;;;;;;;;;;5186:6;5148:8;:45::i;:::-;5141:52;;5040:161;;;;:::o;3724:37::-;;;;;;;;;;;;;:::o;4497:118::-;1973:13;:11;:13::i;:::-;4596:11:::1;4576:17;:31;;;;4497:118:::0;:::o;4623:409::-;4694:7;4714:12;4739:1;4729:6;:11;:70;;4798:1;4793;4788;4779:6;:10;;;;:::i;:::-;4774:1;:16;;;;:::i;:::-;:20;;;;:::i;:::-;4763:6;4757:1;4748:6;:10;;;;:::i;:::-;4747:23;;;;:::i;:::-;:48;;;;:::i;:::-;:52;;;;:::i;:::-;4729:70;;;4743:1;4729:70;4714:85;;4810:12;4835:1;4825:6;:11;:26;;;;;4850:1;4840:6;:11;4825:26;:112;;4936:1;4931;4921:6;4917:1;4908:6;:10;;;;:::i;:::-;:19;;;;:::i;:::-;4903:1;:25;;;;:::i;:::-;:29;;;;:::i;:::-;4892:6;4883;:15;;;;:::i;:::-;4872:6;4868:1;4859:6;:10;;;;:::i;:::-;:19;;;;:::i;:::-;4858:41;;;;:::i;:::-;:75;;;;:::i;:::-;:79;;;;:::i;:::-;4825:112;;;4854:1;4825:112;4810:127;;4948:17;4975:4;4968;:11;;;;:::i;:::-;4948:31;;5019:5;5009:7;4997:9;:19;;;;:::i;:::-;:27;;;;:::i;:::-;4990:34;;;;;4623:409;;;;:::o;6112:1013::-;6196:14;6213:12;:27;6226:13;6213:27;;;;;;;;;;;;;;;;6196:44;;6268:1;6259:6;:10;:41;;;;6290:10;6273:27;;:13;:27;;;6259:41;6251:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;6364:13;6380:24;6389:6;6397;6380:8;:24::i;:::-;6364:40;;6415:19;6466:7;6445:18;;6437:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;6415:58;;6484:18;6533:7;6513:17;;6505:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;6484:56;;6594:10;6580:11;6572:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;6559:9;:45;;6551:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6726:6;6683:13;:28;6697:13;6683:28;;;;;;;;;;;;;;;:40;6712:10;6683:40;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;6640:13;:28;6654:13;6640:28;;;;;;;;;;;;;;;:40;6669:10;6640:40;;;;;;;;;;;;;;;:92;;;;6782:6;6773;:15;;;;:::i;:::-;6743:12;:27;6756:13;6743:27;;;;;;;;;;;;;;;:45;;;;6804:95;6810:10;6822:13;6837:4;6843:6;6851:5;6858:11;6871:10;6892:6;6883;:15;;;;:::i;:::-;6804:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;6911:13;6930:22;;;;;;;;;;;:27;;6965:11;6930:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:71;;;6993:13;7012;:18;;7038:10;7012:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6992:61;;;7072:8;:20;;;;;7084:8;7072:20;7064:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6185:940;;;;;;6112:1013;;:::o;2735:103::-;1973:13;:11;:13::i;:::-;2800:30:::1;2827:1;2800:18;:30::i;:::-;2735:103::o:0;2087:87::-;2133:7;2160:6;;;;;;;;;;;2153:13;;2087:87;:::o;5209:171::-;5291:7;5318:54;5357:6;5327:12;:27;5340:13;5327:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;5365:6;5318:8;:54::i;:::-;5311:61;;5209:171;;;;:::o;4369:120::-;1973:13;:11;:13::i;:::-;4470:11:::1;4449:18;:32;;;;4369:120:::0;:::o;7133:1083::-;7218:14;7235:12;:27;7248:13;7235:27;;;;;;;;;;;;;;;;7218:44;;7290:6;7281;:15;7273:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7338:13;7354:33;7372:6;7363;:15;;;;:::i;:::-;7380:6;7354:8;:33::i;:::-;7338:49;;7398:19;7449:7;7428:18;;7420:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;7398:58;;7467:18;7516:7;7496:17;;7488:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;7467:56;;7586:6;7542:13;:28;7556:13;7542:28;;;;;;;;;;;;;;;:40;7571:10;7542:40;;;;;;;;;;;;;;;;:50;;7534:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7713:6;7670:13;:28;7684:13;7670:28;;;;;;;;;;;;;;;:40;7699:10;7670:40;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;7627:13;:28;7641:13;7627:28;;;;;;;;;;;;;;;:40;7656:10;7627:40;;;;;;;;;;;;;;;:92;;;;7769:6;7760;:15;;;;:::i;:::-;7730:12;:27;7743:13;7730:27;;;;;;;;;;;;;;;:45;;;;7791:96;7797:10;7809:13;7824:5;7831:6;7839:5;7846:11;7859:10;7880:6;7871;:15;;;;:::i;:::-;7791:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;7899:13;7918:10;:15;;7963:10;7949:11;7941:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;7918:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7898:80;;;7990:13;8009:22;;;;;;;;;;;:27;;8044:11;8009:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7989:71;;;8072:13;8091;:18;;8117:10;8091:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:61;;;8151:8;:20;;;;;8163:8;8151:20;:32;;;;;8175:8;8151:32;8143:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7207:1009;;;;;;;7133:1083;;:::o;3768:33::-;;;;:::o;2993:201::-;1973:13;:11;:13::i;:::-;3102:1:::1;3082:22;;:8;:22;;::::0;3074:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3158:28;3177:8;3158:18;:28::i;:::-;2993:201:::0;:::o;4177:47::-;;;;;;;;;;;;;;;;;:::o;4233:128::-;1973:13;:11;:13::i;:::-;4338:15:::1;4313:22;;:40;;;;;;;;;;;;;;;;;;4233:128:::0;:::o;2252:132::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2252:132::o;3354:191::-;3428:16;3447:6;;;;;;;;;;;3428:25;;3473:8;3464:6;;:17;;;;;;;;;;;;;;;;;;3528:8;3497:40;;3518:8;3497:40;;;;;;;;;;;;3417:128;3354:191;:::o;659:98::-;712:7;739:10;732:17;;659:98;:::o;88:117:1:-;197:1;194;187: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:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:474::-;2097:6;2105;2154:2;2142:9;2133:7;2129:23;2125:32;2122:119;;;2160:79;;:::i;:::-;2122:119;2280:1;2305:53;2350:7;2341:6;2330:9;2326:22;2305:53;:::i;:::-;2295:63;;2251:117;2407:2;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2378:118;2029:474;;;;;:::o;2509:118::-;2596:24;2614:5;2596:24;:::i;:::-;2591:3;2584:37;2509:118;;:::o;2633:222::-;2726:4;2764:2;2753:9;2749:18;2741:26;;2777:71;2845:1;2834:9;2830:17;2821:6;2777:71;:::i;:::-;2633:222;;;;:::o;2861:329::-;2920:6;2969:2;2957:9;2948:7;2944:23;2940:32;2937:119;;;2975:79;;:::i;:::-;2937:119;3095:1;3120:53;3165:7;3156:6;3145:9;3141:22;3120:53;:::i;:::-;3110:63;;3066:117;2861:329;;;;:::o;3196:474::-;3264:6;3272;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3574:2;3600:53;3645:7;3636:6;3625:9;3621:22;3600:53;:::i;:::-;3590:63;;3545:118;3196:474;;;;;:::o;3676:329::-;3735:6;3784:2;3772:9;3763:7;3759:23;3755:32;3752:119;;;3790:79;;:::i;:::-;3752:119;3910:1;3935:53;3980:7;3971:6;3960:9;3956:22;3935:53;:::i;:::-;3925:63;;3881:117;3676:329;;;;:::o;4011:180::-;4059:77;4056:1;4049:88;4156:4;4153:1;4146:15;4180:4;4177:1;4170:15;4197:410;4237:7;4260:20;4278:1;4260:20;:::i;:::-;4255:25;;4294:20;4312:1;4294:20;:::i;:::-;4289:25;;4349:1;4346;4342:9;4371:30;4389:11;4371:30;:::i;:::-;4360:41;;4550:1;4541:7;4537:15;4534:1;4531:22;4511:1;4504:9;4484:83;4461:139;;4580:18;;:::i;:::-;4461:139;4245:362;4197:410;;;;:::o;4613:180::-;4661:77;4658:1;4651:88;4758:4;4755:1;4748:15;4782:4;4779:1;4772:15;4799:185;4839:1;4856:20;4874:1;4856:20;:::i;:::-;4851:25;;4890:20;4908:1;4890:20;:::i;:::-;4885:25;;4929:1;4919:35;;4934:18;;:::i;:::-;4919:35;4976:1;4973;4969:9;4964:14;;4799:185;;;;:::o;4990:191::-;5030:3;5049:20;5067:1;5049:20;:::i;:::-;5044:25;;5083:20;5101:1;5083:20;:::i;:::-;5078:25;;5126:1;5123;5119:9;5112:16;;5147:3;5144:1;5141:10;5138:36;;;5154:18;;:::i;:::-;5138:36;4990:191;;;;:::o;5187:194::-;5227:4;5247:20;5265:1;5247:20;:::i;:::-;5242:25;;5281:20;5299:1;5281:20;:::i;:::-;5276:25;;5325:1;5322;5318:9;5310:17;;5349:1;5343:4;5340:11;5337:37;;;5354:18;;:::i;:::-;5337:37;5187:194;;;;:::o;5387:169::-;5471:11;5505:6;5500:3;5493:19;5545:4;5540:3;5536:14;5521:29;;5387:169;;;;:::o;5562:235::-;5702:34;5698:1;5690:6;5686:14;5679:58;5771:18;5766:2;5758:6;5754:15;5747:43;5562:235;:::o;5803:366::-;5945:3;5966:67;6030:2;6025:3;5966:67;:::i;:::-;5959:74;;6042:93;6131:3;6042:93;:::i;:::-;6160:2;6155:3;6151:12;6144:19;;5803:366;;;:::o;6175:419::-;6341:4;6379:2;6368:9;6364:18;6356:26;;6428:9;6422:4;6418:20;6414:1;6403:9;6399:17;6392:47;6456:131;6582:4;6456:131;:::i;:::-;6448:139;;6175:419;;;:::o;6600:170::-;6740:22;6736:1;6728:6;6724:14;6717:46;6600:170;:::o;6776:366::-;6918:3;6939:67;7003:2;6998:3;6939:67;:::i;:::-;6932:74;;7015:93;7104:3;7015:93;:::i;:::-;7133:2;7128:3;7124:12;7117:19;;6776:366;;;:::o;7148:419::-;7314:4;7352:2;7341:9;7337:18;7329:26;;7401:9;7395:4;7391:20;7387:1;7376:9;7372:17;7365:47;7429:131;7555:4;7429:131;:::i;:::-;7421:139;;7148:419;;;:::o;7573:90::-;7607:7;7650:5;7643:13;7636:21;7625:32;;7573:90;;;:::o;7669:109::-;7750:21;7765:5;7750:21;:::i;:::-;7745:3;7738:34;7669:109;;:::o;7784:985::-;8067:4;8105:3;8094:9;8090:19;8082:27;;8119:71;8187:1;8176:9;8172:17;8163:6;8119:71;:::i;:::-;8200:72;8268:2;8257:9;8253:18;8244:6;8200:72;:::i;:::-;8282:66;8344:2;8333:9;8329:18;8320:6;8282:66;:::i;:::-;8358:72;8426:2;8415:9;8411:18;8402:6;8358:72;:::i;:::-;8440:73;8508:3;8497:9;8493:19;8484:6;8440:73;:::i;:::-;8523;8591:3;8580:9;8576:19;8567:6;8523:73;:::i;:::-;8606;8674:3;8663:9;8659:19;8650:6;8606:73;:::i;:::-;8689;8757:3;8746:9;8742:19;8733:6;8689:73;:::i;:::-;7784:985;;;;;;;;;;;:::o;8775:147::-;8876:11;8913:3;8898:18;;8775:147;;;;:::o;8928:114::-;;:::o;9048:398::-;9207:3;9228:83;9309:1;9304:3;9228:83;:::i;:::-;9221:90;;9320:93;9409:3;9320:93;:::i;:::-;9438:1;9433:3;9429:11;9422:18;;9048:398;;;:::o;9452:379::-;9636:3;9658:147;9801:3;9658:147;:::i;:::-;9651:154;;9822:3;9815:10;;9452:379;;;:::o;9837:170::-;9977:22;9973:1;9965:6;9961:14;9954:46;9837:170;:::o;10013:366::-;10155:3;10176:67;10240:2;10235:3;10176:67;:::i;:::-;10169:74;;10252:93;10341:3;10252:93;:::i;:::-;10370:2;10365:3;10361:12;10354:19;;10013:366;;;:::o;10385:419::-;10551:4;10589:2;10578:9;10574:18;10566:26;;10638:9;10632:4;10628:20;10624:1;10613:9;10609:17;10602:47;10666:131;10792:4;10666:131;:::i;:::-;10658:139;;10385:419;;;:::o;10810:176::-;10950:28;10946:1;10938:6;10934:14;10927:52;10810:176;:::o;10992:366::-;11134:3;11155:67;11219:2;11214:3;11155:67;:::i;:::-;11148:74;;11231:93;11320:3;11231:93;:::i;:::-;11349:2;11344:3;11340:12;11333:19;;10992:366;;;:::o;11364:419::-;11530:4;11568:2;11557:9;11553:18;11545:26;;11617:9;11611:4;11607:20;11603:1;11592:9;11588:17;11581:47;11645:131;11771:4;11645:131;:::i;:::-;11637:139;;11364:419;;;:::o;11789:169::-;11929:21;11925:1;11917:6;11913:14;11906:45;11789:169;:::o;11964:366::-;12106:3;12127:67;12191:2;12186:3;12127:67;:::i;:::-;12120:74;;12203:93;12292:3;12203:93;:::i;:::-;12321:2;12316:3;12312:12;12305:19;;11964:366;;;:::o;12336:419::-;12502:4;12540:2;12529:9;12525:18;12517:26;;12589:9;12583:4;12579:20;12575:1;12564:9;12560:17;12553:47;12617:131;12743:4;12617:131;:::i;:::-;12609:139;;12336:419;;;:::o;12761:225::-;12901:34;12897:1;12889:6;12885:14;12878:58;12970:8;12965:2;12957:6;12953:15;12946:33;12761:225;:::o;12992:366::-;13134:3;13155:67;13219:2;13214:3;13155:67;:::i;:::-;13148:74;;13231:93;13320:3;13231:93;:::i;:::-;13349:2;13344:3;13340:12;13333:19;;12992:366;;;:::o;13364:419::-;13530:4;13568:2;13557:9;13553:18;13545:26;;13617:9;13611:4;13607:20;13603:1;13592:9;13588:17;13581:47;13645:131;13771:4;13645:131;:::i;:::-;13637:139;;13364:419;;;:::o;13789:182::-;13929:34;13925:1;13917:6;13913:14;13906:58;13789:182;:::o;13977:366::-;14119:3;14140:67;14204:2;14199:3;14140:67;:::i;:::-;14133:74;;14216:93;14305:3;14216:93;:::i;:::-;14334:2;14329:3;14325:12;14318:19;;13977:366;;;:::o;14349:419::-;14515:4;14553:2;14542:9;14538:18;14530:26;;14602:9;14596:4;14592:20;14588:1;14577:9;14573:17;14566:47;14630:131;14756:4;14630:131;:::i;:::-;14622:139;;14349:419;;;:::o

Swarm Source

ipfs://cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e8
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.