Contract 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba0 2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfa8e822da684d6cfbe58e99d6762c3326c5e6e5a7010a0499e3513bddff2131aWithdraw Dividen...110837392021-09-20 16:27:3716 hrs 6 mins ago0x840baa2595f45c3080eaf48b4bfead40ccd8aa23 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x12c27c5cc081e2fe197ca8bfe2f44dac16dc732aa5d0bf262b8e8e0a76147921Withdraw Dividen...110753942021-09-20 9:28:0123 hrs 5 mins ago0xfc3287e2785f54aa4f55c32febd68835414ca5d2 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000279045
0xb22857839b769fa5443e63eeb8aa34720bcba1665e1af3c3b4f3c84a2176eea5Withdraw Dividen...110492862021-09-19 11:42:231 day 20 hrs ago0xb918e63a6351b3f4b25122895371f8012e4e3eae IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x2f2da48c4d12638736d4ba8a1c074271a4e42afacda65521f9987d0a5c9c7063Withdraw Dividen...110455272021-09-19 8:20:502 days 12 mins ago0xd1601aba2c550613d9c3a898a632841f62dfc85e IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.00012851
0xe2d1186fa267b9769888decf30dd43137ab742bfe6a75a6e9de5e3f57cdb788fWithdraw Dividen...110327272021-09-18 21:39:492 days 10 hrs ago0xefcdbee6a70ee37c15d0a8773640b9fe9002121b IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000326472
0xaca963bc564899d8c0cffdb13de500e7284985a5185a7584b09ab321dd2dfc25Withdraw Dividen...110283822021-09-18 18:02:302 days 14 hrs ago0x6cd173869f10cae4824b3a199ceafd3881f72744 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x7161b445393f9966ecd590c5da6d718cf2b6efb04b934defe3ea7f32dee3b87cWithdraw Dividen...110281282021-09-18 17:49:272 days 14 hrs ago0xee01edf47fa564968651945fe9a9bfec94222594 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x58fe7b981d5c211fc5e9adc16dc6a2cc1cdda05df5f6f168d65e6c667a509f73Withdraw Dividen...110254512021-09-18 15:35:072 days 16 hrs ago0x657307839b6bfd4fc1d1f96e164fa20ea33e57d3 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x9654a9971151743a4566f6bfb5768558ee8c5abe8f9b2d10cf6e693dfe9cd4f3Withdraw Dividen...109877712021-09-17 8:06:544 days 26 mins ago0xe7107de3e5c014654da7bafe17e203c32ffcfe04 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000279045
0x70911357b04da6e30a15ac65785548ecfc40f2f78390ba7734526a4b27b41681Withdraw Dividen...109810952021-09-17 2:32:364 days 6 hrs ago0x6d4cf43b477480e338017eb9eaa715c5b6fd49ba IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x0429583114cfd3826d1b726d787bcd9546ca898480265592185977fa6c086a8dWithdraw Dividen...109803562021-09-17 1:55:394 days 6 hrs ago0x203c126db8b48733ee41b5427ade062e33f8a533 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x3d6354ab6f9e5269c44593a218b8371089529344a280f8693f39c44f8ebc16afWithdraw Dividen...109742552021-09-16 20:50:324 days 11 hrs ago0xb8f1aa965d76ce7abaf617cb3d1469ef4aa4d7c5 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0xe50403026d78a60a9b8d8d82084943d3556346522fe1b89dcb0fc25da83707cbWithdraw Dividen...109617802021-09-16 10:24:284 days 22 hrs ago0x8ff7777a08e222f0cd07102c77e9fbdf1435e70c IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000279045
0xfd364af4ad573d535514b6733e7e54e3e799818df332883398efc6d32aa0ac38Withdraw Dividen...109554682021-09-16 5:08:065 days 3 hrs ago0xf012a946110322f1c8a6f8b206544b0e4b9257bf IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0xb2b3f0d3b059a57a98fb81be59698b348ab0839772c87b18fe6e3be694af52f1Withdraw Dividen...109527282021-09-16 2:50:595 days 5 hrs ago0x1cbfdc77a08affcf845a284376a01143d4d8d6f4 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.00012851
0xa725758d9ffe98a2aa18e0eedb1784ff97c0229c88ef912baeeee55242b4a80fWithdraw Dividen...109434532021-09-15 19:07:145 days 13 hrs ago0xd1601aba2c550613d9c3a898a632841f62dfc85e IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.00012851
0xa34ac337fd20f250c4221d342026b884bf4cf40e7023dabce76be2a4b6ef7939Withdraw Dividen...109297622021-09-15 7:36:416 days 56 mins ago0xd1601aba2c550613d9c3a898a632841f62dfc85e IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.00012851
0xab0b1e78ef64bf0f9a9eafbb169d8e9021a42d851c85b1836254d485e1cf4b8dWithdraw Dividen...109215172021-09-15 0:44:026 days 7 hrs ago0x5548ab1d65481147d9d933387eb7df2776abd203 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x397c9e5962e921e0c08c5d807ddaaf062f88f5c3ab1313147d836d280b2e88fbWithdraw Dividen...109131352021-09-14 17:44:126 days 14 hrs ago0x693d08ded3ee193307a619373ac5612b73b23c4b IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x0579f24a38418d90433d7f977d928fe1e12427d47d8bf6f284f1771e3f405208Withdraw Dividen...108904322021-09-13 22:46:177 days 9 hrs ago0xafb17791793e0f7d408776c39f4d0693141e1ccb IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0xa42adc66105d06f2e100e3abb584b535eb687bfa48197fdc58f2399d49ba8828Withdraw Dividen...108890222021-09-13 21:35:477 days 10 hrs ago0x666dd1cfaebb3f187936a439f5757149d41e440e IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x88e7e1692c3958c692b00a477278f669585cd2fd7b2445fc468ac8c30690b624Withdraw Dividen...108810412021-09-13 14:56:337 days 17 hrs ago0xcc4a191e51d7880df09d53d2709092d0f71aab48 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000279045
0xdb0170b52af8ef8f2604f6b3eedd3f0d24f7b2dd6eb523b0eada4c0f189af535Withdraw Dividen...108790962021-09-13 13:18:157 days 19 hrs ago0x96b48f0104ca135d938c7343068c4a1257f2810f IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000279045
0xc43048c6c4c9ad04976a6858bb0330fc843170516ddc5947b61bc409464b2400Withdraw Dividen...108599092021-09-12 21:16:598 days 11 hrs ago0x498411bb32776a68536fd1abc91a776564ecfb91 IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
0x760dbcf365913ad60c839428ce3a4a4e756a9be5e570bb8c6d70ed037f9bb85dWithdraw Dividen...108561992021-09-12 18:10:458 days 14 hrs ago0x81dba277fd93c5b2419d8f8500f1d099ca5608ee IN  0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00 BNB0.000204045
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfa8e822da684d6cfbe58e99d6762c3326c5e6e5a7010a0499e3513bddff2131a110837392021-09-20 16:27:3716 hrs 6 mins ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x840baa2595f45c3080eaf48b4bfead40ccd8aa230.000491557169217651 BNB
0x12c27c5cc081e2fe197ca8bfe2f44dac16dc732aa5d0bf262b8e8e0a76147921110753942021-09-20 9:28:0123 hrs 5 mins ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xfc3287e2785f54aa4f55c32febd68835414ca5d20.013845591018073847 BNB
0xb22857839b769fa5443e63eeb8aa34720bcba1665e1af3c3b4f3c84a2176eea5110492862021-09-19 11:42:231 day 20 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xb918e63a6351b3f4b25122895371f8012e4e3eae0.008241531933791152 BNB
0xe2d1186fa267b9769888decf30dd43137ab742bfe6a75a6e9de5e3f57cdb788f110327272021-09-18 21:39:492 days 10 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xefcdbee6a70ee37c15d0a8773640b9fe9002121b0.238219101090171233 BNB
0xaca963bc564899d8c0cffdb13de500e7284985a5185a7584b09ab321dd2dfc25110283822021-09-18 18:02:302 days 14 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x6cd173869f10cae4824b3a199ceafd3881f727440.031869708398895219 BNB
0x7161b445393f9966ecd590c5da6d718cf2b6efb04b934defe3ea7f32dee3b87c110281282021-09-18 17:49:272 days 14 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xee01edf47fa564968651945fe9a9bfec942225940.282105234497410482 BNB
0x58fe7b981d5c211fc5e9adc16dc6a2cc1cdda05df5f6f168d65e6c667a509f73110254512021-09-18 15:35:072 days 16 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x657307839b6bfd4fc1d1f96e164fa20ea33e57d30.013898342398250264 BNB
0x9654a9971151743a4566f6bfb5768558ee8c5abe8f9b2d10cf6e693dfe9cd4f3109877712021-09-17 8:06:544 days 26 mins ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xe7107de3e5c014654da7bafe17e203c32ffcfe040.004306273761291614 BNB
0x70911357b04da6e30a15ac65785548ecfc40f2f78390ba7734526a4b27b41681109810952021-09-17 2:32:364 days 6 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x6d4cf43b477480e338017eb9eaa715c5b6fd49ba0.002378766131655974 BNB
0x0429583114cfd3826d1b726d787bcd9546ca898480265592185977fa6c086a8d109803562021-09-17 1:55:394 days 6 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x203c126db8b48733ee41b5427ade062e33f8a5330.006546550040707439 BNB
0x3d6354ab6f9e5269c44593a218b8371089529344a280f8693f39c44f8ebc16af109742552021-09-16 20:50:324 days 11 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xb8f1aa965d76ce7abaf617cb3d1469ef4aa4d7c50.032096069444964284 BNB
0xe50403026d78a60a9b8d8d82084943d3556346522fe1b89dcb0fc25da83707cb109617802021-09-16 10:24:284 days 22 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x8ff7777a08e222f0cd07102c77e9fbdf1435e70c0.051261207220294798 BNB
0xfd364af4ad573d535514b6733e7e54e3e799818df332883398efc6d32aa0ac38109554682021-09-16 5:08:065 days 3 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xf012a946110322f1c8a6f8b206544b0e4b9257bf0.120356168820492142 BNB
0xab0b1e78ef64bf0f9a9eafbb169d8e9021a42d851c85b1836254d485e1cf4b8d109215172021-09-15 0:44:026 days 7 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x5548ab1d65481147d9d933387eb7df2776abd2030.003835269731616908 BNB
0x397c9e5962e921e0c08c5d807ddaaf062f88f5c3ab1313147d836d280b2e88fb109131352021-09-14 17:44:126 days 14 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x693d08ded3ee193307a619373ac5612b73b23c4b0.07351937703888127 BNB
0x0579f24a38418d90433d7f977d928fe1e12427d47d8bf6f284f1771e3f405208108904322021-09-13 22:46:177 days 9 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xafb17791793e0f7d408776c39f4d0693141e1ccb0.017866674825684047 BNB
0xa42adc66105d06f2e100e3abb584b535eb687bfa48197fdc58f2399d49ba8828108890222021-09-13 21:35:477 days 10 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x666dd1cfaebb3f187936a439f5757149d41e440e0.010646251255346497 BNB
0x88e7e1692c3958c692b00a477278f669585cd2fd7b2445fc468ac8c30690b624108810412021-09-13 14:56:337 days 17 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xcc4a191e51d7880df09d53d2709092d0f71aab480.105571034693809263 BNB
0xdb0170b52af8ef8f2604f6b3eedd3f0d24f7b2dd6eb523b0eada4c0f189af535108790962021-09-13 13:18:157 days 19 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x96b48f0104ca135d938c7343068c4a1257f2810f0.013571688912087469 BNB
0xc43048c6c4c9ad04976a6858bb0330fc843170516ddc5947b61bc409464b2400108599092021-09-12 21:16:598 days 11 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x498411bb32776a68536fd1abc91a776564ecfb910.015433858205431183 BNB
0x760dbcf365913ad60c839428ce3a4a4e756a9be5e570bb8c6d70ed037f9bb85d108561992021-09-12 18:10:458 days 14 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x81dba277fd93c5b2419d8f8500f1d099ca5608ee0.077117710676005298 BNB
0x6801407f3167b2c94519f8532c9060dd2dd9b26bb650ec725872563bd566c546108534972021-09-12 15:55:358 days 16 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x797a63cf969529e9083aea6239b7014988c6a5dc0.281929821274784793 BNB
0xe5dfd60c8224ea89988568e6ddfd04c7f859e039db1c40bdd704bbca84d0154d108356802021-09-12 1:04:309 days 7 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00xb07dba5d32c1547fdbd03816140af00faeb144c10.000564889688757248 BNB
0xafca070dc468171f6189f1d49bc5972bde3a51791fa3baf89dafe672cf87fe0e108183682021-09-11 10:31:139 days 22 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x6b67c05818f947c730466a629153485d09618b630.000724468031722968 BNB
0x83e50547cbfc690dcc341e3cc84f411a9dd5220f0ba31be7f4bc69d82fb83989108044662021-09-10 22:48:2610 days 9 hrs ago 0x0e20a67e1052abc9cc1b6b65cb311b5957168ba00x3acd989cb41ca7d4845820e00bae0f56edf9629c0.010360981271635351 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RecoveryProtocol

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 12 : RecoveryProtocol.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

