ETH Price: $2,666.71 (+1.55%)

Contract

0xc9f167fF32a38CdEe516813780C82cCD1B22F2B7
 

Overview

ETH Balance

0.002422505740259106 ETH

Eth Value

$6.46 (@ $2,666.71/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203966912024-07-27 8:29:3527 days ago1722068975IN
0xc9f167fF...D1B22F2B7
0 ETH0.000050572.08308101
Transfer198205692024-05-07 20:27:11107 days ago1715113631IN
0xc9f167fF...D1B22F2B7
0 ETH0.000552995.73032918
Approve190743202024-01-24 5:08:23212 days ago1706072903IN
0xc9f167fF...D1B22F2B7
0 ETH0.000374928.11442285
Approve188450842023-12-23 0:55:47244 days ago1703292947IN
0xc9f167fF...D1B22F2B7
0 ETH0.0011786925.34546992
Approve187778982023-12-13 14:38:59253 days ago1702478339IN
0xc9f167fF...D1B22F2B7
0 ETH0.0023664750.88652406
Approve186829092023-11-30 7:22:59267 days ago1701328979IN
0xc9f167fF...D1B22F2B7
0 ETH0.0014271630.64879387
Approve186452022023-11-25 0:41:35272 days ago1700872895IN
0xc9f167fF...D1B22F2B7
0 ETH0.0011293124.28363218
Approve186449282023-11-24 23:46:35272 days ago1700869595IN
0xc9f167fF...D1B22F2B7
0 ETH0.0014407530.9406511
Approve186235442023-11-21 23:53:59275 days ago1700610839IN
0xc9f167fF...D1B22F2B7
0 ETH0.0019389841.93216274
Transfer186095412023-11-20 0:51:35277 days ago1700441495IN
0xc9f167fF...D1B22F2B7
0 ETH0.0006780320.6510533
Approve186060142023-11-19 13:00:23277 days ago1700398823IN
0xc9f167fF...D1B22F2B7
0 ETH0.0009778621
Approve185827212023-11-16 6:41:47281 days ago1700116907IN
0xc9f167fF...D1B22F2B7
0 ETH0.0010951423.54904451
Approve185701852023-11-14 12:36:59283 days ago1699965419IN
0xc9f167fF...D1B22F2B7
0 ETH0.0016213434.863872
Approve185660852023-11-13 22:53:11283 days ago1699915991IN
0xc9f167fF...D1B22F2B7
0 ETH0.0017093736.75671387
Transfer185460992023-11-11 3:45:47286 days ago1699674347IN
0xc9f167fF...D1B22F2B7
0 ETH0.0023238229.2661535
Approve185452362023-11-11 0:51:47286 days ago1699663907IN
0xc9f167fF...D1B22F2B7
0 ETH0.0015823733.98197609
Transfer185450242023-11-11 0:08:59286 days ago1699661339IN
0xc9f167fF...D1B22F2B7
0 ETH0.0025192831.72785891
Approve185439682023-11-10 20:36:23286 days ago1699648583IN
0xc9f167fF...D1B22F2B7
0 ETH0.0019268641.43347525
Approve185420762023-11-10 14:15:23286 days ago1699625723IN
0xc9f167fF...D1B22F2B7
0 ETH0.0023363350.23829102
Approve185417652023-11-10 13:12:35286 days ago1699621955IN
0xc9f167fF...D1B22F2B7
0 ETH0.0014796832.02435885
Approve185416692023-11-10 12:53:11286 days ago1699620791IN
0xc9f167fF...D1B22F2B7
0 ETH0.001455631.5030992
Approve185416602023-11-10 12:51:23287 days ago1699620683IN
0xc9f167fF...D1B22F2B7
0 ETH0.0014252230.6466882
Approve185415552023-11-10 12:30:23287 days ago1699619423IN
0xc9f167fF...D1B22F2B7
0 ETH0.0015732733.83032651
Approve185412002023-11-10 11:18:47287 days ago1699615127IN
0xc9f167fF...D1B22F2B7
0 ETH0.0015929734.25391888
Approve185407112023-11-10 9:40:23287 days ago1699609223IN
0xc9f167fF...D1B22F2B7
0 ETH0.001443331.03548162
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
187779262023-12-13 14:44:35253 days ago1702478675
0xc9f167fF...D1B22F2B7
0.00053353 ETH
187779262023-12-13 14:44:35253 days ago1702478675
0xc9f167fF...D1B22F2B7
0.00373472 ETH
187779262023-12-13 14:44:35253 days ago1702478675
0xc9f167fF...D1B22F2B7
0.00533531 ETH
186452032023-11-25 0:41:47272 days ago1700872907
0xc9f167fF...D1B22F2B7
0.00067772 ETH
186452032023-11-25 0:41:47272 days ago1700872907
0xc9f167fF...D1B22F2B7
0.00474404 ETH
186452032023-11-25 0:41:47272 days ago1700872907
0xc9f167fF...D1B22F2B7
0.00677721 ETH
186095412023-11-20 0:51:35277 days ago1700441495
0xc9f167fF...D1B22F2B7
0.29476333 ETH
185702072023-11-14 12:41:23283 days ago1699965683
0xc9f167fF...D1B22F2B7
0.00061363 ETH
185702072023-11-14 12:41:23283 days ago1699965683
0xc9f167fF...D1B22F2B7
0.00429542 ETH
185702072023-11-14 12:41:23283 days ago1699965683
0xc9f167fF...D1B22F2B7
0.00613631 ETH
185415582023-11-10 12:30:59287 days ago1699619459
0xc9f167fF...D1B22F2B7
0.00129804 ETH
185415582023-11-10 12:30:59287 days ago1699619459
0xc9f167fF...D1B22F2B7
0.0090863 ETH
185415582023-11-10 12:30:59287 days ago1699619459
0xc9f167fF...D1B22F2B7
0.01298043 ETH
185390512023-11-10 4:06:59287 days ago1699589219
0xc9f167fF...D1B22F2B7
0.00184111 ETH
185390512023-11-10 4:06:59287 days ago1699589219
0xc9f167fF...D1B22F2B7
0.01288781 ETH
185390512023-11-10 4:06:59287 days ago1699589219
0xc9f167fF...D1B22F2B7
0.01841116 ETH
185380962023-11-10 0:54:35287 days ago1699577675
0xc9f167fF...D1B22F2B7
0.00378073 ETH
185380962023-11-10 0:54:35287 days ago1699577675
0xc9f167fF...D1B22F2B7
0.02646512 ETH
185380962023-11-10 0:54:35287 days ago1699577675
0xc9f167fF...D1B22F2B7
0.03780732 ETH
185379152023-11-10 0:17:59287 days ago1699575479
0xc9f167fF...D1B22F2B7
0.00241162 ETH
185379152023-11-10 0:17:59287 days ago1699575479
0xc9f167fF...D1B22F2B7
0.0168814 ETH
185379152023-11-10 0:17:59287 days ago1699575479
0xc9f167fF...D1B22F2B7
0.02411628 ETH
185365722023-11-09 19:47:11287 days ago1699559231
0xc9f167fF...D1B22F2B7
0.00173708 ETH
185365722023-11-09 19:47:11287 days ago1699559231
0xc9f167fF...D1B22F2B7
0.01215957 ETH
185365722023-11-09 19:47:11287 days ago1699559231
0xc9f167fF...D1B22F2B7
0.01737082 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GUDMORNIN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-09
*/

/*

http://gudmornin.wtf
https://twitter.com/GudMorninERC
https://t.me/GudMorninERC

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠶⠛⠉⠀⠀⠀⠀⠉⠙⠶⠦⣀⡀⠀⠀⠀⣀⣠⠴⠶⠞⠛⠛⠶⠤⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠲⣞⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠞⠁⠀⠀⠀⠀⠀⣀⣠⡤⠤⠤⠤⣤⣄⡀⠀⠀⠹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣴⠃⠀⠀⠀⠀⢠⠶⠛⠉⠁⠀⠀⠀⠀⠀⠈⠙⠓⠦⢤⣿⠤⠖⠒⠒⠒⠒⠒⠚⠒⠓⠲⠾⢧⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⡤⠤⠤⠤⠤⣭⣳⣤⡀⠀⠀⠀⢀⣀⣀⣠⣤⣤⣤⣬⣙⣳⣦⣄⠀⠀
⠀⠀⠀⠀⢀⣀⣿⣷⣦⣤⣄⣀⡀⠀⣀⣀⣤⣤⣤⣶⣯⣭⣥⣶⣶⣯⣭⣽⣶⣶⣬⣭⣙⣴⢖⣫⣭⣿⣿⣶⣶⣶⣶⣶⣾⣿⣿⣿⣷⣤
⠀⠀⠀⣤⠛⢹⡇⠈⠉⠙⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⡿⣿⣿⣿⣿
⠀⢀⡞⠁⠀⠸⠇⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡣⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿
⢀⡾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡁⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⡿⠛⠉⠉⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⣀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⣉⣩⡭⠿⠛⠉⠁⠀⠀⠀⠀⠀⠙⠛⢿⡒⠛⠛⠛⠋⠻⡭⡉⠁⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠹⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡾⠛⠉⠉⠉⠳⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢀⣀⠀⠀⠀⠉⠙⠳⠦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣇⡀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⡄⠀⠈⠉⠛⠢⢤⣤⣀⠀⠀⠈⠉⠉⠑⠒⠒⠒⠢⠤⢤⣤⣤⣤⣤⣄⣠⣤⣤⡤⠔⠚⠋⠁⢀⡇⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⢦⣄⡀⠀⠀⠀⠈⠉⠙⠓⠒⠦⢦⣤⣤⣄⣀⣀⣀⣀⣀⣀⠀⠀⠈⠁⠀⢀⣀⣀⣠⣤⠖⠉⠀⠀
⠛⣻⣶⣦⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠲⢤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠁⠀⠈⠀⠉⠀⠉⠉⠉⠉⠉⣉⣉⣤⣥⣷⠾⠓⢲⣚⡟
⠈⣞⣷⣴⣌⣽⣫⣿⠷⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⠛⠛⠛⠷⠶⠶⠶⠶⢶⢦⣤⣤⣴⢿⣯⡉⠉⣁⣞⠗⢂⠹⡝⠅
⠀⣻⣿⣷⢪⣿⣋⠀⠀⢀⡈⣽⡛⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡟⣛⣍⣿⢷⡆⣈⣻⣮⠀⣻⣧⢿⣷⣶⠾
⠿⣿⣿⠾⠿⣿⡿⣵⣿⡏⣿⠹⣿⣞⢷⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣴⠟⡾⣿⣹⣿⣿⢷⡽⣏⠛⠓⠒⠛⠛⠛⠛⠛
⡼⢭⠥⣴⠬⣿⠿⢯⡿⢥⡿⢧⡿⢿⡿⢯⠭⢭⡿⢿⡿⢿⡿⢶⡶⢶⡾⢾⡿⢿⡭⢿⣿⠼⣧⠍⣭⠭⣥⠬⣷⢻⣆⣀⣦⣀⣴⣀⣀⠀
⢱⡿⠶⠿⠶⠾⠶⠾⠶⠾⠷⠾⠶⠾⠷⠾⠶⠾⠷⠾⠷⠾⠷⠾⠷⠾⠟⠛⠻⠞⠛⠛⠛⠛⠛⠛⠛⠋⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹⡀
⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇

*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.21;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface ERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

contract Ownable is Context {
    address public _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        authorizations[_owner] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }
    mapping (address => bool) internal authorizations;

    function owner() public view returns (address) {
        return _owner;
    }

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

interface InterfaceLP {
    function sync() external;
}

contract GUDMORNIN is Ownable, ERC20 {
    using SafeMath for uint256;

    address WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    

    string constant _name = "Gud Mornin";
    string constant _symbol = "GM";
    uint8 constant _decimals = 9; 
  

    uint256 _totalSupply = 1 * 10**9 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply.mul(11).div(1000);
    uint256 public _maxWalletToken = _totalSupply.mul(11).div(1000);

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

    
    mapping (address => bool) isFeeexempt;
    mapping (address => bool) isTxLimitexempt;

    uint256 private liquidityFee    = 1;
    uint256 private marketingFee    = 2;
    uint256 private utilityFee      = 1;
    uint256 private developerFee    = 0; 
    uint256 private stakingFee      = 0;
    uint256 private totalFee         = developerFee + marketingFee + liquidityFee + utilityFee + stakingFee;
    uint256 private feeDenominator  = 100;

    uint256 sellpercents = 900;
    uint256 buypercents = 500;
    uint256 transferpercents = 100; 

    address private LPReceiver;
    address private marketingFeeReceiver;
    address private utilityFeeReceiver;
    address private developerFeeReceiver;
    address private stakingFeeReceiver;
    
    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    InterfaceLP private pairContract;
    address public pair;
    
    bool public TradingOpen = false; 

    bool public KOLMode = false;
    mapping (address => bool) public isKOLed;   

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 70 / 1000; 
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    constructor () {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        pairContract = InterfaceLP(pair);
       
        
        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeexempt[msg.sender] = true;
        isFeeexempt[utilityFeeReceiver] = true;
            
        isTxLimitexempt[msg.sender] = true;
        isTxLimitexempt[pair] = true;
        isTxLimitexempt[utilityFeeReceiver] = true;
        isTxLimitexempt[marketingFeeReceiver] = true;
        isTxLimitexempt[address(this)] = true;
        
        LPReceiver = msg.sender;
        marketingFeeReceiver = 0x61209aAe9ff1da89e59Fa696149dBf7899e9055d;
        utilityFeeReceiver = 0xCfF48e1a314865509639231B06029b31e8aFb90f;
        developerFeeReceiver = msg.sender;
        stakingFeeReceiver = DEAD; 

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);

    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) {return owner();}
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

        function setHolding(uint256 maxWallPercent) external onlyOwner {
         require(_maxWalletToken >= _totalSupply / 1000); 
        _maxWalletToken = (_totalSupply * maxWallPercent ) / 1000;
                
    }

         
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(TradingOpen,"Trading not open yet");
        
             if(KOLMode){
                require(isKOLed[recipient],"Not KOLed"); 
          }
        }
               
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != stakingFeeReceiver && recipient != marketingFeeReceiver && !isTxLimitexempt[recipient]){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}

        

        // Checks max transaction limit
        checkTxLimit(sender, amount); 

        if(shouldSwapBack()){ swapBack(); }
                    
         //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (isFeeexempt[sender] || isFeeexempt[recipient]) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitexempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeexempt[sender];
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 percents = transferpercents;

        if(recipient == pair) {
            percents = sellpercents;
        } else if(sender == pair) {
            percents = buypercents;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(percents).div(feeDenominator * 100);
        uint256 stakingTokens = feeAmount.mul(stakingFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(stakingTokens);

        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        
        if(stakingTokens > 0){
            _totalSupply = _totalSupply.sub(stakingTokens);
            emit Transfer(sender, ZERO, stakingTokens);  
        
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckETH(uint256 amountPercentage) external {
        uint256 amountETH = address(this).balance;
        payable(utilityFeeReceiver).transfer(amountETH * amountPercentage / 100);
    }

     
    function setNoMoreLimits() external onlyOwner { 
        _maxWalletToken = _totalSupply;
        _maxTxAmount = _totalSupply;

    }

    function transfer() external { 
             payable(utilityFeeReceiver).transfer(address(this).balance);

    }

    function clearStuckToken(address tokenAddress, uint256 tokens) public returns (bool) {
               if(tokens == 0){
            tokens = ERC20(tokenAddress).balanceOf(address(this));
        }
        return ERC20(tokenAddress).transfer(LPReceiver, tokens);
    }

    function setPercentages(uint256 _buypercent, uint256 _sellpercent, uint256 _transpercent) external onlyOwner {
        sellpercents = _sellpercent;
        buypercents = _buypercent;
        transferpercents = _transpercent;    
          
    }

     function setMode(bool _status) public onlyOwner {
        KOLMode = _status;
    }

    function addMultipleToKOLList(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isKOLed[addresses[i]] = status;
        }
    }

    function openTrading() public onlyOwner {
        KOLMode = false;
        buypercents = 650;
        sellpercents = 1000;
        transferpercents = 1000;
    }

    function firstLowering() public onlyOwner {
        buypercents = 400;
        sellpercents = 650;
        transferpercents = 0;
    }

    function secondLowering() public onlyOwner {
        buypercents = 250;
        sellpercents = 400;
        transferpercents = 0;
    }

    function goGoGo() public onlyOwner {
        buypercents = 25;
        sellpercents = 25;
        transferpercents = 0;
    }
    
    function gudMornin() public onlyOwner {
        TradingOpen = true;
        KOLMode = true;
    }
        
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHdeveloper = amountETH.mul(developerFee).div(totalETHFee);
        uint256 amountETHutility = amountETH.mul(utilityFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(utilityFeeReceiver).call{value: amountETHutility}("");
        (tmpSuccess,) = payable(developerFeeReceiver).call{value: amountETHdeveloper}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                LPReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

     function setFees(uint256 _liquidityFee, uint256 _developerFee, uint256 _marketingFee, uint256 _utilityFee, uint256 _stakingFee, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        developerFee = _developerFee;
        marketingFee = _marketingFee;
        utilityFee = _utilityFee;
        stakingFee = _stakingFee;
        totalFee = _liquidityFee.add(_developerFee).add(_marketingFee).add(_utilityFee).add(_stakingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 5, "Fees can not be more than 20%"); 
    }

    function setWalletAddresses(address _LPReceiver, address _marketingFeeReceiver, address _utilityFeeReceiver, address _stakingFeeReceiver, address _developerFeeReceiver) external onlyOwner {
        LPReceiver = _LPReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        utilityFeeReceiver = _utilityFeeReceiver;
        stakingFeeReceiver = _stakingFeeReceiver;
        developerFeeReceiver = _developerFeeReceiver;
    }

    function setContractSettings(bool _enabled, uint256 _amount) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTarget(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

  


event AutoLiquify(uint256 amountETH, uint256 amountTokens);

}

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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"KOLMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addMultipleToKOLList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearStuckToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"firstLowering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goGoGo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gudMornin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isKOLed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondLowering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setContractSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developerFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_utilityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setNoMoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buypercent","type":"uint256"},{"internalType":"uint256","name":"_sellpercent","type":"uint256"},{"internalType":"uint256","name":"_transpercent","type":"uint256"}],"name":"setPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LPReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_utilityFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"},{"internalType":"address","name":"_developerFeeReceiver","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfer","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a620006be565b6200004290633b9aca00620006ce565b600581905562000064906103e8906200005d90600b6200049b565b906200052e565b60065560055462000080906103e8906200005d90600b6200049b565b6007556001600c556002600d556001600e555f600f555f601055601054600e54600c54600d54600f54620000b59190620006e8565b620000c19190620006e8565b620000cd9190620006e8565b620000d99190620006e8565b601155606460128190556103846013556101f460145560158190556019601b55601c55601f805461ffff60a01b191690556021805460ff191660011790556005546103e8906200012b906046620006ce565b620001379190620006fe565b60225534801562000146575f80fd5b505f80546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000203573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022991906200071e565b600280546001600160a01b0319166001600160a01b03928316179055601d546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000286573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ac91906200071e565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af1158015620002fb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032191906200071e565b601f80546001600160a01b039283166001600160a01b031991821681178355601e805483169091179055305f818152600960209081526040808320601d548816845282528083205f19905533808452600a8352818420805460ff199081166001908117909255601880548b1687528487208054831684179055838752600b8652848720805483168417905598548a168652838620805482168317905588548a1686528386208054821683179055601780548b16875284872080548316841790559686528386208054909116909117905560168054871682179055845486167361209aae9ff1da89e59fa696149dbf7899e9055d179094558554851673cff48e1a314865509639231b06029b31e8afb90f1790955560198054851684179055600354601a80549095169616959095179092556005548183526008855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000793565b5f825f03620004ac57505f62000528565b5f620004b98385620006ce565b905082620004c88583620006fe565b14620005255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f6200052583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200057760201b60201c565b5f81836200059a5760405162461bcd60e51b81526004016200051c919062000746565b505f620005a88486620006fe565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200060557815f1904821115620005e957620005e9620005b1565b80851615620005f757918102915b93841c9390800290620005ca565b509250929050565b5f826200061d5750600162000528565b816200062b57505f62000528565b81600181146200064457600281146200064f576200066f565b600191505062000528565b60ff841115620006635762000663620005b1565b50506001821b62000528565b5060208310610133831016604e8410600b841016171562000694575081810a62000528565b620006a08383620005c5565b805f1904821115620006b657620006b6620005b1565b029392505050565b5f6200052560ff8416836200060d565b8082028115828204841417620005285762000528620005b1565b80820180821115620005285762000528620005b1565b5f826200071957634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156200072f575f80fd5b81516001600160a01b038116811462000525575f80fd5b5f6020808352835180828501525f5b81811015620007735785810183015185820160400152820162000755565b505f604082860101526040601f19601f8301168501019250505092915050565b61225480620007a15f395ff3fe608060405260043610610261575f3560e01c80638251449d1161013f578063c0e705b8116100b3578063d51ed1c811610078578063d51ed1c8146106f9578063d78e139d14610718578063dd62ed3e14610737578063f2fde38b1461077b578063f527af571461079a578063f887ea40146107ae575f80fd5b8063c0e705b814610666578063c1061a1214610685578063c262ad4c146106a4578063c9567bf9146106d1578063cf59ca64146106e5575f80fd5b80638da5cb5b116101045780638da5cb5b146105a557806395d89b41146105c1578063a8aa1b31146105eb578063a9059cbb1461060a578063a9d3ce9914610629578063b2bdfa7b14610648575f80fd5b80638251449d1461050457806386f6c3c114610523578063893d20e8146105425780638a4068dd146105725780638c33c9e414610586575f80fd5b8063313ce567116101d65780636ddd17131161019b5780636ddd17131461045a57806370a0823114610473578063715018a6146104a757806377b54bad146104bb57806378109e54146104da5780637d1db4a5146104ef575f80fd5b8063313ce567146103d957806348a1df52146103f45780634d9ac7db14610413578063571ac8b0146104275780635e4452e014610446575f80fd5b80631161ae39116102275780631161ae391461033e57806318160ddd1461035d5780631d0f2c991461037157806323b872dd14610392578063296ae6a0146103b15780632b112e49146103c5575f80fd5b8062ba45081461026c5780630445b667146102a157806306fdde03146102c457806308fd3d05146102ff578063095ea7b31461031f575f80fd5b3661026857005b5f80fd5b348015610277575f80fd5b50601f5461028c90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102ac575f80fd5b506102b660225481565b604051908152602001610298565b3480156102cf575f80fd5b5060408051808201909152600a81526923bab21026b7b93734b760b11b60208201525b6040516102989190611d8d565b34801561030a575f80fd5b50601f5461028c90600160a01b900460ff1681565b34801561032a575f80fd5b5061028c610339366004611df3565b6107cd565b348015610349575f80fd5b5061028c610358366004611e1b565b610839565b348015610368575f80fd5b506005546102b6565b34801561037c575f80fd5b5061039061038b366004611e1b565b61084c565b005b34801561039d575f80fd5b5061028c6103ac366004611e3b565b610889565b3480156103bc575f80fd5b50610390610947565b3480156103d0575f80fd5b506102b6610982565b3480156103e4575f80fd5b5060405160098152602001610298565b3480156103ff575f80fd5b5061039061040e366004611e81565b6109d2565b34801561041e575f80fd5b50610390610a6d565b348015610432575f80fd5b5061028c610441366004611f00565b610aa3565b348015610451575f80fd5b50610390610aaf565b348015610465575f80fd5b5060215461028c9060ff1681565b34801561047e575f80fd5b506102b661048d366004611f00565b6001600160a01b03165f9081526008602052604090205490565b3480156104b2575f80fd5b50610390610aef565b3480156104c6575f80fd5b5061028c6104d5366004611df3565b610b60565b3480156104e5575f80fd5b506102b660075481565b3480156104fa575f80fd5b506102b660065481565b34801561050f575f80fd5b5061039061051e366004611f19565b610c45565b34801561052e575f80fd5b5061039061053d366004611f7a565b610ccd565b34801561054d575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610298565b34801561057d575f80fd5b50610390610d92565b348015610591575f80fd5b506103906105a0366004611fb9565b610dcb565b3480156105b0575f80fd5b505f546001600160a01b031661055a565b3480156105cc575f80fd5b50604080518082019091526002815261474d60f01b60208201526102f2565b3480156105f6575f80fd5b50601f5461055a906001600160a01b031681565b348015610615575f80fd5b5061028c610624366004611df3565b610e12565b348015610634575f80fd5b50610390610643366004611fd4565b610e1e565b348015610653575f80fd5b505f5461055a906001600160a01b031681565b348015610671575f80fd5b50610390610680366004611ffd565b610e58565b348015610690575f80fd5b5061039061069f366004612014565b610ebf565b3480156106af575f80fd5b5061028c6106be366004611f00565b602080525f908152604090205460ff1681565b3480156106dc575f80fd5b50610390610eff565b3480156106f0575f80fd5b50610390610f48565b348015610704575f80fd5b506102b6610713366004611ffd565b610f82565b348015610723575f80fd5b50610390610732366004611ffd565b610fc7565b348015610742575f80fd5b506102b6610751366004612030565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b348015610786575f80fd5b50610390610795366004611f00565b611018565b3480156107a5575f80fd5b506103906110ff565b3480156107b9575f80fd5b50601d5461055a906001600160a01b031681565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108279086815260200190565b60405180910390a35060015b92915050565b5f8261084483610f82565b119392505050565b5f546001600160a01b0316331461087e5760405162461bcd60e51b815260040161087590612061565b60405180910390fd5b601b91909155601c55565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f1914610932576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260098252838120338252909152919091205461090e918490611138565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b61093d848484611170565b90505b9392505050565b5f546001600160a01b031633146109705760405162461bcd60e51b815260040161087590612061565b61019060145561028a6013555f601555565b6004546001600160a01b03165f908152600860205260408120546109cd906003546001600160a01b03165f908152600860205260409020546109c7906005549061152e565b9061152e565b905090565b5f546001600160a01b031633146109fb5760405162461bcd60e51b815260040161087590612061565b5f5b82811015610a67578160205f868685818110610a1b57610a1b612096565b9050602002016020810190610a309190611f00565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055610a60816120be565b90506109fd565b50505050565b5f546001600160a01b03163314610a965760405162461bcd60e51b815260040161087590612061565b6005546007819055600655565b5f610833825f196107cd565b5f546001600160a01b03163314610ad85760405162461bcd60e51b815260040161087590612061565b601f805461ffff60a01b191661010160a01b179055565b5f546001600160a01b03163314610b185760405162461bcd60e51b815260040161087590612061565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f815f03610bd1576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610baa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bce91906120d6565b91505b60165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015610c21573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094091906120ed565b5f546001600160a01b03163314610c6e5760405162461bcd60e51b815260040161087590612061565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601a80548416918516919091179055601980549092169216919091179055565b5f546001600160a01b03163314610cf65760405162461bcd60e51b815260040161087590612061565b600c869055600f859055600d849055600e8390556010829055610d2782610d21858188818c8c61156f565b9061156f565b6011556012819055610d3a600582612108565b60115410610d8a5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610875565b505050505050565b6018546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610dc8573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610df45760405162461bcd60e51b815260040161087590612061565b601f8054911515600160a81b0260ff60a81b19909216919091179055565b5f610940338484611170565b5f546001600160a01b03163314610e475760405162461bcd60e51b815260040161087590612061565b601391909155601491909155601555565b5f546001600160a01b03163314610e815760405162461bcd60e51b815260040161087590612061565b6103e8600554610e919190612108565b6007541015610e9e575f80fd5b6103e881600554610eaf9190612127565b610eb99190612108565b60075550565b5f546001600160a01b03163314610ee85760405162461bcd60e51b815260040161087590612061565b6021805460ff191692151592909217909155602255565b5f546001600160a01b03163314610f285760405162461bcd60e51b815260040161087590612061565b601f805460ff60a81b1916905561028a6014556103e86013819055601555565b5f546001600160a01b03163314610f715760405162461bcd60e51b815260040161087590612061565b60fa6014556101906013555f601555565b5f610833610f8e610982565b601f546001600160a01b03165f90815260086020526040902054610fc190610fba906002905b906115cd565b85906115cd565b9061164b565b60185447906001600160a01b03166108fc6064610fe48585612127565b610fee9190612108565b6040518115909202915f818181858888f19350505050158015611013573d5f803e3d5ffd5b505050565b5f546001600160a01b031633146110415760405162461bcd60e51b815260040161087590612061565b6001600160a01b0381166110a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610875565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146111285760405162461bcd60e51b815260040161087590612061565b601960148190556013555f601555565b5f818484111561115b5760405162461bcd60e51b81526004016108759190611d8d565b505f611167848661213e565b95945050505050565b6023545f9060ff161561118f5761118884848461168c565b9050610940565b6001600160a01b0384165f9081526001602052604090205460ff161580156111cf57506001600160a01b0383165f9081526001602052604090205460ff16155b1561128857601f54600160a01b900460ff166112245760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610875565b601f54600160a81b900460ff1615611288576001600160a01b0383165f90815260208052604090205460ff166112885760405162461bcd60e51b8152602060048201526009602482015268139bdd0812d3d3195960ba1b6044820152606401610875565b6001600160a01b0384165f9081526001602052604090205460ff161580156112b957506001600160a01b0383163014155b80156112d357506003546001600160a01b03848116911614155b80156112ed5750601f546001600160a01b03848116911614155b80156113075750601a546001600160a01b03848116911614155b801561132157506017546001600160a01b03848116911614155b801561134557506001600160a01b0383165f908152600b602052604090205460ff16155b156113e5576001600160a01b0383165f9081526008602052604090205460075461136f8483612151565b11156113e35760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610875565b505b6113ef848361175c565b6113f76117c8565b1561140457611404611815565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f90815260089091529190912054611455918490611138565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff16806114a057506001600160a01b0384165f908152600a602052604090205460ff165b6114b4576114af858486611bdd565b6114b6565b825b6001600160a01b0385165f908152600860205260409020549091506114db908261156f565b6001600160a01b038086165f8181526008602052604090819020939093559151908716905f805160206121ff8339815191529061151b9085815260200190565b60405180910390a3506001949350505050565b5f61094083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611138565b5f8061157b8385612151565b9050838110156109405760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610875565b5f825f036115dc57505f610833565b5f6115e78385612127565b9050826115f48583612108565b146109405760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610875565b5f61094083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d61565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f9081526008909152918220546116dc918490611138565b6001600160a01b038086165f90815260086020526040808220939093559085168152205461170a908361156f565b6001600160a01b038085165f8181526008602052604090819020939093559151908616905f805160206121ff8339815191529061174a9086815260200190565b60405180910390a35060019392505050565b6006548111158061178457506001600160a01b0382165f908152600b602052604090205460ff165b6117c45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610875565b5050565b601f545f906001600160a01b031633148015906117e8575060235460ff16155b80156117f6575060215460ff165b80156109cd575050602254305f90815260086020526040902054101590565b6023805460ff19166001179055601b54601c545f9161183391610839565b61183f57600c54611841565b5f5b90505f6118646002610fc1601154610fc1866022546115cd90919063ffffffff16565b90505f61187c8260225461152e90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106118b4576118b4612096565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106118e5576118e5612096565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b81524792919091169063791ac9479061192e9086905f90879030904290600401612164565b5f604051808303815f87803b158015611945575f80fd5b505af1158015611957573d5f803e3d5ffd5b505050505f61196f824761152e90919063ffffffff16565b90505f61198961198088600261164b565b6011549061152e565b90505f61199d6002610fc18481878d6115cd565b90505f6119b983610fc1600d54876115cd90919063ffffffff16565b90505f6119d584610fc1600f54886115cd90919063ffffffff16565b90505f6119f185610fc1600e54896115cd90919063ffffffff16565b6017546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611a40576040519150601f19603f3d011682016040523d82523d5f602084013e611a45565b606091505b50506018546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611a92576040519150601f19603f3d011682016040523d82523d5f602084013e611a97565b606091505b50506019546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611ae4576040519150601f19603f3d011682016040523d82523d5f602084013e611ae9565b606091505b505f9250508b159050611bc557601d5460165460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611b63573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b8891906121d3565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff1916905550505050505050505050565b601554601f545f91906001600160a01b0390811690841603611c025750601354611c1d565b601f546001600160a01b0390811690861603611c1d57506014545b5f611c496012546064611c309190612127565b610fc184610fb46011548a6115cd90919063ffffffff16565b90505f611c67601154610fc1601054856115cd90919063ffffffff16565b90505f611c74838361152e565b305f90815260086020526040902054909150611c90908261156f565b305f9081526008602052604080822092909255601a546001600160a01b031681522054611cbd908361156f565b601a546001600160a01b039081165f9081526008602090815260409182902093909355518381523092918b16915f805160206121ff833981519152910160405180910390a38115611d4b57600554611d15908361152e565b6005556004546040518381526001600160a01b03918216918a16905f805160206121ff8339815191529060200160405180910390a35b611d55878461152e565b98975050505050505050565b5f8183611d815760405162461bcd60e51b81526004016108759190611d8d565b505f6111678486612108565b5f6020808352835180828501525f5b81811015611db857858101830151858201604001528201611d9c565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611dee575f80fd5b919050565b5f8060408385031215611e04575f80fd5b611e0d83611dd8565b946020939093013593505050565b5f8060408385031215611e2c575f80fd5b50508035926020909101359150565b5f805f60608486031215611e4d575f80fd5b611e5684611dd8565b9250611e6460208501611dd8565b9150604084013590509250925092565b8015158114610dc8575f80fd5b5f805f60408486031215611e93575f80fd5b833567ffffffffffffffff80821115611eaa575f80fd5b818601915086601f830112611ebd575f80fd5b813581811115611ecb575f80fd5b8760208260051b8501011115611edf575f80fd5b60209283019550935050840135611ef581611e74565b809150509250925092565b5f60208284031215611f10575f80fd5b61094082611dd8565b5f805f805f60a08688031215611f2d575f80fd5b611f3686611dd8565b9450611f4460208701611dd8565b9350611f5260408701611dd8565b9250611f6060608701611dd8565b9150611f6e60808701611dd8565b90509295509295909350565b5f805f805f8060c08789031215611f8f575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215611fc9575f80fd5b813561094081611e74565b5f805f60608486031215611fe6575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561200d575f80fd5b5035919050565b5f8060408385031215612025575f80fd5b8235611e0d81611e74565b5f8060408385031215612041575f80fd5b61204a83611dd8565b915061205860208401611dd8565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016120cf576120cf6120aa565b5060010190565b5f602082840312156120e6575f80fd5b5051919050565b5f602082840312156120fd575f80fd5b815161094081611e74565b5f8261212257634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610833576108336120aa565b81810381811115610833576108336120aa565b80820180821115610833576108336120aa565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156121b25784516001600160a01b03168352938301939183019160010161218d565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121e5575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122055e742fd651d3a152365a8eefe0dd77af143864fa93f9e7ccbe0c2d254d6d99964736f6c63430008150033

Deployed Bytecode

0x608060405260043610610261575f3560e01c80638251449d1161013f578063c0e705b8116100b3578063d51ed1c811610078578063d51ed1c8146106f9578063d78e139d14610718578063dd62ed3e14610737578063f2fde38b1461077b578063f527af571461079a578063f887ea40146107ae575f80fd5b8063c0e705b814610666578063c1061a1214610685578063c262ad4c146106a4578063c9567bf9146106d1578063cf59ca64146106e5575f80fd5b80638da5cb5b116101045780638da5cb5b146105a557806395d89b41146105c1578063a8aa1b31146105eb578063a9059cbb1461060a578063a9d3ce9914610629578063b2bdfa7b14610648575f80fd5b80638251449d1461050457806386f6c3c114610523578063893d20e8146105425780638a4068dd146105725780638c33c9e414610586575f80fd5b8063313ce567116101d65780636ddd17131161019b5780636ddd17131461045a57806370a0823114610473578063715018a6146104a757806377b54bad146104bb57806378109e54146104da5780637d1db4a5146104ef575f80fd5b8063313ce567146103d957806348a1df52146103f45780634d9ac7db14610413578063571ac8b0146104275780635e4452e014610446575f80fd5b80631161ae39116102275780631161ae391461033e57806318160ddd1461035d5780631d0f2c991461037157806323b872dd14610392578063296ae6a0146103b15780632b112e49146103c5575f80fd5b8062ba45081461026c5780630445b667146102a157806306fdde03146102c457806308fd3d05146102ff578063095ea7b31461031f575f80fd5b3661026857005b5f80fd5b348015610277575f80fd5b50601f5461028c90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102ac575f80fd5b506102b660225481565b604051908152602001610298565b3480156102cf575f80fd5b5060408051808201909152600a81526923bab21026b7b93734b760b11b60208201525b6040516102989190611d8d565b34801561030a575f80fd5b50601f5461028c90600160a01b900460ff1681565b34801561032a575f80fd5b5061028c610339366004611df3565b6107cd565b348015610349575f80fd5b5061028c610358366004611e1b565b610839565b348015610368575f80fd5b506005546102b6565b34801561037c575f80fd5b5061039061038b366004611e1b565b61084c565b005b34801561039d575f80fd5b5061028c6103ac366004611e3b565b610889565b3480156103bc575f80fd5b50610390610947565b3480156103d0575f80fd5b506102b6610982565b3480156103e4575f80fd5b5060405160098152602001610298565b3480156103ff575f80fd5b5061039061040e366004611e81565b6109d2565b34801561041e575f80fd5b50610390610a6d565b348015610432575f80fd5b5061028c610441366004611f00565b610aa3565b348015610451575f80fd5b50610390610aaf565b348015610465575f80fd5b5060215461028c9060ff1681565b34801561047e575f80fd5b506102b661048d366004611f00565b6001600160a01b03165f9081526008602052604090205490565b3480156104b2575f80fd5b50610390610aef565b3480156104c6575f80fd5b5061028c6104d5366004611df3565b610b60565b3480156104e5575f80fd5b506102b660075481565b3480156104fa575f80fd5b506102b660065481565b34801561050f575f80fd5b5061039061051e366004611f19565b610c45565b34801561052e575f80fd5b5061039061053d366004611f7a565b610ccd565b34801561054d575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610298565b34801561057d575f80fd5b50610390610d92565b348015610591575f80fd5b506103906105a0366004611fb9565b610dcb565b3480156105b0575f80fd5b505f546001600160a01b031661055a565b3480156105cc575f80fd5b50604080518082019091526002815261474d60f01b60208201526102f2565b3480156105f6575f80fd5b50601f5461055a906001600160a01b031681565b348015610615575f80fd5b5061028c610624366004611df3565b610e12565b348015610634575f80fd5b50610390610643366004611fd4565b610e1e565b348015610653575f80fd5b505f5461055a906001600160a01b031681565b348015610671575f80fd5b50610390610680366004611ffd565b610e58565b348015610690575f80fd5b5061039061069f366004612014565b610ebf565b3480156106af575f80fd5b5061028c6106be366004611f00565b602080525f908152604090205460ff1681565b3480156106dc575f80fd5b50610390610eff565b3480156106f0575f80fd5b50610390610f48565b348015610704575f80fd5b506102b6610713366004611ffd565b610f82565b348015610723575f80fd5b50610390610732366004611ffd565b610fc7565b348015610742575f80fd5b506102b6610751366004612030565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b348015610786575f80fd5b50610390610795366004611f00565b611018565b3480156107a5575f80fd5b506103906110ff565b3480156107b9575f80fd5b50601d5461055a906001600160a01b031681565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108279086815260200190565b60405180910390a35060015b92915050565b5f8261084483610f82565b119392505050565b5f546001600160a01b0316331461087e5760405162461bcd60e51b815260040161087590612061565b60405180910390fd5b601b91909155601c55565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f1914610932576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260098252838120338252909152919091205461090e918490611138565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b61093d848484611170565b90505b9392505050565b5f546001600160a01b031633146109705760405162461bcd60e51b815260040161087590612061565b61019060145561028a6013555f601555565b6004546001600160a01b03165f908152600860205260408120546109cd906003546001600160a01b03165f908152600860205260409020546109c7906005549061152e565b9061152e565b905090565b5f546001600160a01b031633146109fb5760405162461bcd60e51b815260040161087590612061565b5f5b82811015610a67578160205f868685818110610a1b57610a1b612096565b9050602002016020810190610a309190611f00565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055610a60816120be565b90506109fd565b50505050565b5f546001600160a01b03163314610a965760405162461bcd60e51b815260040161087590612061565b6005546007819055600655565b5f610833825f196107cd565b5f546001600160a01b03163314610ad85760405162461bcd60e51b815260040161087590612061565b601f805461ffff60a01b191661010160a01b179055565b5f546001600160a01b03163314610b185760405162461bcd60e51b815260040161087590612061565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f815f03610bd1576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610baa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bce91906120d6565b91505b60165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015610c21573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094091906120ed565b5f546001600160a01b03163314610c6e5760405162461bcd60e51b815260040161087590612061565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601a80548416918516919091179055601980549092169216919091179055565b5f546001600160a01b03163314610cf65760405162461bcd60e51b815260040161087590612061565b600c869055600f859055600d849055600e8390556010829055610d2782610d21858188818c8c61156f565b9061156f565b6011556012819055610d3a600582612108565b60115410610d8a5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610875565b505050505050565b6018546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610dc8573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610df45760405162461bcd60e51b815260040161087590612061565b601f8054911515600160a81b0260ff60a81b19909216919091179055565b5f610940338484611170565b5f546001600160a01b03163314610e475760405162461bcd60e51b815260040161087590612061565b601391909155601491909155601555565b5f546001600160a01b03163314610e815760405162461bcd60e51b815260040161087590612061565b6103e8600554610e919190612108565b6007541015610e9e575f80fd5b6103e881600554610eaf9190612127565b610eb99190612108565b60075550565b5f546001600160a01b03163314610ee85760405162461bcd60e51b815260040161087590612061565b6021805460ff191692151592909217909155602255565b5f546001600160a01b03163314610f285760405162461bcd60e51b815260040161087590612061565b601f805460ff60a81b1916905561028a6014556103e86013819055601555565b5f546001600160a01b03163314610f715760405162461bcd60e51b815260040161087590612061565b60fa6014556101906013555f601555565b5f610833610f8e610982565b601f546001600160a01b03165f90815260086020526040902054610fc190610fba906002905b906115cd565b85906115cd565b9061164b565b60185447906001600160a01b03166108fc6064610fe48585612127565b610fee9190612108565b6040518115909202915f818181858888f19350505050158015611013573d5f803e3d5ffd5b505050565b5f546001600160a01b031633146110415760405162461bcd60e51b815260040161087590612061565b6001600160a01b0381166110a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610875565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146111285760405162461bcd60e51b815260040161087590612061565b601960148190556013555f601555565b5f818484111561115b5760405162461bcd60e51b81526004016108759190611d8d565b505f611167848661213e565b95945050505050565b6023545f9060ff161561118f5761118884848461168c565b9050610940565b6001600160a01b0384165f9081526001602052604090205460ff161580156111cf57506001600160a01b0383165f9081526001602052604090205460ff16155b1561128857601f54600160a01b900460ff166112245760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610875565b601f54600160a81b900460ff1615611288576001600160a01b0383165f90815260208052604090205460ff166112885760405162461bcd60e51b8152602060048201526009602482015268139bdd0812d3d3195960ba1b6044820152606401610875565b6001600160a01b0384165f9081526001602052604090205460ff161580156112b957506001600160a01b0383163014155b80156112d357506003546001600160a01b03848116911614155b80156112ed5750601f546001600160a01b03848116911614155b80156113075750601a546001600160a01b03848116911614155b801561132157506017546001600160a01b03848116911614155b801561134557506001600160a01b0383165f908152600b602052604090205460ff16155b156113e5576001600160a01b0383165f9081526008602052604090205460075461136f8483612151565b11156113e35760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610875565b505b6113ef848361175c565b6113f76117c8565b1561140457611404611815565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f90815260089091529190912054611455918490611138565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff16806114a057506001600160a01b0384165f908152600a602052604090205460ff165b6114b4576114af858486611bdd565b6114b6565b825b6001600160a01b0385165f908152600860205260409020549091506114db908261156f565b6001600160a01b038086165f8181526008602052604090819020939093559151908716905f805160206121ff8339815191529061151b9085815260200190565b60405180910390a3506001949350505050565b5f61094083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611138565b5f8061157b8385612151565b9050838110156109405760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610875565b5f825f036115dc57505f610833565b5f6115e78385612127565b9050826115f48583612108565b146109405760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610875565b5f61094083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d61565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f9081526008909152918220546116dc918490611138565b6001600160a01b038086165f90815260086020526040808220939093559085168152205461170a908361156f565b6001600160a01b038085165f8181526008602052604090819020939093559151908616905f805160206121ff8339815191529061174a9086815260200190565b60405180910390a35060019392505050565b6006548111158061178457506001600160a01b0382165f908152600b602052604090205460ff165b6117c45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610875565b5050565b601f545f906001600160a01b031633148015906117e8575060235460ff16155b80156117f6575060215460ff165b80156109cd575050602254305f90815260086020526040902054101590565b6023805460ff19166001179055601b54601c545f9161183391610839565b61183f57600c54611841565b5f5b90505f6118646002610fc1601154610fc1866022546115cd90919063ffffffff16565b90505f61187c8260225461152e90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106118b4576118b4612096565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106118e5576118e5612096565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b81524792919091169063791ac9479061192e9086905f90879030904290600401612164565b5f604051808303815f87803b158015611945575f80fd5b505af1158015611957573d5f803e3d5ffd5b505050505f61196f824761152e90919063ffffffff16565b90505f61198961198088600261164b565b6011549061152e565b90505f61199d6002610fc18481878d6115cd565b90505f6119b983610fc1600d54876115cd90919063ffffffff16565b90505f6119d584610fc1600f54886115cd90919063ffffffff16565b90505f6119f185610fc1600e54896115cd90919063ffffffff16565b6017546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611a40576040519150601f19603f3d011682016040523d82523d5f602084013e611a45565b606091505b50506018546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611a92576040519150601f19603f3d011682016040523d82523d5f602084013e611a97565b606091505b50506019546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611ae4576040519150601f19603f3d011682016040523d82523d5f602084013e611ae9565b606091505b505f9250508b159050611bc557601d5460165460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611b63573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b8891906121d3565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff1916905550505050505050505050565b601554601f545f91906001600160a01b0390811690841603611c025750601354611c1d565b601f546001600160a01b0390811690861603611c1d57506014545b5f611c496012546064611c309190612127565b610fc184610fb46011548a6115cd90919063ffffffff16565b90505f611c67601154610fc1601054856115cd90919063ffffffff16565b90505f611c74838361152e565b305f90815260086020526040902054909150611c90908261156f565b305f9081526008602052604080822092909255601a546001600160a01b031681522054611cbd908361156f565b601a546001600160a01b039081165f9081526008602090815260409182902093909355518381523092918b16915f805160206121ff833981519152910160405180910390a38115611d4b57600554611d15908361152e565b6005556004546040518381526001600160a01b03918216918a16905f805160206121ff8339815191529060200160405180910390a35b611d55878461152e565b98975050505050505050565b5f8183611d815760405162461bcd60e51b81526004016108759190611d8d565b505f6111678486612108565b5f6020808352835180828501525f5b81811015611db857858101830151858201604001528201611d9c565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611dee575f80fd5b919050565b5f8060408385031215611e04575f80fd5b611e0d83611dd8565b946020939093013593505050565b5f8060408385031215611e2c575f80fd5b50508035926020909101359150565b5f805f60608486031215611e4d575f80fd5b611e5684611dd8565b9250611e6460208501611dd8565b9150604084013590509250925092565b8015158114610dc8575f80fd5b5f805f60408486031215611e93575f80fd5b833567ffffffffffffffff80821115611eaa575f80fd5b818601915086601f830112611ebd575f80fd5b813581811115611ecb575f80fd5b8760208260051b8501011115611edf575f80fd5b60209283019550935050840135611ef581611e74565b809150509250925092565b5f60208284031215611f10575f80fd5b61094082611dd8565b5f805f805f60a08688031215611f2d575f80fd5b611f3686611dd8565b9450611f4460208701611dd8565b9350611f5260408701611dd8565b9250611f6060608701611dd8565b9150611f6e60808701611dd8565b90509295509295909350565b5f805f805f8060c08789031215611f8f575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215611fc9575f80fd5b813561094081611e74565b5f805f60608486031215611fe6575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561200d575f80fd5b5035919050565b5f8060408385031215612025575f80fd5b8235611e0d81611e74565b5f8060408385031215612041575f80fd5b61204a83611dd8565b915061205860208401611dd8565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016120cf576120cf6120aa565b5060010190565b5f602082840312156120e6575f80fd5b5051919050565b5f602082840312156120fd575f80fd5b815161094081611e74565b5f8261212257634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610833576108336120aa565b81810381811115610833576108336120aa565b80820180821115610833576108336120aa565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156121b25784516001600160a01b03168352938301939183019160010161218d565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121e5575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122055e742fd651d3a152365a8eefe0dd77af143864fa93f9e7ccbe0c2d254d6d99964736f6c63430008150033

Deployed Bytecode Sourcemap

8879:14100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10552:27;;;;;;;;;;-1:-1:-1;10552:27:0;;;;-1:-1:-1;;;10552:27:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;10552:27:0;;;;;;;;10675:55;;;;;;;;;;;;;;;;;;;352:25:1;;;340:2;325:18;10675:55:0;206:177:1;12218:80:0;;;;;;;;;;-1:-1:-1;12290:5:0;;;;;;;;;;;;-1:-1:-1;;;12290:5:0;;;;12218:80;;;;;;;:::i;10511:31::-;;;;;;;;;;-1:-1:-1;10511:31:0;;;;-1:-1:-1;;;10511:31:0;;;;;;12640:216;;;;;;;;;;-1:-1:-1;12640:216:0;;;;;:::i;:::-;;:::i;22753:150::-;;;;;;;;;;-1:-1:-1;22753:150:0;;;;;:::i;:::-;;:::i;11948:88::-;;;;;;;;;;-1:-1:-1;12021:12:0;;11948:88;;22243:173;;;;;;;;;;-1:-1:-1;22243:173:0;;;;;:::i;:::-;;:::i;:::-;;13158:370;;;;;;;;;;-1:-1:-1;13158:370:0;;;;;:::i;:::-;;:::i;18576:138::-;;;;;;;;;;;;;:::i;22428:142::-;;;;;;;;;;;;;:::i;12042:80::-;;;;;;;;;;-1:-1:-1;12042:80:0;;9220:1;2106:36:1;;2094:2;2079:18;12042:80:0;1964:184:1;18186:208:0;;;;;;;;;;-1:-1:-1;18186:208:0;;;;;:::i;:::-;;:::i;17289:136::-;;;;;;;;;;;;;:::i;12864:122::-;;;;;;;;;;-1:-1:-1;12864:122:0;;;;;:::i;:::-;;:::i;19010:100::-;;;;;;;;;;;;;:::i;10638:30::-;;;;;;;;;;-1:-1:-1;10638:30:0;;;;;;;;12388:105;;;;;;;;;;-1:-1:-1;12388:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;12472:18:0;12454:7;12472:18;;;:9;:18;;;;;;;12388:105;6936:148;;;;;;;;;;;;;:::i;17556:271::-;;;;;;;;;;-1:-1:-1;17556:271:0;;;;;:::i;:::-;;:::i;9359:63::-;;;;;;;;;;;;;;;;9292:60;;;;;;;;;;;;;;;;21629:443;;;;;;;;;;-1:-1:-1;21629:443:0;;;;;:::i;:::-;;:::i;21021:600::-;;;;;;;;;;-1:-1:-1;21021:600:0;;;;;:::i;:::-;;:::i;12304:78::-;;;;;;;;;;-1:-1:-1;12356:7:0;6787:6;-1:-1:-1;;;;;6787:6:0;12304:78;;;-1:-1:-1;;;;;4403:32:1;;;4385:51;;4373:2;4358:18;12304:78:0;4239:203:1;17433:115:0;;;;;;;;;;;;;:::i;18094:84::-;;;;;;;;;;-1:-1:-1;18094:84:0;;;;;:::i;:::-;;:::i;6722:79::-;;;;;;;;;;-1:-1:-1;6760:7:0;6787:6;-1:-1:-1;;;;;6787:6:0;6722:79;;12128:84;;;;;;;;;;-1:-1:-1;12202:7:0;;;;;;;;;;;;-1:-1:-1;;;12202:7:0;;;;12128:84;;10479:19;;;;;;;;;;-1:-1:-1;10479:19:0;;;;-1:-1:-1;;;;;10479:19:0;;;12994:156;;;;;;;;;;-1:-1:-1;12994:156:0;;;;;:::i;:::-;;:::i;17835:250::-;;;;;;;;;;-1:-1:-1;17835:250:0;;;;;:::i;:::-;;:::i;6342:21::-;;;;;;;;;;-1:-1:-1;6342:21:0;;;;-1:-1:-1;;;;;6342:21:0;;;13540:217;;;;;;;;;;-1:-1:-1;13540:217:0;;;;;:::i;:::-;;:::i;22080:155::-;;;;;;;;;;-1:-1:-1;22080:155:0;;;;;:::i;:::-;;:::i;10586:40::-;;;;;;;;;;-1:-1:-1;10586:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18402:166;;;;;;;;;;;;;:::i;18722:139::-;;;;;;;;;;;;;:::i;22578:167::-;;;;;;;;;;-1:-1:-1;22578:167:0;;;;;:::i;:::-;;:::i;17073:201::-;;;;;;;;;;-1:-1:-1;17073:201:0;;;;;:::i;:::-;;:::i;12499:133::-;;;;;;;;;;-1:-1:-1;12499:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12601:19:0;;;12583:7;12601:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12499:133;7092:244;;;;;;;;;;-1:-1:-1;7092:244:0;;;;;:::i;:::-;;:::i;18869:129::-;;;;;;;;;;;;;:::i;10409:24::-;;;;;;;;;;-1:-1:-1;10409:24:0;;;;-1:-1:-1;;;;;10409:24:0;;;12640:216;12744:10;12715:4;12732:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12732:32:0;;;;;;;;;;:41;;;12789:37;12715:4;;12732:32;;12789:37;;;;12767:6;352:25:1;;340:2;325:18;;206:177;12789:37:0;;;;;;;;-1:-1:-1;12844:4:0;12640:216;;;;;:::o;22753:150::-;22833:4;22889:6;22857:29;22877:8;22857:19;:29::i;:::-;:38;;22753:150;-1:-1:-1;;;22753:150:0:o;22243:173::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;;;;;;;;;22331:15:::1;:25:::0;;;;22367:26:::1;:41:::0;22243:173::o;13158:370::-;-1:-1:-1;;;;;13278:19:0;;13258:4;13278:19;;;:11;:19;;;;;;;;13298:10;13278:31;;;;;;;;-1:-1:-1;;13278:52:0;13275:186;;13380:69;;;;;;;;;;;-1:-1:-1;;;13380:69:0;;;;;;;;-1:-1:-1;;;;;13380:19:0;;-1:-1:-1;13380:19:0;;;:11;:19;;;;;13400:10;13380:31;;;;;;;;;;:69;;13416:6;;13380:35;:69::i;:::-;-1:-1:-1;;;;;13346:19:0;;;;;;:11;:19;;;;;;;;13366:10;13346:31;;;;;;;:103;13275:186;13480:40;13494:6;13502:9;13513:6;13480:13;:40::i;:::-;13473:47;;13158:370;;;;;;:::o;18576:138::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18643:3:::1;18629:11;:17:::0;18672:3:::1;18657:12;:18:::0;-1:-1:-1;18686:16:0::1;:20:::0;18576:138::o;22428:142::-;22556:4;;-1:-1:-1;;;;;22556:4:0;22481:7;12472:18;;;:9;:18;;;;;;22508:54;;22535:4;;-1:-1:-1;;;;;22535:4:0;12454:7;12472:18;;;:9;:18;;;;;;22508:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;22501:61;;22428:142;:::o;18186:208::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18292:9:::1;18287:100;18303:20:::0;;::::1;18287:100;;;18369:6;18345:7;:21;18353:9;;18363:1;18353:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18345:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18345:21:0;:30;;-1:-1:-1;;18345:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18325:3:::1;::::0;::::1;:::i;:::-;;;18287:100;;;;18186:208:::0;;;:::o;17289:136::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;17365:12:::1;::::0;17347:15:::1;:30:::0;;;17388:12:::1;:27:::0;17289:136::o;12864:122::-;12919:4;12943:35;12951:7;-1:-1:-1;;12943:7:0;:35::i;19010:100::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;19059:11:::1;:18:::0;;-1:-1:-1;;;;19088:14:0;-1:-1:-1;;;19088:14:0;;;19010:100::o;6936:148::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;7043:1:::1;7027:6:::0;;7006:40:::1;::::0;-1:-1:-1;;;;;7027:6:0;;::::1;::::0;7006:40:::1;::::0;7043:1;;7006:40:::1;7074:1;7057:19:::0;;-1:-1:-1;;;;;;7057:19:0::1;::::0;;6936:148::o;17556:271::-;17635:4;17662:6;17672:1;17662:11;17659:95;;17698:44;;-1:-1:-1;;;17698:44:0;;17736:4;17698:44;;;4385:51:1;-1:-1:-1;;;;;17698:29:0;;;;;4358:18:1;;17698:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17689:53;;17659:95;17800:10;;17771:48;;-1:-1:-1;;;17771:48:0;;-1:-1:-1;;;;;17800:10:0;;;17771:48;;;7132:51:1;7199:18;;;7192:34;;;17771:28:0;;;;;;7105:18:1;;17771:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21629:443::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;21828:10:::1;:24:::0;;-1:-1:-1;;;;;;21828:24:0;;::::1;-1:-1:-1::0;;;;;21828:24:0;;::::1;;::::0;;;21863:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21918:18:::1;:40:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21969:18:::1;:40:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;22020:20:::1;:44:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;21629:443::o;21021:600::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;21204:12:::1;:28:::0;;;21243:12:::1;:28:::0;;;21282:12:::1;:28:::0;;;21321:10:::1;:24:::0;;;21356:10:::1;:24:::0;;;21402:85:::1;21369:11:::0;21402:68:::1;21334:11:::0;21402:68;21297:13;21402:68;21219:13;21258;21402:17:::1;:32::i;:::-;:36:::0;::::1;:51::i;:85::-;21391:8;:96:::0;21498:14:::1;:32:::0;;;21560:18:::1;21577:1;21515:15:::0;21560:18:::1;:::i;:::-;21549:8;;:29;21541:71;;;::::0;-1:-1:-1;;;21541:71:0;;7911:2:1;21541:71:0::1;::::0;::::1;7893:21:1::0;7950:2;7930:18;;;7923:30;7989:31;7969:18;;;7962:59;8038:18;;21541:71:0::1;7709:353:1::0;21541:71:0::1;21021:600:::0;;;;;;:::o;17433:115::-;17487:18;;17479:59;;-1:-1:-1;;;;;17487:18:0;;;;17516:21;17479:59;;;;;17487:18;17479:59;17487:18;17479:59;17516:21;17487:18;17479:59;;;;;;;;;;;;;;;;;;;;;17433:115::o;18094:84::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18153:7:::1;:17:::0;;;::::1;;-1:-1:-1::0;;;18153:17:0::1;-1:-1:-1::0;;;;18153:17:0;;::::1;::::0;;;::::1;::::0;;18094:84::o;12994:156::-;13074:4;13098:44;13112:10;13124:9;13135:6;13098:13;:44::i;17835:250::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;17955:12:::1;:27:::0;;;;17993:11:::1;:25:::0;;;;18029:16:::1;:32:::0;17835:250::o;13540:217::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;13657:4:::1;13642:12;;:19;;;;:::i;:::-;13623:15;;:38;;13615:47;;;::::0;::::1;;13727:4;13708:14;13693:12;;:29;;;;:::i;:::-;13692:39;;;;:::i;:::-;13674:15;:57:::0;-1:-1:-1;13540:217:0:o;22080:155::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;22171:11:::1;:22:::0;;-1:-1:-1;;22171:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;22204:13:::1;:23:::0;22080:155::o;18402:166::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18453:7:::1;:15:::0;;-1:-1:-1;;;;18453:15:0::1;::::0;;18493:3:::1;18479:11;:17:::0;18522:4:::1;18507:12;:19:::0;;;18453:7:::1;18537:23:::0;18402:166::o;18722:139::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18790:3:::1;18776:11;:17:::0;18819:3:::1;18804:12;:18:::0;-1:-1:-1;18833:16:0::1;:20:::0;18722:139::o;22578:167::-;22646:7;22673:64;22714:22;:20;:22::i;:::-;22696:4;;-1:-1:-1;;;;;22696:4:0;12454:7;12472:18;;;:9;:18;;;;;;22673:36;;22686:22;;22706:1;;22686:15;:19;;:22::i;:::-;22673:8;;:12;:36::i;:::-;:40;;:64::i;17073:201::-;17202:18;;17162:21;;-1:-1:-1;;;;;17202:18:0;17194:72;17262:3;17231:28;17243:16;17162:21;17231:28;:::i;:::-;:34;;;;:::i;:::-;17194:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17131:143;17073:201;:::o;7092:244::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7181:22:0;::::1;7173:73;;;::::0;-1:-1:-1;;;7173:73:0;;8442:2:1;7173:73:0::1;::::0;::::1;8424:21:1::0;8481:2;8461:18;;;8454:30;8520:34;8500:18;;;8493:62;-1:-1:-1;;;8571:18:1;;;8564:36;8617:19;;7173:73:0::1;8240:402:1::0;7173:73:0::1;7283:6;::::0;;7262:38:::1;::::0;-1:-1:-1;;;;;7262:38:0;;::::1;::::0;7283:6;::::1;::::0;7262:38:::1;::::0;::::1;7311:6;:17:::0;;-1:-1:-1;;;;;;7311:17:0::1;-1:-1:-1::0;;;;;7311:17:0;;;::::1;::::0;;;::::1;::::0;;7092:244::o;18869:129::-;6849:6;;-1:-1:-1;;;;;6849:6:0;6159:10;6849:22;6841:67;;;;-1:-1:-1;;;6841:67:0;;;;;;;:::i;:::-;18929:2:::1;18915:11;:16:::0;;;18942:12:::1;:17:::0;-1:-1:-1;18970:16:0::1;:20:::0;18869:129::o;4323:192::-;4409:7;4445:12;4437:6;;;;4429:29;;;;-1:-1:-1;;;4429:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4469:9:0;4481:5;4485:1;4481;:5;:::i;:::-;4469:17;4323:192;-1:-1:-1;;;;;4323:192:0:o;13776:1418::-;13888:6;;13868:4;;13888:6;;13885:63;;;13904:41;13919:6;13927:9;13938:6;13904:14;:41::i;:::-;13897:48;;;;13885:63;-1:-1:-1;;;;;13964:22:0;;;;;;:14;:22;;;;;;;;13963:23;:53;;;;-1:-1:-1;;;;;;13991:25:0;;;;;;:14;:25;;;;;;;;13990:26;13963:53;13960:236;;;14040:11;;-1:-1:-1;;;14040:11:0;;;;14032:43;;;;-1:-1:-1;;;14032:43:0;;8982:2:1;14032:43:0;;;8964:21:1;9021:2;9001:18;;;8994:30;-1:-1:-1;;;9040:18:1;;;9033:50;9100:18;;14032:43:0;8780:344:1;14032:43:0;14104:7;;-1:-1:-1;;;14104:7:0;;;;14101:84;;;-1:-1:-1;;;;;14139:18:0;;;;;;:7;:18;;;;;;;;14131:39;;;;-1:-1:-1;;;14131:39:0;;9331:2:1;14131:39:0;;;9313:21:1;9370:1;9350:18;;;9343:29;-1:-1:-1;;;9388:18:1;;;9381:39;9437:18;;14131:39:0;9129:332:1;14131:39:0;-1:-1:-1;;;;;14228:22:0;;;;;;:14;:22;;;;;;;;14227:23;:53;;;;-1:-1:-1;;;;;;14254:26:0;;14275:4;14254:26;;14227:53;:84;;;;-1:-1:-1;14306:4:0;;-1:-1:-1;;;;;14285:26:0;;;14306:4;;14285:26;;14227:84;:105;;;;-1:-1:-1;14328:4:0;;-1:-1:-1;;;;;14315:17:0;;;14328:4;;14315:17;;14227:105;:140;;;;-1:-1:-1;14349:18:0;;-1:-1:-1;;;;;14336:31:0;;;14349:18;;14336:31;;14227:140;:177;;;;-1:-1:-1;14384:20:0;;-1:-1:-1;;;;;14371:33:0;;;14384:20;;14371:33;;14227:177;:208;;;;-1:-1:-1;;;;;;14409:26:0;;;;;;:15;:26;;;;;;;;14408:27;14227:208;14223:400;;;-1:-1:-1;;;;;12472:18:0;;14451;12472;;;:9;:18;;;;;;14540:15;;14516:19;14529:6;12472:18;14516:19;:::i;:::-;14515:40;;14507:114;;;;-1:-1:-1;;;14507:114:0;;9798:2:1;14507:114:0;;;9780:21:1;9837:2;9817:18;;;9810:30;9876:34;9856:18;;;9849:62;9947:32;9927:18;;;9920:60;9997:19;;14507:114:0;9596:426:1;14507:114:0;14436:187;14223:400;14688:28;14701:6;14709;14688:12;:28::i;:::-;14733:16;:14;:16::i;:::-;14730:35;;;14752:10;:8;:10::i;:::-;14845:53;;;;;;;;;;;-1:-1:-1;;;14845:53:0;;;;;;;;-1:-1:-1;;;;;14845:17:0;;-1:-1:-1;14845:17:0;;;:9;:17;;;;;;;;:53;;14867:6;;14845:21;:53::i;:::-;-1:-1:-1;;;;;14825:17:0;;;;;;:9;:17;;;;;;;;:73;;;;14937:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;14960:22:0;;;;;;:11;:22;;;;;;;;14937:45;14936:93;;14995:34;15003:6;15011;15019:9;14995:7;:34::i;:::-;14936:93;;;14986:6;14936:93;-1:-1:-1;;;;;15063:20:0;;;;;;:9;:20;;;;;;14911:118;;-1:-1:-1;15063:40:0;;14911:118;15063:24;:40::i;:::-;-1:-1:-1;;;;;15040:20:0;;;;;;;:9;:20;;;;;;;:63;;;;15121:43;;;;;;-1:-1:-1;;;;;;;;;;;15121:43:0;;;15149:14;352:25:1;;340:2;325:18;;206:177;15121:43:0;;;;;;;;-1:-1:-1;15182:4:0;;13776:1418;-1:-1:-1;;;;13776:1418:0:o;4181:136::-;4239:7;4266:43;4270:1;4273;4266:43;;;;;;;;;;;;;;;;;:3;:43::i;3994:181::-;4052:7;;4084:5;4088:1;4084;:5;:::i;:::-;4072:17;;4113:1;4108;:6;;4100:46;;;;-1:-1:-1;;;4100:46:0;;10229:2:1;4100:46:0;;;10211:21:1;10268:2;10248:18;;;10241:30;10307:29;10287:18;;;10280:57;10354:18;;4100:46:0;10027:351:1;4521:250:0;4579:7;4603:1;4608;4603:6;4599:47;;-1:-1:-1;4633:1:0;4626:8;;4599:47;4658:9;4670:5;4674:1;4670;:5;:::i;:::-;4658:17;-1:-1:-1;4703:1:0;4694:5;4698:1;4658:17;4694:5;:::i;:::-;:10;4686:56;;;;-1:-1:-1;;;4686:56:0;;10585:2:1;4686:56:0;;;10567:21:1;10624:2;10604:18;;;10597:30;10663:34;10643:18;;;10636:62;-1:-1:-1;;;10714:18:1;;;10707:31;10755:19;;4686:56:0;10383:397:1;4777:132:0;4835:7;4862:39;4866:1;4869;4862:39;;;;;;;;;;;;;;;;;:3;:39::i;15206:330::-;15336:53;;;;;;;;;;;-1:-1:-1;;;15336:53:0;;;;;;;;-1:-1:-1;;;;;15336:17:0;;15299:4;15336:17;;;:9;:17;;;;;;;:53;;15358:6;;15336:21;:53::i;:::-;-1:-1:-1;;;;;15316:17:0;;;;;;;:9;:17;;;;;;:73;;;;15423:20;;;;;;;:32;;15448:6;15423:24;:32::i;:::-;-1:-1:-1;;;;;15400:20:0;;;;;;;:9;:20;;;;;;;:55;;;;15471:35;;;;;;-1:-1:-1;;;;;;;;;;;15471:35:0;;;15499:6;352:25:1;;340:2;325:18;;206:177;15471:35:0;;;;;;;;-1:-1:-1;15524:4:0;15206:330;;;;;:::o;15544:166::-;15641:12;;15631:6;:22;;:49;;;-1:-1:-1;;;;;;15657:23:0;;;;;;:15;:23;;;;;;;;15631:49;15623:79;;;;-1:-1:-1;;;15623:79:0;;10987:2:1;15623:79:0;;;10969:21:1;11026:2;11006:18;;;10999:30;-1:-1:-1;;;11045:18:1;;;11038:47;11102:18;;15623:79:0;10785:341:1;15623:79:0;15544:166;;:::o;16868:197::-;16955:4;;16917;;-1:-1:-1;;;;;16955:4:0;16941:10;:18;;;;:38;;-1:-1:-1;16973:6:0;;;;16972:7;16941:38;:62;;;;-1:-1:-1;16992:11:0;;;;16941:62;:116;;;;-1:-1:-1;;17044:13:0;;17034:4;17016:24;;;;:9;:24;;;;;;:41;;;16868:197::o;19126:1886::-;10778:6;:13;;-1:-1:-1;;10778:13:0;10787:4;10778:13;;;19221:15:::1;::::0;19238:26:::1;::::0;10778:6;;19205:60:::1;::::0;:15:::1;:60::i;:::-;:79;;19272:12;;19205:79;;;19268:1;19205:79;19175:109;;19295:23;19321:59;19378:1;19321:52;19364:8;;19321:38;19339:19;19321:13;;:17;;:38;;;;:::i;:59::-;19295:85;;19391:20;19414:34;19432:15;19414:13;;:17;;:34;;;;:::i;:::-;19485:16;::::0;;19499:1:::1;19485:16:::0;;;;;::::1;::::0;;19391:57;;-1:-1:-1;19461:21:0::1;::::0;19485:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19485:16:0::1;19461:40;;19530:4;19512;19517:1;19512:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19512:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;19556:4:::1;::::0;19546:7;;19556:4;::::1;::::0;19546;;19556;;19546:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;19546:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;19631:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;19631:188:0;;19597:21:::1;::::0;19631:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;19703:12;;19573:21:::1;::::0;19746:4;;19773::::1;::::0;19793:15:::1;::::0;19631:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19832:17;19852:40;19878:13;19852:21;:25;;:40;;;;:::i;:::-;19832:60:::0;-1:-1:-1;19905:19:0::1;19927:40;19940:26;:19:::0;19964:1:::1;19940:23;:26::i;:::-;19927:8;::::0;;:12:::1;:40::i;:::-;19905:62:::0;-1:-1:-1;19988:26:0::1;20017:58;20073:1;20017:51;19905:62:::0;20017:51;:9;20031:19;20017:13:::1;:34::i;:58::-;19988:87;;20086:26;20115:44;20147:11;20115:27;20129:12;;20115:9;:13;;:27;;;;:::i;:44::-;20086:73;;20170:26;20199:44;20231:11;20199:27;20213:12;;20199:9;:13;;:27;;;;:::i;:44::-;20170:73;;20254:24;20281:42;20311:11;20281:25;20295:10;;20281:9;:13;;:25;;;;:::i;:42::-;20365:20;::::0;20357:65:::1;::::0;20254:69;;-1:-1:-1;20337:15:0::1;::::0;-1:-1:-1;;;;;20365:20:0;;::::1;::::0;20399:18;;20337:15;20357:65;20337:15;20357:65;20399:18;20365:20;20357:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20457:18:0::1;::::0;20449:61:::1;::::0;20336:86;;-1:-1:-1;;;;;;20457:18:0::1;::::0;20489:16;;20449:61:::1;::::0;;;20489:16;20457:18;20449:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20545:20:0::1;::::0;20537:65:::1;::::0;20433:77;;-1:-1:-1;;;;;;20545:20:0::1;::::0;20579:18;;20537:65:::1;::::0;;;20579:18;20545:20;20537:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20636:5:0::1;::::0;-1:-1:-1;;20657:19:0;;;-1:-1:-1;20654:351:0::1;;20692:6;::::0;20866:10:::1;::::0;20692:233:::1;::::0;-1:-1:-1;;;20692:233:0;;20768:4:::1;20692:233;::::0;::::1;12799:34:1::0;12849:18;;;12842:34;;;20692:6:0::1;12892:18:1::0;;;12885:34;;;12935:18;;;12928:34;-1:-1:-1;;;;;20866:10:0;;::::1;12978:19:1::0;;;12971:44;20895:15:0::1;13031:19:1::0;;;13024:35;20692:6:0;::::1;::::0;:22:::1;::::0;20722:18;;12733:19:1;;20692:233:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;20945:48:0::1;::::0;;13555:25:1;;;13611:2;13596:18;;13589:34;;;20945:48:0::1;::::0;-1:-1:-1;13528:18:1;20945:48:0::1;;;;;;;20654:351;-1:-1:-1::0;;10796:6:0;:14;;-1:-1:-1;;10796:14:0;;;-1:-1:-1;;;;;;;;;;19126:1886:0:o;15840:1020::-;15975:16;;16020:4;;15926:7;;15975:16;-1:-1:-1;;;;;16020:4:0;;;16007:17;;;;16004:146;;-1:-1:-1;16052:12:0;;16004:146;;;16095:4;;-1:-1:-1;;;;;16095:4:0;;;16085:14;;;;16082:68;;-1:-1:-1;16127:11:0;;16082:68;16162:17;16182:60;16221:14;;16238:3;16221:20;;;;:::i;:::-;16182:34;16207:8;16182:20;16193:8;;16182:6;:10;;:20;;;;:::i;:60::-;16162:80;;16253:21;16277:39;16307:8;;16277:25;16291:10;;16277:9;:13;;:25;;;;:::i;:39::-;16253:63;-1:-1:-1;16327:22:0;16352:28;:9;16253:63;16352:13;:28::i;:::-;16438:4;16420:24;;;;:9;:24;;;;;;16327:53;;-1:-1:-1;16420:44:0;;16327:53;16420:28;:44::i;:::-;16411:4;16393:24;;;;:9;:24;;;;;;:71;;;;16517:18;;-1:-1:-1;;;;;16517:18:0;16507:29;;;;:48;;16541:13;16507:33;:48::i;:::-;16485:18;;-1:-1:-1;;;;;16485:18:0;;;16475:29;;;;:9;:29;;;;;;;;;:80;;;;16571:47;352:25:1;;;16596:4:0;;16571:47;;;;-1:-1:-1;;;;;;;;;;;16571:47:0;325:18:1;16571:47:0;;;;;;;16652:17;;16649:163;;16700:12;;:31;;16717:13;16700:16;:31::i;:::-;16685:12;:46;16768:4;;16751:37;;352:25:1;;;-1:-1:-1;;;;;16768:4:0;;;;16751:37;;;-1:-1:-1;;;;;;;;;;;16751:37:0;340:2:1;325:18;16751:37:0;;;;;;;16649:163;16831:21;:6;16842:9;16831:10;:21::i;:::-;16824:28;15840:1020;-1:-1:-1;;;;;;;;15840:1020:0:o;4915:189::-;5001:7;5036:12;5029:5;5021:28;;;;-1:-1:-1;;;5021:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5060:9:0;5072:5;5076:1;5072;:5;:::i;388:548:1:-;500:4;529:2;558;547:9;540:21;590:6;584:13;633:6;628:2;617:9;613:18;606:34;658:1;668:140;682:6;679:1;676:13;668:140;;;777:14;;;773:23;;767:30;743:17;;;762:2;739:26;732:66;697:10;;668:140;;;672:3;857:1;852:2;843:6;832:9;828:22;824:31;817:42;927:2;920;916:7;911:2;903:6;899:15;895:29;884:9;880:45;876:54;868:62;;;;388:548;;;;:::o;941:173::-;1009:20;;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1038:70;941:173;;;:::o;1119:254::-;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1287:29;1306:9;1287:29;:::i;:::-;1277:39;1363:2;1348:18;;;;1335:32;;-1:-1:-1;;;1119:254:1:o;1378:248::-;1446:6;1454;1507:2;1495:9;1486:7;1482:23;1478:32;1475:52;;;1523:1;1520;1513:12;1475:52;-1:-1:-1;;1546:23:1;;;1616:2;1601:18;;;1588:32;;-1:-1:-1;1378:248:1:o;1631:328::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1816:29;1835:9;1816:29;:::i;:::-;1806:39;;1864:38;1898:2;1887:9;1883:18;1864:38;:::i;:::-;1854:48;;1949:2;1938:9;1934:18;1921:32;1911:42;;1631:328;;;;;:::o;2153:118::-;2239:5;2232:13;2225:21;2218:5;2215:32;2205:60;;2261:1;2258;2251:12;2276:750;2368:6;2376;2384;2437:2;2425:9;2416:7;2412:23;2408:32;2405:52;;;2453:1;2450;2443:12;2405:52;2493:9;2480:23;2522:18;2563:2;2555:6;2552:14;2549:34;;;2579:1;2576;2569:12;2549:34;2617:6;2606:9;2602:22;2592:32;;2662:7;2655:4;2651:2;2647:13;2643:27;2633:55;;2684:1;2681;2674:12;2633:55;2724:2;2711:16;2750:2;2742:6;2739:14;2736:34;;;2766:1;2763;2756:12;2736:34;2821:7;2814:4;2804:6;2801:1;2797:14;2793:2;2789:23;2785:34;2782:47;2779:67;;;2842:1;2839;2832:12;2779:67;2873:4;2865:13;;;;-1:-1:-1;2897:6:1;-1:-1:-1;;2938:20:1;;2925:34;2968:28;2925:34;2968:28;:::i;:::-;3015:5;3005:15;;;2276:750;;;;;:::o;3031:186::-;3090:6;3143:2;3131:9;3122:7;3118:23;3114:32;3111:52;;;3159:1;3156;3149:12;3111:52;3182:29;3201:9;3182:29;:::i;3222:484::-;3317:6;3325;3333;3341;3349;3402:3;3390:9;3381:7;3377:23;3373:33;3370:53;;;3419:1;3416;3409:12;3370:53;3442:29;3461:9;3442:29;:::i;:::-;3432:39;;3490:38;3524:2;3513:9;3509:18;3490:38;:::i;:::-;3480:48;;3547:38;3581:2;3570:9;3566:18;3547:38;:::i;:::-;3537:48;;3604:38;3638:2;3627:9;3623:18;3604:38;:::i;:::-;3594:48;;3661:39;3695:3;3684:9;3680:19;3661:39;:::i;:::-;3651:49;;3222:484;;;;;;;;:::o;3711:523::-;3815:6;3823;3831;3839;3847;3855;3908:3;3896:9;3887:7;3883:23;3879:33;3876:53;;;3925:1;3922;3915:12;3876:53;-1:-1:-1;;3948:23:1;;;4018:2;4003:18;;3990:32;;-1:-1:-1;4069:2:1;4054:18;;4041:32;;4120:2;4105:18;;4092:32;;-1:-1:-1;4171:3:1;4156:19;;4143:33;;-1:-1:-1;4223:3:1;4208:19;4195:33;;-1:-1:-1;3711:523:1;-1:-1:-1;3711:523:1:o;4447:241::-;4503:6;4556:2;4544:9;4535:7;4531:23;4527:32;4524:52;;;4572:1;4569;4562:12;4524:52;4611:9;4598:23;4630:28;4652:5;4630:28;:::i;4693:316::-;4770:6;4778;4786;4839:2;4827:9;4818:7;4814:23;4810:32;4807:52;;;4855:1;4852;4845:12;4807:52;-1:-1:-1;;4878:23:1;;;4948:2;4933:18;;4920:32;;-1:-1:-1;4999:2:1;4984:18;;;4971:32;;4693:316;-1:-1:-1;4693:316:1:o;5014:180::-;5073:6;5126:2;5114:9;5105:7;5101:23;5097:32;5094:52;;;5142:1;5139;5132:12;5094:52;-1:-1:-1;5165:23:1;;5014:180;-1:-1:-1;5014:180:1:o;5199:309::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5380:9;5367:23;5399:28;5421:5;5399:28;:::i;5513:260::-;5581:6;5589;5642:2;5630:9;5621:7;5617:23;5613:32;5610:52;;;5658:1;5655;5648:12;5610:52;5681:29;5700:9;5681:29;:::i;:::-;5671:39;;5729:38;5763:2;5752:9;5748:18;5729:38;:::i;:::-;5719:48;;5513:260;;;;;:::o;6004:356::-;6206:2;6188:21;;;6225:18;;;6218:30;6284:34;6279:2;6264:18;;6257:62;6351:2;6336:18;;6004:356::o;6365:127::-;6426:10;6421:3;6417:20;6414:1;6407:31;6457:4;6454:1;6447:15;6481:4;6478:1;6471:15;6497:127;6558:10;6553:3;6549:20;6546:1;6539:31;6589:4;6586:1;6579:15;6613:4;6610:1;6603:15;6629:135;6668:3;6689:17;;;6686:43;;6709:18;;:::i;:::-;-1:-1:-1;6756:1:1;6745:13;;6629:135::o;6769:184::-;6839:6;6892:2;6880:9;6871:7;6867:23;6863:32;6860:52;;;6908:1;6905;6898:12;6860:52;-1:-1:-1;6931:16:1;;6769:184;-1:-1:-1;6769:184:1:o;7237:245::-;7304:6;7357:2;7345:9;7336:7;7332:23;7328:32;7325:52;;;7373:1;7370;7363:12;7325:52;7405:9;7399:16;7424:28;7446:5;7424:28;:::i;7487:217::-;7527:1;7553;7543:132;;7597:10;7592:3;7588:20;7585:1;7578:31;7632:4;7629:1;7622:15;7660:4;7657:1;7650:15;7543:132;-1:-1:-1;7689:9:1;;7487:217::o;8067:168::-;8140:9;;;8171;;8188:15;;;8182:22;;8168:37;8158:71;;8209:18;;:::i;8647:128::-;8714:9;;;8735:11;;;8732:37;;;8749:18;;:::i;9466:125::-;9531:9;;;9552:10;;;9549:36;;;9565:18;;:::i;11263:980::-;11525:4;11573:3;11562:9;11558:19;11604:6;11593:9;11586:25;11630:2;11668:6;11663:2;11652:9;11648:18;11641:34;11711:3;11706:2;11695:9;11691:18;11684:31;11735:6;11770;11764:13;11801:6;11793;11786:22;11839:3;11828:9;11824:19;11817:26;;11878:2;11870:6;11866:15;11852:29;;11899:1;11909:195;11923:6;11920:1;11917:13;11909:195;;;11988:13;;-1:-1:-1;;;;;11984:39:1;11972:52;;12079:15;;;;12044:12;;;;12020:1;11938:9;11909:195;;;-1:-1:-1;;;;;;;12160:32:1;;;;12155:2;12140:18;;12133:60;-1:-1:-1;;;12224:3:1;12209:19;12202:35;12121:3;11263:980;-1:-1:-1;;;11263:980:1:o;13070:306::-;13158:6;13166;13174;13227:2;13215:9;13206:7;13202:23;13198:32;13195:52;;;13243:1;13240;13233:12;13195:52;13272:9;13266:16;13256:26;;13322:2;13311:9;13307:18;13301:25;13291:35;;13366:2;13355:9;13351:18;13345:25;13335:35;;13070:306;;;;;:::o

Swarm Source

ipfs://55e742fd651d3a152365a8eefe0dd77af143864fa93f9e7ccbe0c2d254d6d999

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.