Contract 0x89d453108bd94b497bbb4496729cd26f92aba533 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6d56d852a7863ea638e1c1212e3a3c2d53887098f10a412be423f11df155d5e1Approve112156542021-09-25 7:00:281 hr 46 mins ago0xe9d2439c59e7a86fd9c0b1ceed782f4fa9717f82 IN  Supersonic: SSN Token0 BNB0.000267288
0x4ae3fa446323ec5ca1ae7c9ec49a563f78bd38d974beee5926845ba61991970cApprove112139142021-09-25 5:32:423 hrs 14 mins ago0xb8765fc2a6bbfcdd62003384a892e167d47add2a IN  Supersonic: SSN Token0 BNB0.00022274
0x1a6f5b8ff8953c2f10b8a887d26b9a0e688305b6921fcf064e8756b434529089Approve112062572021-09-24 23:07:509 hrs 39 mins ago0xbcb6dfa520c3d10245d4d63eb45fb93278e46cff IN  Supersonic: SSN Token0 BNB0.000311836
0x3cfd0cd9eda5440f6dadd09db0f67889ff6b89719e86800d9dd535a3c2afd498Approve112047202021-09-24 21:50:5610 hrs 56 mins ago0xf780fcc63408e5a6521cfc11d412ccee92c4f4d0 IN  Supersonic: SSN Token0 BNB0.00022274
0xdb6bded66ff2164d551790f62d52a07bf7d1357dc4491a49c0e6ab7f8905f7c7Transfer112046932021-09-24 21:49:3510 hrs 57 mins ago0x132697c00c196b400247fdc80d3fdb7f2fe658b9 IN  Supersonic: SSN Token0 BNB0.00158749
0x3f830ed08dd05b46d00e591a23f6235b66f8a53ef658d7253065d18468bfa0e5Approve111997992021-09-24 17:43:1415 hrs 4 mins ago0x422c00b6e730515ec8bb15c95d1a329ab21c0385 IN  Supersonic: SSN Token0 BNB0.00022274
0x4b71007701cdd14f5ec2b1b6c8a6cf618f9df3c4f0964d1dc4238f97b4afc25fApprove111982222021-09-24 16:24:2216 hrs 22 mins ago0xe5a3c1bba3cf4fedc79d5c5f963c46522c454635 IN  Supersonic: SSN Token0 BNB0.000267288
0x14e889d5c8705f34a074640785624aa1f6432865228ec748a63092e250e3dde0Transfer111981212021-09-24 16:19:1916 hrs 27 mins agoHotbit 2 IN  Supersonic: SSN Token0 BNB0.002107777
0x471331e1d92dd2859e09d42e764618b2914285eac24da2650e554f80d54357f1Approve111958572021-09-24 14:26:0718 hrs 21 mins ago0xab26e6d0d5c98fd27ba7323c02022921375ebd79 IN  Supersonic: SSN Token0 BNB0.00022274
0x4947f17ffef9d554f5726bdd9fb6620978a508b4846ff1399182968e16728296Transfer111940732021-09-24 12:55:5819 hrs 51 mins ago0x4b2322710cd3f6871a1ea655bb44960b41bfe040 IN  Supersonic: SSN Token0 BNB0.00158749
0x78f4eb31b7d00d3d9fef720616b492eef7d543c75f56ef8a4c03c251bfc25e54Transfer111897182021-09-24 9:17:4123 hrs 29 mins ago0x9e57529e68b79589aecc2ee0897578df33acfbc9 IN  Supersonic: SSN Token0 BNB0.00158749
0x519b1fdb492aac7baa085a8b89ee5b42a818c6d6f1725f87a1de2365e0c2f43eTransfer111895982021-09-24 9:11:4023 hrs 35 mins ago0x2dca21499221f15e56d9b68dfb05806e650872c2 IN  Supersonic: SSN Token0 BNB0.00158749
0xca7a61ecf2b131623533aa78797d5f4b7154a01b53bb5972d709d04e5367fdbcApprove111889212021-09-24 8:37:461 day 9 mins ago0x992ce2ae4d52d2c58d74c079cc4569a5262e7c80 IN  Supersonic: SSN Token0 BNB0.00012482
0x0fcc2f413ab732d1534ffb16355db0c7255129ecf57fda556ce2e7312d8a5a62Approve111888962021-09-24 8:36:311 day 10 mins ago0x992ce2ae4d52d2c58d74c079cc4569a5262e7c80 IN  Supersonic: SSN Token0 BNB0.00007291
0x23673d7398536e497204c1f2df94530a00e77ed4814ceff38adab9707ecb838dTransfer111888732021-09-24 8:35:221 day 11 mins ago0x7fba84cc4e6a77f2a729c2df9ac3267fafd8db3a IN  Supersonic: SSN Token0 BNB0.00158749
0x1ab6d4bc67dad06fae04fcb5a6ad72f1b327055768ecebcbd6908645018d8ccaApprove111818162021-09-24 2:42:131 day 6 hrs ago0xf3414d400e2c8db106fe19ad3e1609fbb48c9375 IN  Supersonic: SSN Token0 BNB0.00022274
0x07b485c108b052b160589c7bd2fbab504c0e15cffcbc015c9ea448ab94432f45Approve111756532021-09-23 21:33:181 day 11 hrs ago0x32dc85ac660ceb57cb5c50206177fc9904b55a40 IN  Supersonic: SSN Token0 BNB0.000311836
0xe48ab21dd39bfa5ae4e5632130196fd199b57f117219546568db71fdcd623a95Approve111735642021-09-23 19:48:501 day 12 hrs ago0xa2aac892b1c41410b5aca8d24a3c685648990843 IN  Supersonic: SSN Token0 BNB0.00022274
0x81440bb57b71aef7b57a33e1ee65c8b1716999dc403b3b7cd1c45f7e7039df91Approve111734742021-09-23 19:44:201 day 13 hrs ago0xcf19e366bffa1b3ff12fe906b1256b28aa28c07d IN  Supersonic: SSN Token0 BNB0.00022274
0xe7e0840837787529c2f747b9ca2b17ccc0138ace334d9d27bf0dbcd466cf3b68Approve111729432021-09-23 19:17:471 day 13 hrs ago0x6c5c14e0f5e99ab041f41c47f6a7d09fcaa9359c IN  Supersonic: SSN Token0 BNB0.00022274
0x2b326c86c30238f9f2a036d8c9f1c4058bc31c0e64338e80b31633c6c2aca79cApprove111691872021-09-23 16:09:101 day 16 hrs ago0xd18210cb5be07f663955e07ef5c4e923a44205bb IN  Supersonic: SSN Token0 BNB0.000267288
0x40872b22e99623c69730c7d925e560784d805465d9b8be4e81f6fc23e085ebb3Approve111678192021-09-23 15:00:391 day 17 hrs ago0x79dc07d9c9392551c9fa103a573e047d362d873a IN  Supersonic: SSN Token0 BNB0.00022274
0x7d7b1ba8585636abb554ed047bc591754594e6dc4f9d6cc10a51e7f912e3f880Transfer111661632021-09-23 13:35:281 day 19 hrs ago0x226aa21a9b10ce121adf7f761e8b4a82f22d7fee IN  Supersonic: SSN Token0 BNB0.00072
0xee9c8cb7d21d60b9edcb1f5c34d9cb0e1603085b985dfa89dc8c987c15a5cd09Approve111632322021-09-23 11:06:531 day 21 hrs ago0xa3df77ba9186440cccea90ffc7e6fe66646bf442 IN  Supersonic: SSN Token0 BNB0.00022274
0x27f703825acccc6087aad21010ef467499ab2ef6117baf0bd5bc87a1e2591fa1Approve111628312021-09-23 10:46:501 day 22 hrs ago0xfcc8710b4cf7947d1d87fa01683ed2ff950ca02d IN  Supersonic: SSN Token0 BNB0.00022274
[ Download CSV Export 

OVERVIEW

SuperSonic Protocol is a protocol for exponential returns with Auto Token Yield, Auto Liquidity Lock, Auto Token Burn and Manual burn altogether on the Binance Smart Chain.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf19021684b09d811a3feae1bc082015e476eeabdabe3bfe8105f6fdd97b66bfa112013802021-09-24 19:03:1313 hrs 44 mins ago Supersonic: SSN Token PancakeSwap: Router0.449891353025567322 BNB
0xf19021684b09d811a3feae1bc082015e476eeabdabe3bfe8105f6fdd97b66bfa112013802021-09-24 19:03:1313 hrs 44 mins ago PancakeSwap: Router Supersonic: SSN Token0.449891353025567322 BNB
0x168e27ba5f2a79db7c1e4474e82d1923bc3c19f4c9bbe39935700e10f5994acf110882282021-09-20 20:12:064 days 12 hrs ago Supersonic: SSN Token PancakeSwap: Router0.443548876237610001 BNB
0x168e27ba5f2a79db7c1e4474e82d1923bc3c19f4c9bbe39935700e10f5994acf110882282021-09-20 20:12:064 days 12 hrs ago PancakeSwap: Router Supersonic: SSN Token0.443548876237610001 BNB
0xcf4397001b5450161e79753f038a5d16db9da9198ef675f7e53b242684105b2d110701782021-09-20 5:07:095 days 3 hrs ago Supersonic: SSN Token PancakeSwap: Router0.438731930502148017 BNB
0xcf4397001b5450161e79753f038a5d16db9da9198ef675f7e53b242684105b2d110701782021-09-20 5:07:095 days 3 hrs ago PancakeSwap: Router Supersonic: SSN Token0.438731930502148017 BNB
0x3dae48e81720a111a03e5498dd26945fd7e3d1cf1641587d439f25f2c2d1b468110687882021-09-20 3:57:395 days 4 hrs ago Supersonic: SSN Token PancakeSwap: Router0.438212382107882583 BNB
0x3dae48e81720a111a03e5498dd26945fd7e3d1cf1641587d439f25f2c2d1b468110687882021-09-20 3:57:395 days 4 hrs ago PancakeSwap: Router Supersonic: SSN Token0.438212382107882583 BNB
0x9cf0c51dc14432f10f9354e1d956cb596a56aa62cf0c851bd734e1af66e1e597110081842021-09-18 1:08:307 days 7 hrs ago Supersonic: SSN Token PancakeSwap: Router0.482138078149386957 BNB
0x9cf0c51dc14432f10f9354e1d956cb596a56aa62cf0c851bd734e1af66e1e597110081842021-09-18 1:08:307 days 7 hrs ago PancakeSwap: Router Supersonic: SSN Token0.482138078149386957 BNB
0x776e96433f56886e62eb694a4f44e5aa606b2b0ce83447f35f30acc5e58733c2109951822021-09-17 14:17:477 days 18 hrs ago Supersonic: SSN Token PancakeSwap: Router0.503783017525791845 BNB
0x776e96433f56886e62eb694a4f44e5aa606b2b0ce83447f35f30acc5e58733c2109951822021-09-17 14:17:477 days 18 hrs ago PancakeSwap: Router Supersonic: SSN Token0.503783017525791845 BNB
0x3b1ea97fb351457b93380e01b29da606631deea29241420ab589a00678760d01109465402021-09-15 21:41:359 days 11 hrs ago Supersonic: SSN Token PancakeSwap: Router0.53049657385004548 BNB
0x3b1ea97fb351457b93380e01b29da606631deea29241420ab589a00678760d01109465402021-09-15 21:41:359 days 11 hrs ago PancakeSwap: Router Supersonic: SSN Token0.53049657385004548 BNB
0x5fb5aa7ab52847cb329a0a43d389bb612d657300822fff74b891296d10f43f8f108970892021-09-14 4:19:1211 days 4 hrs ago Supersonic: SSN Token PancakeSwap: Router0.533540268256453937 BNB
0x5fb5aa7ab52847cb329a0a43d389bb612d657300822fff74b891296d10f43f8f108970892021-09-14 4:19:1211 days 4 hrs ago PancakeSwap: Router Supersonic: SSN Token0.533540268256453937 BNB
0x569c3e13f63484c29c9b47e5731ea2e7cefb534c6039385009f9cfe5491149c0107901782021-09-10 10:41:5614 days 22 hrs ago Supersonic: SSN Token PancakeSwap: Router0.542572873782041596 BNB
0x569c3e13f63484c29c9b47e5731ea2e7cefb534c6039385009f9cfe5491149c0107901782021-09-10 10:41:5614 days 22 hrs ago PancakeSwap: Router Supersonic: SSN Token0.542572873782041596 BNB
0xd4b6d64a794f4600c054fa75ca56c4417b840ff0157ad06363987b1b4a859017107594282021-09-09 8:47:4915 days 23 hrs ago Supersonic: SSN Token PancakeSwap: Router0.558808425752440088 BNB
0xd4b6d64a794f4600c054fa75ca56c4417b840ff0157ad06363987b1b4a859017107594282021-09-09 8:47:4915 days 23 hrs ago PancakeSwap: Router Supersonic: SSN Token0.558808425752440088 BNB
0xf8b6f7c57bcfd59c42194dbd56100fc4d0ac45d02b286d402332eb3f6e5c3e4d107166972021-09-07 20:50:2617 days 11 hrs ago Supersonic: SSN Token PancakeSwap: Router0.557994256506963184 BNB
0xf8b6f7c57bcfd59c42194dbd56100fc4d0ac45d02b286d402332eb3f6e5c3e4d107166972021-09-07 20:50:2617 days 11 hrs ago PancakeSwap: Router Supersonic: SSN Token0.557994256506963184 BNB
0xa46729f3c6b727ed0cfd091e066d65e8a12d677bd26d4a1e07e40a5c678a6648106883512021-09-06 20:40:4318 days 12 hrs ago Supersonic: SSN Token PancakeSwap: Router0.563416772670164255 BNB
0xa46729f3c6b727ed0cfd091e066d65e8a12d677bd26d4a1e07e40a5c678a6648106883512021-09-06 20:40:4318 days 12 hrs ago PancakeSwap: Router Supersonic: SSN Token0.563416772670164255 BNB
0x9e164173b8cc784e7a039cb02838cf233a049ae1d6b5c13b8032c398c8e6fa47106769542021-09-06 11:06:2818 days 21 hrs ago Supersonic: SSN Token PancakeSwap: Router0.573076519855605193 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Supersonic

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

//Supersonic Finance Token
//https://supersonic.finance

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library 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;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        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;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

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

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Supersonic is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Supersonic";
    string private _symbol = "SSN";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingEnabled = false;

    uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee < 10);
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee < 10);
        _liquidityFee = liquidityFee;
    }

   function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent >= 5);
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function enableTrading() external onlyOwner() {
        tradingEnabled = true;
    }

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        if (from != owner() && !tradingEnabled) {
            require(tradingEnabled, "Trading is not enabled yet");
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }




}

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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600955600954600019816200002057fe5b0660001903600a556040518060400160405280600a81526020017f5375706572736f6e696300000000000000000000000000000000000000000000815250600c90805190602001906200007592919062000619565b506040518060400160405280600381526020017f53534e0000000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c392919062000619565b506009600e60006101000a81548160ff021916908360ff1602179055506002600f55600f5460105560026011556011546012556001601360016101000a81548160ff0219169083151502179055506000601360026101000a81548160ff02191690831515021790555069010f0cf064dd59200000601455681b1ae4d6e2ef5000006015553480156200015457600080fd5b50600062000167620005e860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600360006200021c620005e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007305ff2b0db69458a0750badebc4f9e13add608c7f90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ba57600080fd5b505afa158015620002cf573d6000803e3d6000fd5b505050506040513d6020811015620002e657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035a57600080fd5b505afa1580156200036f573d6000803e3d6000fd5b505050506040513d60208110156200038657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200040157600080fd5b505af115801562000416573d6000803e3d6000fd5b505050506040513d60208110156200042d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004c1620005f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200057a620005e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a350620006bf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200065c57805160ff19168380011785556200068d565b828001600101855582156200068d579182015b828111156200068c5782518255916020019190600101906200066f565b5b5090506200069c9190620006a0565b5090565b5b80821115620006bb576000816000905550600101620006a1565b5090565b60805160601c60a05160601c61507f620007076000398061189d52806131f0525080610f4d5280613edc5280613fc85280613fef52806140fa5280614121525061507f6000f3fe6080604052600436106102345760003560e01c80635342acb41161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c05578063dd46706414610c40578063dd62ed3e14610c7b578063ea2f0b3714610d00578063f2fde38b14610d515761023b565b8063a457c2d714610aa4578063a69df4b514610b15578063a9059cbb14610b2c578063b6c5232414610b9d578063c49b9a8014610bc85761023b565b806388f82020116100f257806388f820201461091a5780638a8c523c146109815780638da5cb5b146109985780638ee88c53146109d957806395d89b4114610a145761023b565b80635342acb4146107e15780636bc87c3a1461084857806370a0823114610873578063715018a6146108d85780637d1db4a5146108ef5761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461069a57806349bd5a5e146106f55780634a74bb02146107365780634ada218b1461076357806352390c02146107905761023b565b80633685d4191461052157806339509351146105725780633b124fe7146105e35780633bd5d1731461060e578063437823ec146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610da2565b005b34801561028757600080fd5b50610290610e81565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f23565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f41565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f4b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610f6f565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f79565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b8101908080359060200190929190505050611052565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b506105086110d6565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110ed565b005b34801561057e57600080fd5b506105cb6004803603604081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611477565b60405180821515815260200191505060405180910390f35b3480156105ef57600080fd5b506105f861152a565b6040518082815260200191505060405180910390f35b34801561061a57600080fd5b506106476004803603602081101561063157600080fd5b8101908080359060200190929190505050611530565b005b34801561065557600080fd5b506106986004803603602081101561066c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c1565b005b3480156106a657600080fd5b506106df600480360360408110156106bd57600080fd5b81019080803590602001909291908035151590602001909291905050506117e4565b6040518082815260200191505060405180910390f35b34801561070157600080fd5b5061070a61189b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074257600080fd5b5061074b6118bf565b60405180821515815260200191505060405180910390f35b34801561076f57600080fd5b506107786118d2565b60405180821515815260200191505060405180910390f35b34801561079c57600080fd5b506107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e5565b005b3480156107ed57600080fd5b506108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bff565b60405180821515815260200191505060405180910390f35b34801561085457600080fd5b5061085d611c55565b6040518082815260200191505060405180910390f35b34801561087f57600080fd5b506108c26004803603602081101561089657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c5b565b6040518082815260200191505060405180910390f35b3480156108e457600080fd5b506108ed611d46565b005b3480156108fb57600080fd5b50610904611ecc565b6040518082815260200191505060405180910390f35b34801561092657600080fd5b506109696004803603602081101561093d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed2565b60405180821515815260200191505060405180910390f35b34801561098d57600080fd5b50610996611f28565b005b3480156109a457600080fd5b506109ad61200d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e557600080fd5b50610a12600480360360208110156109fc57600080fd5b8101908080359060200190929190505050612036565b005b348015610a2057600080fd5b50610a29612115565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a69578082015181840152602081019050610a4e565b50505050905090810190601f168015610a965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ab057600080fd5b50610afd60048036036040811015610ac757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121b7565b60405180821515815260200191505060405180910390f35b348015610b2157600080fd5b50610b2a612284565b005b348015610b3857600080fd5b50610b8560048036036040811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124a1565b60405180821515815260200191505060405180910390f35b348015610ba957600080fd5b50610bb26124bf565b6040518082815260200191505060405180910390f35b348015610bd457600080fd5b50610c0360048036036020811015610beb57600080fd5b810190808035151590602001909291905050506124c9565b005b348015610c1157600080fd5b50610c3e60048036036020811015610c2857600080fd5b81019080803590602001909291905050506125e7565b005b348015610c4c57600080fd5b50610c7960048036036020811015610c6357600080fd5b81019080803590602001909291905050506126ee565b005b348015610c8757600080fd5b50610cea60048036036040811015610c9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128df565b6040518082815260200191505060405180910390f35b348015610d0c57600080fd5b50610d4f60048036036020811015610d2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612966565b005b348015610d5d57600080fd5b50610da060048036036020811015610d7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a89565b005b610daa612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a8110610e7757600080fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f195780601f10610eee57610100808354040283529160200191610f19565b820191906000526020600020905b815481529060010190602001808311610efc57829003601f168201915b5050505050905090565b6000610f37610f30612c94565b8484612c9c565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610f86848484612e93565b61104784610f92612c94565b61104285604051806060016040528060288152602001614f3c60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ff8612c94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133309092919063ffffffff16565b612c9c565b600190509392505050565b6000600a548211156110af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614e81602a913960400191505060405180910390fd5b60006110b96133f0565b90506110ce818461341b90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6110f5612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611473578173ffffffffffffffffffffffffffffffffffffffff16600882815481106112a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114665760086001600880549050038154811061130457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061133c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061142c57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611473565b8080600101915050611277565b5050565b6000611520611484612c94565b8461151b8560056000611495612c94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b612c9c565b6001905092915050565b600f5481565b600061153a612c94565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614fd6602c913960400191505060405180910390fd5b60006115ea836134ed565b5050505050905061164381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061169b81600a5461354990919063ffffffff16565b600a819055506116b683600b5461346590919063ffffffff16565b600b81905550505050565b6116c9612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611789576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161187e57600061186e846134ed565b5050505050905080915050611895565b6000611889846134ed565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360019054906101000a900460ff1681565b601360029054906101000a900460ff1681565b6118ed612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b4157611afd600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611052565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611cf657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d41565b611d3e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611052565b90505b919050565b611d4e612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f30612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601360026101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61203e612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a811061210b57600080fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121ad5780601f10612182576101008083540402835291602001916121ad565b820191906000526020600020905b81548152906001019060200180831161219057829003601f168201915b5050505050905090565b600061227a6121c4612c94565b846122758560405180606001604052806025815260200161502560259139600560006121ee612c94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133309092919063ffffffff16565b612c9c565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150026023913960400191505060405180910390fd5b60025442116123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006124b56124ae612c94565b8484612e93565b6001905092915050565b6000600254905090565b6124d1612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b6125ef612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60058110156126bd57600080fd5b6126e560646126d78360095461359390919063ffffffff16565b61341b90919063ffffffff16565b60148190555050565b6126f6612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61296e612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a91612c94565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614eab6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614fb26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614ed16022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614f8d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e5e6023913960400191505060405180910390fd5b60008111612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f646029913960400191505060405180910390fd5b61300061200d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561306e575061303e61200d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130cf576014548111156130ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614ef36028913960400191505060405180910390fd5b5b6130d761200d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561311f5750601360029054906101000a900460ff16155b156131a757601360029054906101000a900460ff166131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b60006131b230611c5b565b905060145481106131c35760145490505b600060155482101590508080156131e75750601360009054906101000a900460ff16155b801561323f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132575750601360019054906101000a900460ff165b1561326b57601554915061326a82613619565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133125750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561331c57600090505b613328868686846136fb565b505050505050565b60008383111582906133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133a2578082015181840152602081019050613387565b50505050905090810190601f1680156133cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006133fd613a0c565b91509150613414818361341b90919063ffffffff16565b9250505090565b600061345d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c9d565b905092915050565b6000808284019050838110156134e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006135048a613d63565b92509250925060008060006135228d868661351d6133f0565b613dbd565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061358b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613330565b905092915050565b6000808314156135a65760009050613613565b60008284029050828482816135b757fe5b041461360e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f1b6021913960400191505060405180910390fd5b809150505b92915050565b6001601360006101000a81548160ff021916908315150217905550600061364a60028361341b90919063ffffffff16565b90506000613661828461354990919063ffffffff16565b9050600047905061367183613e46565b6000613686824761354990919063ffffffff16565b905061369283826140f4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b8061370957613708614245565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137ac5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137c1576137bc848484614288565b6139f8565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138645750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613879576138748484846144e8565b6139f7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561391d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139325761392d848484614748565b6139f6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139e9576139e4848484614913565b6139f5565b6139f4848484614748565b5b5b5b5b80613a0657613a05614c08565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613c6057826003600060088481548110613a3f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613b265750816004600060088481548110613abe57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613b3d57600a5460095494509450505050613c99565b613bc66003600060088481548110613b5157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461354990919063ffffffff16565b9250613c516004600060088481548110613bdc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361354990919063ffffffff16565b91508080600101915050613a20565b50613c78600954600a5461341b90919063ffffffff16565b821015613c9057600a54600954935093505050613c99565b81819350935050505b9091565b60008083118290613d49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d0e578082015181840152602081019050613cf3565b50505050905090810190601f168015613d3b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d5557fe5b049050809150509392505050565b600080600080613d7285614c1c565b90506000613d7f86614c4d565b90506000613da882613d9a858a61354990919063ffffffff16565b61354990919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613dd6858961359390919063ffffffff16565b90506000613ded868961359390919063ffffffff16565b90506000613e04878961359390919063ffffffff16565b90506000613e2d82613e1f858761354990919063ffffffff16565b61354990919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613e6057600080fd5b50604051908082528060200260200182016040528015613e8f5781602001602082028036833780820191505090505b5090503081600081518110613ea057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f4057600080fd5b505afa158015613f54573d6000803e3d6000fd5b505050506040513d6020811015613f6a57600080fd5b810190808051906020019092919050505081600181518110613f8857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fed307f000000000000000000000000000000000000000000000000000000000000000084612c9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156140af578082015181840152602081019050614094565b505050509050019650505050505050600060405180830381600087803b1580156140d857600080fd5b505af11580156140ec573d6000803e3d6000fd5b505050505050565b61411f307f000000000000000000000000000000000000000000000000000000000000000084612c9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061416961200d565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156141ee57600080fd5b505af1158015614202573d6000803e3d6000fd5b50505050506040513d606081101561421957600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f5414801561425957506000601154145b1561426357614286565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b60008060008060008061429a876134ed565b9550955095509550955095506142f887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061438d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061442285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061446e81614c7e565b6144788483614e23565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806144fa876134ed565b95509550955095509550955061455886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ed83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061468285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146ce81614c7e565b6146d88483614e23565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061475a876134ed565b9550955095509550955095506147b886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061484d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061489981614c7e565b6148a38483614e23565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614925876134ed565b95509550955095509550955061498387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461354990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aad83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b8e81614c7e565b614b988483614e23565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b6000614c466064614c38600f548561359390919063ffffffff16565b61341b90919063ffffffff16565b9050919050565b6000614c776064614c696011548561359390919063ffffffff16565b61341b90919063ffffffff16565b9050919050565b6000614c886133f0565b90506000614c9f828461359390919063ffffffff16565b9050614cf381600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e1e57614dda83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e3882600a5461354990919063ffffffff16565b600a81905550614e5381600b5461346590919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8991b11691b8b0ec254c0ca41f3f239dda2e79a1ba2e659c8295048edc310fc64736f6c634300060c0033