import "./DividendPayingToken.sol";
import "./SafeMath.sol";
import "./Ownable.sol";

contract RecoveryProtocol is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    uint256 public totalDividendsToDistribute;

    constructor() public DividendPayingToken("RecoveryProtocol", "RecoveryProtocol") {

    }

	receive() external override payable {
		require(msg.value.add(totalDividendsDistributed) <= totalDividendsToDistribute, "RecoveryProtocol: received too much money");
    	distributeDividends();
	}


    function _transfer(address, address, uint256) internal override {
        require(false, "RecoveryProtocol: No transfers allowed");
    }

    function setBalances(address[] calldata accounts, uint256[] calldata amounts) external onlyOwner {
    	require(accounts.length > 0 && accounts.length == amounts.length, "RecoveryProtocol: Invalid data");

    	for(uint256 i = 0; i < accounts.length; i++) {
    		address account = accounts[i];
    		uint256 amount = amounts[i];

    		require(balanceOf(account) == 0, "RecoveryProtocol: account already has a balance");

    		_setBalance(account, amount);

    		totalDividendsToDistribute = totalDividendsToDistribute.add(amount);
    	}
    }
   
}

File 2 of 12 : DividendPayingToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

import "./ERC20.sol";
import "./SafeMath.sol";
import "./SafeMathUint.sol";
import "./SafeMathInt.sol";
import "./DividendPayingTokenInterface.sol";
import "./DividendPayingTokenOptionalInterface.sol";


/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
///  to token holders as dividends and allows token holders to withdraw their dividends.
///  Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;

  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;

  // About dividendCorrection:
  // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user)`.
  // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens),
  //   `dividendOf(_user)` should not be changed,
  //   but the computed value of `dividendPerShare * balanceOf(_user)` is changed.
  // To keep the `dividendOf(_user)` unchanged, we add a correction term:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`,
  //   where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed:
  //   `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`.
  // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed.
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

  constructor(string memory _name, string memory _symbol) public ERC20(_name, _symbol) {

  }

  /// @dev Distributes dividends whenever ether is paid to this contract.
  receive() external virtual payable {
    distributeDividends();
  }

  /// @notice Distributes ether to token holders as dividends.
  /// @dev It reverts if the total supply of tokens is 0.
  /// It emits the `DividendsDistributed` event if the amount of received ether is greater than 0.
  /// About undistributed ether:
  ///   In each distribution, there is a small amount of ether not distributed,
  ///     the magnified amount of which is
  ///     `(msg.value * magnitude) % totalSupply()`.
  ///   With a well-chosen `magnitude`, the amount of undistributed ether
  ///     (de-magnified) in a distribution can be less than 1 wei.
  ///   We can actually keep track of the undistributed ether in a distribution
  ///     and try to distribute it in the next distribution,
  ///     but keeping track of such data on-chain costs much more than
  ///     the saved ether, so we don't do that.
  function distributeDividends() public override payable {
    require(totalSupply() > 0);

    if (msg.value > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (msg.value).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, msg.value);

      totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(msg.sender);
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}("");

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }


  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  /// @dev Internal function that transfer tokens from one address to another.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param from The address to transfer from.
  /// @param to The address to transfer to.
  /// @param value The amount to be transferred.
  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  /// @dev Internal function that mints tokens to an account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account that will receive the created tokens.
  /// @param value The amount that will be created.
  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  /// @dev Internal function that burns an amount of the token of a given account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account whose tokens will be burnt.
  /// @param value The amount that will be burnt.
  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}