Deployed ByteCode Sourcemap

24328:18359:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31642:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26703:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27617:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28746:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25277:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26980:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27788:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29670:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26889:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30274:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28111:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25093:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28841:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31401:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29226:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25335:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25410:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25457:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29931:335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35627:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25176:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27083:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15099:148;;;;;;;;;;;;;:::i;:::-;;25500:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28618:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32331:86;;;;;;;;;;;;;:::i;:::-;;14463:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31779:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26794:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28339:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16105:293;;;;;;;;;;;;;:::i;:::-;;27289:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15654:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32150:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31945:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15819:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27466:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31522:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15402:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31642:129;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31733:2:::1;31724:6;:11;31716:20;;;::::0;::::1;;31757:6;31747:7;:16;;;;31642:129:::0;:::o;26703:83::-;26740:13;26773:5;26766:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26703:83;:::o;27617:163::-;27694:4;27711:39;27720:12;:10;:12::i;:::-;27734:7;27743:6;27711:8;:39::i;:::-;27768:4;27761:11;;27617:163;;;;:::o;28746:87::-;28788:7;28815:10;;28808:17;;28746:87;:::o;25277:51::-;;;:::o;26980:95::-;27033:7;27060;;27053:14;;26980:95;:::o;27788:315::-;27888:4;27905:36;27915:6;27923:9;27934:6;27905:9;:36::i;:::-;27952:121;27961:6;27969:12;:10;:12::i;:::-;27983:89;28021:6;27983:89;;;;;;;;;;;;;;;;;:11;:19;27995:6;27983:19;;;;;;;;;;;;;;;:33;28003:12;:10;:12::i;:::-;27983:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;27952:8;:121::i;:::-;28091:4;28084:11;;27788:315;;;;;:::o;29670:253::-;29736:7;29775;;29764;:18;;29756:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29840:19;29863:10;:8;:10::i;:::-;29840:33;;29891:24;29903:11;29891:7;:11;;:24;;;;:::i;:::-;29884:31;;;29670:253;;;:::o;26889:83::-;26930:5;26955:9;;;;;;;;;;;26948:16;;26889:83;:::o;30274:479::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30356:11:::1;:20;30368:7;30356:20;;;;;;;;;;;;;;;;;;;;;;;;;30348:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30424:9;30419:327;30443:9;:16;;;;30439:1;:20;30419:327;;;30501:7;30485:23;;:9;30495:1;30485:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30481:254;;;30544:9;30573:1;30554:9;:16;;;;:20;30544:31;;;;;;;;;;;;;;;;;;;;;;;;;30529:9;30539:1;30529:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30613:1;30594:7;:16;30602:7;30594:16;;;;;;;;;;;;;;;:20;;;;30656:5;30633:11;:20;30645:7;30633:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30680:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30714:5;;30481:254;30461:3;;;;;;;30419:327;;;;30274:479:::0;:::o;28111:220::-;28201:4;28218:83;28227:12;:10;:12::i;:::-;28241:7;28250:50;28289:10;28250:11;:25;28262:12;:10;:12::i;:::-;28250:25;;;;;;;;;;;;;;;:34;28276:7;28250:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28218:8;:83::i;:::-;28319:4;28312:11;;28111:220;;;;:::o;25093:26::-;;;;:::o;28841:377::-;28893:14;28910:12;:10;:12::i;:::-;28893:29;;28942:11;:19;28954:6;28942:19;;;;;;;;;;;;;;;;;;;;;;;;;28941:20;28933:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29022:15;29046:19;29057:7;29046:10;:19::i;:::-;29021:44;;;;;;;29094:28;29114:7;29094;:15;29102:6;29094:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29076:7;:15;29084:6;29076:15;;;;;;;;;;;;;;;:46;;;;29143:20;29155:7;29143;;:11;;:20;;;;:::i;:::-;29133:7;:30;;;;29187:23;29202:7;29187:10;;:14;;:23;;;;:::i;:::-;29174:10;:36;;;;28841:377;;;:::o;31401:113::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31502:4:::1;31472:18;:27;31491:7;31472:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31401:113:::0;:::o;29226:436::-;29316:7;29355;;29344;:18;;29336:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29414:17;29409:246;;29449:15;29473:19;29484:7;29473:10;:19::i;:::-;29448:44;;;;;;;29514:7;29507:14;;;;;29409:246;29556:23;29587:19;29598:7;29587:10;:19::i;:::-;29554:52;;;;;;;29628:15;29621:22;;;29226:436;;;;;:::o;25335:38::-;;;:::o;25410:40::-;;;;;;;;;;;;;:::o;25457:34::-;;;;;;;;;;;;;:::o;29931:335::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30016:11:::1;:20;30028:7;30016:20;;;;;;;;;;;;;;;;;;;;;;;;;30015:21;30007:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30101:1;30082:7;:16;30090:7;30082:16;;;;;;;;;;;;;;;;:20;30079:108;;;30138:37;30158:7;:16;30166:7;30158:16;;;;;;;;;;;;;;;;30138:19;:37::i;:::-;30119:7;:16;30127:7;30119:16;;;;;;;;;;;;;;;:56;;;;30079:108;30220:4;30197:11;:20;30209:7;30197:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30235:9;30250:7;30235:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29931:335:::0;:::o;35627:123::-;35691:4;35715:18;:27;35734:7;35715:27;;;;;;;;;;;;;;;;;;;;;;;;;35708:34;;35627:123;;;:::o;25176:32::-;;;;:::o;27083:198::-;27149:7;27173:11;:20;27185:7;27173:20;;;;;;;;;;;;;;;;;;;;;;;;;27169:49;;;27202:7;:16;27210:7;27202:16;;;;;;;;;;;;;;;;27195:23;;;;27169:49;27236:37;27256:7;:16;27264:7;27256:16;;;;;;;;;;;;;;;;27236:19;:37::i;:::-;27229:44;;27083:198;;;;:::o;15099:148::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15206:1:::1;15169:40;;15190:6;::::0;::::1;;;;;;;;15169:40;;;;;;;;;;;;15237:1;15220:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15099:148::o:0;25500:53::-;;;;:::o;28618:120::-;28686:4;28710:11;:20;28722:7;28710:20;;;;;;;;;;;;;;;;;;;;;;;;;28703:27;;28618:120;;;:::o;32331:86::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32405:4:::1;32388:14;;:21;;;;;;;;;;;;;;;;;;32331:86::o:0;14463:79::-;14501:7;14528:6;;;;;;;;;;;14521:13;;14463:79;:::o;31779:159::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31888:2:::1;31873:12;:17;31865:26;;;::::0;::::1;;31918:12;31902:13;:28;;;;31779:159:::0;:::o;26794:87::-;26833:13;26866:7;26859:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26794:87;:::o;28339:271::-;28434:4;28451:129;28460:12;:10;:12::i;:::-;28474:7;28483:96;28522:15;28483:96;;;;;;;;;;;;;;;;;:11;:25;28495:12;:10;:12::i;:::-;28483:25;;;;;;;;;;;;;;;:34;28509:7;28483:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28451:8;:129::i;:::-;28598:4;28591:11;;28339:271;;;;:::o;16105:293::-;16175:10;16157:28;;:14;;;;;;;;;;;:28;;;16149:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16250:9;;16244:3;:15;16236:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16341:14;;;;;;;;;;;16312:44;;16333:6;;;;;;;;;;16312:44;;;;;;;;;;;;16376:14;;;;;;;;;;;16367:6;;:23;;;;;;;;;;;;;;;;;;16105:293::o;27289:169::-;27369:4;27386:42;27396:12;:10;:12::i;:::-;27410:9;27421:6;27386:9;:42::i;:::-;27446:4;27439:11;;27289:169;;;;:::o;15654:89::-;15699:7;15726:9;;15719:16;;15654:89;:::o;32150:173::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32253:8:::1;32229:21;;:32;;;;;;;;;;;;;;;;;;32277:38;32306:8;32277:38;;;;;;;;;;;;;;;;;;;;32150:173:::0;:::o;31945:199::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32048:1:::1;32032:12;:17;;32024:26;;;::::0;::::1;;32076:60;32120:5;32076:25;32088:12;32076:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;32061:12;:75;;;;31945:199:::0;:::o;15819:214::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:6:::1;::::0;::::1;;;;;;;;15883:14;;:23;;;;;;;;;;;;;;;;;;15934:1;15917:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15965:4;15959:3;:10;15947:9;:22;;;;16022:1;15985:40;;16006:6;::::0;::::1;;;;;;;;15985:40;;;;;;;;;;;;15819:214:::0;:::o;27466:143::-;27547:7;27574:11;:18;27586:5;27574:18;;;;;;;;;;;;;;;:27;27593:7;27574:27;;;;;;;;;;;;;;;;27567:34;;27466:143;;;;:::o;31522:112::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31621:5:::1;31591:18;:27;31610:7;31591:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31522:112:::0;:::o;15402:244::-;14685:12;:10;:12::i;:::-;14675:22;;:6;;;;;;;;;;:22;;;14667:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15511:1:::1;15491:22;;:8;:22;;;;15483:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15601:8;15572:38;;15593:6;::::0;::::1;;;;;;;;15572:38;;;;;;;;;;;;15630:8;15621:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15402:244:::0;:::o;7449:106::-;7502:15;7537:10;7530:17;;7449:106;:::o;35758:337::-;35868:1;35851:19;;:5;:19;;;;35843:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35949:1;35930:21;;:7;:21;;;;35922:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36033:6;36003:11;:18;36015:5;36003:18;;;;;;;;;;;;;;;:27;36022:7;36003:27;;;;;;;;;;;;;;;:36;;;;36071:7;36055:32;;36064:5;36055:32;;;36080:6;36055:32;;;;;;;;;;;;;;;;;;35758:337;;;:::o;36103:1907::-;36241:1;36225:18;;:4;:18;;;;36217:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36318:1;36304:16;;:2;:16;;;;36296:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36388:1;36379:6;:10;36371:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36459:7;:5;:7::i;:::-;36451:15;;:4;:15;;;;:32;;;;;36476:7;:5;:7::i;:::-;36470:13;;:2;:13;;;;36451:32;36448:125;;;36516:12;;36506:6;:22;;36498:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36448:125;36598:7;:5;:7::i;:::-;36590:15;;:4;:15;;;;:34;;;;;36610:14;;;;;;;;;;;36609:15;36590:34;36586:120;;;36649:14;;;;;;;;;;;36641:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36586:120;37000:28;37031:24;37049:4;37031:9;:24::i;:::-;37000:55;;37095:12;;37071:20;:36;37068:112;;37156:12;;37133:35;;37068:112;37192:24;37243:29;;37219:20;:53;;37192:80;;37301:19;:53;;;;;37338:16;;;;;;;;;;;37337:17;37301:53;:91;;;;;37379:13;37371:21;;:4;:21;;;;37301:91;:129;;;;;37409:21;;;;;;;;;;;37301:129;37283:318;;;37480:29;;37457:52;;37553:36;37568:20;37553:14;:36::i;:::-;37283:318;37674:12;37689:4;37674:19;;37793:18;:24;37812:4;37793:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37821:18;:22;37840:2;37821:22;;;;;;;;;;;;;;;;;;;;;;;;;37793:50;37790:96;;;37869:5;37859:15;;37790:96;37964:38;37979:4;37984:2;37987:6;37994:7;37964:14;:38::i;:::-;36103:1907;;;;;;:::o;3859:192::-;3945:7;3978:1;3973;:6;;3981:12;3965:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4005:9;4021:1;4017;:5;4005:17;;4042:1;4035:8;;;3859:192;;;;;:::o;33819:163::-;33860:7;33881:15;33898;33917:19;:17;:19::i;:::-;33880:56;;;;33954:20;33966:7;33954;:11;;:20;;;;:::i;:::-;33947:27;;;;33819:163;:::o;5257:132::-;5315:7;5342:39;5346:1;5349;5342:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5335:46;;5257:132;;;;:::o;2956:181::-;3014:7;3034:9;3050:1;3046;:5;3034:17;;3075:1;3070;:6;;3062:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3128:1;3121:8;;;2956:181;;;;:::o;32617:419::-;32676:7;32685;32694;32703;32712;32721;32742:23;32767:12;32781:18;32803:20;32815:7;32803:11;:20::i;:::-;32741:82;;;;;;32835:15;32852:23;32877:12;32893:50;32905:7;32914:4;32920:10;32932;:8;:10::i;:::-;32893:11;:50::i;:::-;32834:109;;;;;;32962:7;32971:15;32988:4;32994:15;33011:4;33017:10;32954:74;;;;;;;;;;;;;;;;;;32617:419;;;;;;;:::o;3420:136::-;3478:7;3505:43;3509:1;3512;3505:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3498:50;;3420:136;;;;:::o;4310:471::-;4368:7;4618:1;4613;:6;4609:47;;;4643:1;4636:8;;;;4609:47;4668:9;4684:1;4680;:5;4668:17;;4713:1;4708;4704;:5;;;;;;:10;4696:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4772:1;4765:8;;;4310:471;;;;;:::o;38018:977::-;25948:4;25929:16;;:23;;;;;;;;;;;;;;;;;;38154:12:::1;38169:27;38194:1;38169:20;:24;;:27;;;;:::i;:::-;38154:42;;38207:17;38227:30;38252:4;38227:20;:24;;:30;;;;:::i;:::-;38207:50;;38535:22;38560:21;38535:46;;38626:22;38643:4;38626:16;:22::i;:::-;38779:18;38800:41;38826:14;38800:21;:25;;:41;;;;:::i;:::-;38779:62;;38891:35;38904:9;38915:10;38891:12;:35::i;:::-;38944:43;38959:4;38965:10;38977:9;38944:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25963:1;;;;25994:5:::0;25975:16;;:24;;;;;;;;;;;;;;;;;;38018:977;:::o;40194:818::-;40305:7;40301:40;;40327:14;:12;:14::i;:::-;40301:40;40358:11;:19;40370:6;40358:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40382:11;:22;40394:9;40382:22;;;;;;;;;;;;;;;;;;;;;;;;;40381:23;40358:46;40354:597;;;40421:48;40443:6;40451:9;40462:6;40421:21;:48::i;:::-;40354:597;;;40492:11;:19;40504:6;40492:19;;;;;;;;;;;;;;;;;;;;;;;;;40491:20;:46;;;;;40515:11;:22;40527:9;40515:22;;;;;;;;;;;;;;;;;;;;;;;;;40491:46;40487:464;;;40554:46;40574:6;40582:9;40593:6;40554:19;:46::i;:::-;40487:464;;;40623:11;:19;40635:6;40623:19;;;;;;;;;;;;;;;;;;;;;;;;;40622:20;:47;;;;;40647:11;:22;40659:9;40647:22;;;;;;;;;;;;;;;;;;;;;;;;;40646:23;40622:47;40618:333;;;40686:44;40704:6;40712:9;40723:6;40686:17;:44::i;:::-;40618:333;;;40752:11;:19;40764:6;40752:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40775:11;:22;40787:9;40775:22;;;;;;;;;;;;;;;;;;;;;;;;;40752:45;40748:203;;;40814:48;40836:6;40844:9;40855:6;40814:21;:48::i;:::-;40748:203;;;40895:44;40913:6;40921:9;40932:6;40895:17;:44::i;:::-;40748:203;40618:333;40487:464;40354:597;40967:7;40963:41;;40989:15;:13;:15::i;:::-;40963:41;40194:818;;;;:::o;33990:555::-;34040:7;34049;34069:15;34087:7;;34069:25;;34105:15;34123:7;;34105:25;;34146:9;34141:289;34165:9;:16;;;;34161:1;:20;34141:289;;;34231:7;34207;:21;34215:9;34225:1;34215:12;;;;;;;;;;;;;;;;;;;;;;;;;34207:21;;;;;;;;;;;;;;;;:31;:66;;;;34266:7;34242;:21;34250:9;34260:1;34250:12;;;;;;;;;;;;;;;;;;;;;;;;;34242:21;;;;;;;;;;;;;;;;:31;34207:66;34203:97;;;34283:7;;34292;;34275:25;;;;;;;;;34203:97;34325:34;34337:7;:21;34345:9;34355:1;34345:12;;;;;;;;;;;;;;;;;;;;;;;;;34337:21;;;;;;;;;;;;;;;;34325:7;:11;;:34;;;;:::i;:::-;34315:44;;34384:34;34396:7;:21;34404:9;34414:1;34404:12;;;;;;;;;;;;;;;;;;;;;;;;;34396:21;;;;;;;;;;;;;;;;34384:7;:11;;:34;;;;:::i;:::-;34374:44;;34183:3;;;;;;;34141:289;;;;34454:20;34466:7;;34454;;:11;;:20;;;;:::i;:::-;34444:7;:30;34440:61;;;34484:7;;34493;;34476:25;;;;;;;;34440:61;34520:7;34529;34512:25;;;;;;33990:555;;;:::o;5885:278::-;5971:7;6003:1;5999;:5;6006:12;5991:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6030:9;6046:1;6042;:5;;;;;;6030:17;;6154:1;6147:8;;;5885:278;;;;;:::o;33044:330::-;33104:7;33113;33122;33142:12;33157:24;33173:7;33157:15;:24::i;:::-;33142:39;;33192:18;33213:30;33235:7;33213:21;:30::i;:::-;33192:51;;33254:23;33280:33;33302:10;33280:17;33292:4;33280:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33254:59;;33332:15;33349:4;33355:10;33324:42;;;;;;;;;33044:330;;;;;:::o;33382:429::-;33497:7;33506;33515;33535:15;33553:24;33565:11;33553:7;:11;;:24;;;;:::i;:::-;33535:42;;33588:12;33603:21;33612:11;33603:4;:8;;:21;;;;:::i;:::-;33588:36;;33635:18;33656:27;33671:11;33656:10;:14;;:27;;;;:::i;:::-;33635:48;;33694:23;33720:33;33742:10;33720:17;33732:4;33720:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33694:59;;33772:7;33781:15;33798:4;33764:39;;;;;;;;;;33382:429;;;;;;;;:::o;39003:589::-;39129:21;39167:1;39153:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39129:40;;39198:4;39180;39185:1;39180:7;;;;;;;;;;;;;:23;;;;;;;;;;;39224:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39214:4;39219:1;39214:7;;;;;;;;;;;;;:32;;;;;;;;;;;39259:62;39276:4;39291:15;39309:11;39259:8;:62::i;:::-;39360:15;:66;;;39441:11;39467:1;39511:4;39538;39558:15;39360:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39003:589;;:::o;39600:513::-;39748:62;39765:4;39780:15;39798:11;39748:8;:62::i;:::-;39853:15;:31;;;39892:9;39925:4;39945:11;39971:1;40014;40057:7;:5;:7::i;:::-;40079:15;39853:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39600:513;;:::o;35252:234::-;35309:1;35298:7;;:12;:34;;;;;35331:1;35314:13;;:18;35298:34;35295:46;;;35334:7;;35295:46;35371:7;;35353:15;:25;;;;35413:13;;35389:21;:37;;;;35449:1;35439:7;:11;;;;35477:1;35461:13;:17;;;;35252:234;:::o;42113:563::-;42216:15;42233:23;42258:12;42272:23;42297:12;42311:18;42333:19;42344:7;42333:10;:19::i;:::-;42215:137;;;;;;;;;;;;42381:28;42401:7;42381;:15;42389:6;42381:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42363:7;:15;42371:6;42363:15;;;;;;;;;;;;;;;:46;;;;42438:28;42458:7;42438;:15;42446:6;42438:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42420:7;:15;42428:6;42420:15;;;;;;;;;;;;;;;:46;;;;42498:39;42521:15;42498:7;:18;42506:9;42498:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42477:7;:18;42485:9;42477:18;;;;;;;;;;;;;;;:60;;;;42548:26;42563:10;42548:14;:26::i;:::-;42585:23;42597:4;42603;42585:11;:23::i;:::-;42641:9;42624:44;;42633:6;42624:44;;;42652:15;42624:44;;;;;;;;;;;;;;;;;;42113:563;;;;;;;;;:::o;41530:575::-;41631:15;41648:23;41673:12;41687:23;41712:12;41726:18;41748:19;41759:7;41748:10;:19::i;:::-;41630:137;;;;;;;;;;;;41796:28;41816:7;41796;:15;41804:6;41796:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41778:7;:15;41786:6;41778:15;;;;;;;;;;;;;;;:46;;;;41856:39;41879:15;41856:7;:18;41864:9;41856:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41835:7;:18;41843:9;41835:18;;;;;;;;;;;;;;;:60;;;;41927:39;41950:15;41927:7;:18;41935:9;41927:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41906:7;:18;41914:9;41906:18;;;;;;;;;;;;;;;:60;;;;41977:26;41992:10;41977:14;:26::i;:::-;42014:23;42026:4;42032;42014:11;:23::i;:::-;42070:9;42053:44;;42062:6;42053:44;;;42081:15;42053:44;;;;;;;;;;;;;;;;;;41530:575;;;;;;;;;:::o;41020:502::-;41119:15;41136:23;41161:12;41175:23;41200:12;41214:18;41236:19;41247:7;41236:10;:19::i;:::-;41118:137;;;;;;;;;;;;41284:28;41304:7;41284;:15;41292:6;41284:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41266:7;:15;41274:6;41266:15;;;;;;;;;;;;;;;:46;;;;41344:39;41367:15;41344:7;:18;41352:9;41344:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41323:7;:18;41331:9;41323:18;;;;;;;;;;;;;;;:60;;;;41394:26;41409:10;41394:14;:26::i;:::-;41431:23;41443:4;41449;41431:11;:23::i;:::-;41487:9;41470:44;;41479:6;41470:44;;;41498:15;41470:44;;;;;;;;;;;;;;;;;;41020:502;;;;;;;;;:::o;30759:634::-;30862:15;30879:23;30904:12;30918:23;30943:12;30957:18;30979:19;30990:7;30979:10;:19::i;:::-;30861:137;;;;;;;;;;;;31027:28;31047:7;31027;:15;31035:6;31027:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31009:7;:15;31017:6;31009:15;;;;;;;;;;;;;;;:46;;;;31084:28;31104:7;31084;:15;31092:6;31084:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31066:7;:15;31074:6;31066:15;;;;;;;;;;;;;;;:46;;;;31144:39;31167:15;31144:7;:18;31152:9;31144:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31123:7;:18;31131:9;31123:18;;;;;;;;;;;;;;;:60;;;;31215:39;31238:15;31215:7;:18;31223:9;31215:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31194:7;:18;31202:9;31194:18;;;;;;;;;;;;;;;:60;;;;31265:26;31280:10;31265:14;:26::i;:::-;31302:23;31314:4;31320;31302:11;:23::i;:::-;31358:9;31341:44;;31350:6;31341:44;;;31369:15;31341:44;;;;;;;;;;;;;;;;;;30759:634;;;;;;;;;:::o;35494:125::-;35548:15;;35538:7;:25;;;;35590:21;;35574:13;:37;;;;35494:125::o;34916:154::-;34980:7;35007:55;35046:5;35007:20;35019:7;;35007;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35000:62;;34916:154;;;:::o;35078:166::-;35148:7;35175:61;35220:5;35175:26;35187:13;;35175:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35168:68;;35078:166;;;:::o;34553:355::-;34616:19;34639:10;:8;:10::i;:::-;34616:33;;34660:18;34681:27;34696:11;34681:10;:14;;:27;;;;:::i;:::-;34660:48;;34744:38;34771:10;34744:7;:22;34760:4;34744:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34719:7;:22;34735:4;34719:22;;;;;;;;;;;;;;;:63;;;;34796:11;:26;34816:4;34796:26;;;;;;;;;;;;;;;;;;;;;;;;;34793:107;;;34862:38;34889:10;34862:7;:22;34878:4;34862:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34837:7;:22;34853:4;34837:22;;;;;;;;;;;;;;;:63;;;;34793:107;34553:355;;;:::o;32462:147::-;32540:17;32552:4;32540:7;;:11;;:17;;;;:::i;:::-;32530:7;:27;;;;32581:20;32596:4;32581:10;;:14;;:20;;;;:::i;:::-;32568:10;:33;;;;32462:147;;:::o

Swarm Source

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