File 3 of 12 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 12 : Ownable.sol
pragma solidity ^0.6.2;

// SPDX-License-Identifier: MIT License

import "./Context.sol";

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 () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 5 of 12 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./SafeMath.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 6 of 12 : SafeMathUint.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

File 7 of 12 : SafeMathInt.sol
// SPDX-License-Identifier: MIT

/*
MIT License

Copyright (c) 2018 requestnetwork
Copyright (c) 2018 Fragments, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

pragma solidity ^0.6.2;

/**
 * @title SafeMathInt
 * @dev Math operations for int256 with overflow safety checks.
 */
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

File 8 of 12 : DividendPayingTokenInterface.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;


/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns(uint256);

  /// @notice Distributes ether to token holders as dividends.
  /// @dev SHOULD distribute the paid ether to token holders as dividends.
  ///  SHOULD NOT directly transfer ether to token holders in this function.
  ///  MUST emit a `DividendsDistributed` event when the amount of distributed ether is greater than 0.
  function distributeDividends() external payable;

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;

  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}

File 9 of 12 : DividendPayingTokenOptionalInterface.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;


/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

File 10 of 12 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

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

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

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

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

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

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

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

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

File 11 of 12 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

File 12 of 12 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"setBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsToDistribute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f5265636f7665727950726f746f636f6c000000000000000000000000000000008152506040518060400160405280601081526020017f5265636f7665727950726f746f636f6c00000000000000000000000000000000815250818181600390805190602001906200009892919062000175565b508060049080519060200190620000b192919062000175565b50505050506000620000c86200016d60201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200021b565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001b857805160ff1916838001178555620001e9565b82800160010185558215620001e9579182015b82811115620001e8578251825591602001919060010190620001cb565b5b509050620001f89190620001fc565b5090565b5b8082111562000217576000816000905550600101620001fd565b5090565b6125b7806200022b6000396000f3fe6080604052600436106101445760003560e01c806385a6b3ae116100b6578063a8b9d2401161006f578063a8b9d24014610722578063a9059cbb14610787578063aafd847a146107f8578063b7e39b4f1461085d578063dd62ed3e14610938578063f2fde38b146109bd576101c2565b806385a6b3ae146105255780638da5cb5b1461055057806391b89fba1461059157806395d89b41146105f6578063a457c2d714610686578063a648570b146106f7576101c2565b806327ce01471161010857806327ce01471461038e578063313ce567146103f357806339509351146104215780636a4740021461049257806370a08231146104a9578063715018a61461050e576101c2565b806303c83302146101c757806306fdde03146101d1578063095ea7b31461026157806318160ddd146102d257806323b872dd146102fd576101c2565b366101c257600a5461016160085434610a0e90919063ffffffff16565b11156101b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806124516029913960400191505060405180910390fd5b6101c0610a96565b005b600080fd5b6101cf610a96565b005b3480156101dd57600080fd5b506101e6610b6d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022657808201518184015260208101905061020b565b50505050905090810190601f1680156102535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026d57600080fd5b506102ba6004803603604081101561028457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c0f565b60405180821515815260200191505060405180910390f35b3480156102de57600080fd5b506102e7610c2d565b6040518082815260200191505060405180910390f35b34801561030957600080fd5b506103766004803603606081101561032057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c37565b60405180821515815260200191505060405180910390f35b34801561039a57600080fd5b506103dd600480360360208110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d10565b6040518082815260200191505060405180910390f35b3480156103ff57600080fd5b50610408610db1565b604051808260ff16815260200191505060405180910390f35b34801561042d57600080fd5b5061047a6004803603604081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dba565b60405180821515815260200191505060405180910390f35b34801561049e57600080fd5b506104a7610e6d565b005b3480156104b557600080fd5b506104f8600480360360208110156104cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e79565b6040518082815260200191505060405180910390f35b34801561051a57600080fd5b50610523610ec1565b005b34801561053157600080fd5b5061053a61104c565b6040518082815260200191505060405180910390f35b34801561055c57600080fd5b50610565611052565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059d57600080fd5b506105e0600480360360208110156105b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061107c565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b5061060b61108e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561064b578082015181840152602081019050610630565b50505050905090810190601f1680156106785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069257600080fd5b506106df600480360360408110156106a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611130565b60405180821515815260200191505060405180910390f35b34801561070357600080fd5b5061070c6111fd565b6040518082815260200191505060405180910390f35b34801561072e57600080fd5b506107716004803603602081101561074557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611203565b6040518082815260200191505060405180910390f35b34801561079357600080fd5b506107e0600480360360408110156107aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611266565b60405180821515815260200191505060405180910390f35b34801561080457600080fd5b506108476004803603602081101561081b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611284565b6040518082815260200191505060405180910390f35b34801561086957600080fd5b506109366004803603604081101561088057600080fd5b810190808035906020019064010000000081111561089d57600080fd5b8201836020820111156108af57600080fd5b803590602001918460208302840111640100000000831117156108d157600080fd5b9091929391929390803590602001906401000000008111156108f257600080fd5b82018360208201111561090457600080fd5b8035906020019184602083028401116401000000008311171561092657600080fd5b90919293919293905050506112cd565b005b34801561094457600080fd5b506109a76004803603604081101561095b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150f565b6040518082815260200191505060405180910390f35b3480156109c957600080fd5b50610a0c600480360360208110156109e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611596565b005b600080828401905083811015610a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000610aa0610c2d565b11610aaa57600080fd5b6000341115610b6b57610afb610abe610c2d565b610ae2700100000000000000000000000000000000346117a690919063ffffffff16565b81610ae957fe5b04600554610a0e90919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511346040518082815260200191505060405180910390a2610b6434600854610a0e90919063ffffffff16565b6008819055505b565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b5050505050905090565b6000610c23610c1c61182c565b8484611834565b6001905092915050565b6000600254905090565b6000610c44848484611a2b565b610d0584610c5061182c565b610d008560405180606001604052806028815260200161249b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb661182c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a879092919063ffffffff16565b611834565b600190509392505050565b6000700100000000000000000000000000000000610da2610d9d600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d8f610d8a610d7988610e79565b6005546117a690919063ffffffff16565b611b47565b611b6490919063ffffffff16565b611ba6565b81610da957fe5b049050919050565b60006012905090565b6000610e63610dc761182c565b84610e5e8560016000610dd861182c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a0e90919063ffffffff16565b611834565b6001905092915050565b610e7633611bbd565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec961182c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60085481565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061108782611203565b9050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b60006111f361113d61182c565b846111ee8560405180606001604052806025815260200161255d602591396001600061116761182c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a879092919063ffffffff16565b611834565b6001905092915050565b600a5481565b600061125f600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461125184610d10565b611ddf90919063ffffffff16565b9050919050565b600061127a61127361182c565b8484611a2b565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d561182c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000848490501180156113af57508181905084849050145b611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5265636f7665727950726f746f636f6c3a20496e76616c69642064617461000081525060200191505060405180910390fd5b60005b8484905081101561150857600085858381811061143d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600084848481811061146a57fe5b905060200201359050600061147e83610e79565b146114d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612508602f913960400191505060405180910390fd5b6114de8282611e29565b6114f381600a54610a0e90919063ffffffff16565b600a8190555050508080600101915050611424565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61159e61182c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806124096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156117b95760009050611826565b60008284029050828482816117ca57fe5b0414611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061247a6021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124e46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061242f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000611a82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806125376026913960400191505060405180910390fd5b505050565b6000838311158290611b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611af9578082015181840152602081019050611ade565b50505050905090810190601f168015611b265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808290506000811215611b5b57600080fd5b80915050919050565b600080828401905060008312158015611b7d5750838112155b80611b935750600083128015611b9257508381125b5b611b9c57600080fd5b8091505092915050565b600080821215611bb557600080fd5b819050919050565b600080611bc983611203565b90506000811115611dd457611c2681600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a0e90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040518082815260200191505060405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051806000019050600060405180830381858888f193505050503d8060008114611d1c576040519150601f19603f3d011682016040523d82523d6000602084013e611d21565b606091505b5050905080611dca57611d7c82600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ddf90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050611dda565b8192505050611dda565b60009150505b919050565b6000611e2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b905092915050565b6000611e3483610e79565b905080821115611e65576000611e538284611ddf90919063ffffffff16565b9050611e5f8482611e96565b50611e91565b80821015611e90576000611e828383611ddf90919063ffffffff16565b9050611e8e8482611f55565b505b5b505050565b611ea08282612014565b611f0e611ec0611ebb836005546117a690919063ffffffff16565b611b47565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121db90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b611f5f828261221d565b611fcd611f7f611f7a836005546117a690919063ffffffff16565b611b47565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b6490919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6120c3600083836123e1565b6120d881600254610a0e90919063ffffffff16565b60028190555061212f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a0e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284039050600083121580156121f45750838113155b8061220a575060008312801561220957508381135b5b61221357600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124c36021913960400191505060405180910390fd5b6122af826000836123e1565b61231a816040518060600160405280602281526020016123e7602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a879092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061237181600254611ddf90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b50505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735265636f7665727950726f746f636f6c3a20726563656976656420746f6f206d756368206d6f6e6579536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735265636f7665727950726f746f636f6c3a206163636f756e7420616c72656164792068617320612062616c616e63655265636f7665727950726f746f636f6c3a204e6f207472616e736665727320616c6c6f77656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d8fcaa496368b6a7b67c8e1ed4a1dd71a5f6e6c34182ed4c0946cb6d0858d39b64736f6c634300060c0033

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