Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- pBSKR
- Optimization enabled
- true
- Compiler version
- v0.8.19+commit.7dd6d404
- Optimization runs
- 1000000
- EVM Version
- default
- Verified at
- 2023-06-03T22:25:00.895799Z
Constructor Arguments
0x00000000000000000000000019ea5fa4d1dbd7413752b93f856b1cd165f2f21900000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000fb7103d7011dfa60c18c6961c5a38038d8048fe0000000000000000000000000d493b22ac1e70c0da743b0c61311aeea4f817eef00000000000000000000000035cef302da66733c076c10f85fc8097dce90bcc00000000000000000000000001988d578de9a3468329de348e5a0e6cdc4369df9000000000000000000000000cd75d401a91b076f274418c7fa6a973d7fb7fece00000000000000000000000053e011d48f0164a3d58fb8591060e7b05e7448180000000000000000000000007d6e237a514fbe12c65c3aa72525f61aa6a722d200000000000000000000000000000000000000000000000000000000000000177042534b52202d2070756c73656c6f7269616e2e636f6d00000000000000000000000000000000000000000000000000000000000000000000000000000000057042534b52000000000000000000000000000000000000000000000000000000
contracts/pBSKR.sol
/*
* @title BSKR - Brings Serenity, Knowledge and Richness
* @author Ra Murd <pulselorian@gmail.com>
* @notice https://pulselorian.com/
* @notice https://t.me/ThePulselorian
* @notice https://twitter.com/ThePulseLorian
*
* BSKR is our attempt to develop a better internet currency
* It's deflationary, burns some fees, reflects some fees and adds some fees to liquidity pool
* It may also pay quarterly bonus to net buyers
*
* ( ( ( ( ( (( ( . ( ( (( ( ((
* )\ )\ )\ )\ )\ (\())\ . )\ )\ ))\)\ ))\
* ((_)((_)(_)(_) ((_))(_)(_) ((_)((_)(((_)_()((_)))
* | _ \ | | | | / __| __| | / _ \| _ \_ _| \ \| |
* | _/ |_| | |__\__ \ _|| |__| (_) | /| || - | . |
* |_| \___/|____|___/___|____|\___/|_|_\___|_|_|_|\_|
*
* Tokenomics:
* Reflection 2.0% 40.00%
* Burn 2.0% 40.00%
* Growth 0.5% 10.00%
* Liquidity 0.5% 10.00%
*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
import "./imports/BaseBSKR.sol";
import "./imports/IBSKR.sol";
contract pBSKR is BaseBSKR {
enum Field {
tTransferAmount,
rAmount,
rTransferAmount,
tRfiFee,
tOtherFees,
rRfiFee,
rOtherFees
}
enum Fees {
RfiFee,
OtherFees,
GrossFees
}
IBSKR private _oldBSKR;
address private _LBSKRAddr;
address private _ammBSKRPair;
address[] private _noRfi;
bool private _addLPEnabled = true;
bool private _addingLiquidity;
mapping(address => bool) private _getsNoRfi;
mapping(address => uint256) private _rBalances;
uint256 private _num_tokens_for_lp = _TOTAL_SUPPLY / _BIPS;
uint256 private _rTotal = (type(uint256).max -
(type(uint256).max % _TOTAL_SUPPLY));
uint256 private totalReflection;
uint256[3] private _currFees = [200, 50, 500];
event AddLPEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
constructor(
IBSKR oldBSKR_,
string memory name_,
string memory symbol_,
address growthAddress_,
address lbskrAddr_,
address[5] memory sisterOAs_
) BaseBSKR(name_, symbol_, growthAddress_, sisterOAs_) {
_oldBSKR = oldBSKR_;
_LBSKRAddr = lbskrAddr_;
_rBalances[msg.sender] = _rTotal;
_balances[msg.sender] = _TOTAL_SUPPLY;
emit Transfer(address(0), msg.sender, _TOTAL_SUPPLY);
_ammBSKRPair = _dexFactoryV2.createPair(address(this), wethAddr);
_approve(_ammBSKRPair, _ammBSKRPair, type(uint256).max);
_isAMMPair[_ammBSKRPair] = true;
_setNoRfi(_ammBSKRPair);
for (uint256 index = 0; index < _sisterOAs.length; ++index) {
_paysNoFee[_sisterOAs[index]] = true;
_setNoRfi(_sisterOAs[index]);
}
_setNoRfi(msg.sender);
_setNoRfi(address(this));
_setNoRfi(_ammBSKRPair);
_setNoRfi(_BURN_ADDRESS);
uint256 balBurn = _oldBSKR.balanceOf(address(0));
_balances[_BURN_ADDRESS] += balBurn;
_balances[msg.sender] -= balBurn;
emit Transfer(msg.sender, _BURN_ADDRESS, balBurn);
}
function _airdropTokens(address to_, uint256 amount_) internal override {
_transferTokens(owner(), to_, amount_, false, true, _getsNoRfi[to_]);
}
function _getRate() private view returns (uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _TOTAL_SUPPLY;
for (uint256 index = 0; index < _noRfi.length; ++index) {
if (
_rBalances[_noRfi[index]] > rSupply ||
_balances[_noRfi[index]] > tSupply
) return (_rTotal / _TOTAL_SUPPLY);
rSupply -= _rBalances[_noRfi[index]];
tSupply -= _balances[_noRfi[index]];
}
if (rSupply < _rTotal / _TOTAL_SUPPLY) return (_rTotal / _TOTAL_SUPPLY);
return rSupply / tSupply;
}
function _getValues(
uint256 tAmount_,
uint256 feeMultiplier_
) private view returns (uint256[7] memory response) {
uint256 currentRate = _getRate();
response[uint256(Field.rAmount)] = (tAmount_ * currentRate);
if (feeMultiplier_ == 0) {
response[uint256(Field.tTransferAmount)] = tAmount_;
response[uint256(Field.rTransferAmount)] = tAmount_ * currentRate;
} else {
response[uint256(Field.tRfiFee)] =
(((tAmount_ * _currFees[uint256(Fees.RfiFee)]) / _BIPS) *
feeMultiplier_) /
10;
response[uint256(Field.tOtherFees)] =
(((tAmount_ * _currFees[uint256(Fees.OtherFees)]) / _BIPS) *
feeMultiplier_) /
10;
response[uint256(Field.tTransferAmount)] =
tAmount_ -
((((tAmount_ * _currFees[uint256(Fees.GrossFees)]) / _BIPS) *
feeMultiplier_) / 10);
response[uint256(Field.rRfiFee)] = (response[
uint256(Field.tRfiFee)
] * currentRate);
response[uint256(Field.rOtherFees)] = (response[
uint256(Field.tOtherFees)
] * currentRate);
response[uint256(Field.rTransferAmount)] = (response[
uint256(Field.tTransferAmount)
] * currentRate);
}
return (response);
}
function _setNoRfi(address wallet_) private {
if (!_getsNoRfi[wallet_]) {
_getsNoRfi[wallet_] = true;
_noRfi.push(wallet_);
}
}
function _takeFee(address target_, uint256 tFee_, uint256 rFee_) private {
_rBalances[target_] += rFee_;
if (_getsNoRfi[target_]) {
_balances[target_] += tFee_;
}
}
function _transfer(
address from_,
address to_,
uint256 amount_
) internal override {
_checkIfAMMPair(from_);
if (_isAMMPair[from_]) {
_setNoRfi(from_);
}
_checkIfAMMPair(to_);
if (_isAMMPair[to_]) {
_setNoRfi(to_);
}
uint256 contractTokenBalance = balanceOf(address(this));
if (
(contractTokenBalance >= _num_tokens_for_lp) &&
!_addingLiquidity &&
from_ != _ammBSKRPair &&
_addLPEnabled
) {
_addingLiquidity = true;
uint256 amount2Eth = _num_tokens_for_lp >> 1;
uint256 tokenAmount = _num_tokens_for_lp - amount2Eth;
uint256 initialBalance = address(this).balance;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = wethAddr;
_approve(address(this), address(this), amount2Eth);
_approve(address(this), address(_dexRouterV2), amount2Eth);
_dexRouterV2.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount2Eth,
0,
path,
address(this),
block.timestamp + 15
);
uint256 ethAmount = address(this).balance - initialBalance;
_approve(address(this), address(_dexRouterV2), tokenAmount);
_dexRouterV2.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0,
0,
_getOriginAddress(),
block.timestamp + 15
);
emit SwapAndLiquify(amount2Eth, ethAmount, tokenAmount);
_num_tokens_for_lp =
(_TOTAL_SUPPLY - balanceOf(_BURN_ADDRESS)) /
_BIPS;
_addingLiquidity = false;
}
bool takeFee = true;
if (_paysNoFee[from_] || _paysNoFee[to_]) {
takeFee = false;
}
if (!_isAMMPair[from_] && !_isAMMPair[to_]) {
takeFee = false;
}
_transferTokens(
from_,
to_,
amount_,
takeFee,
_getsNoRfi[from_],
_getsNoRfi[to_]
);
}
function _transferTokens(
address sender_,
address recipient_,
uint256 tAmount_,
bool takeFee_,
bool senderExcluded_,
bool recipientExcluded_
) private whenNotPaused {
uint256 reducedFees = 10;
if (!takeFee_) {
reducedFees = 0;
}
uint256[7] memory response = _getValues(tAmount_, reducedFees);
if (senderExcluded_) {
_balances[sender_] -= tAmount_;
}
_rBalances[sender_] -= response[uint256(Field.rAmount)];
if (recipientExcluded_) {
_balances[recipient_] += response[uint256(Field.tTransferAmount)];
}
_rBalances[recipient_] += response[uint256(Field.rTransferAmount)];
uint256 _tRfiFee_ = response[uint256(Field.tRfiFee)];
if (_tRfiFee_ != 0) {
uint256 _rRfiFee_ = response[uint256(Field.rRfiFee)];
_rTotal -= _rRfiFee_;
totalReflection += _tRfiFee_;
_takeFee(_BURN_ADDRESS, _tRfiFee_, _rRfiFee_);
emit Transfer(sender_, _BURN_ADDRESS, _tRfiFee_);
uint256 _tOtherFees_ = response[uint256(Field.tOtherFees)];
uint256 _rOtherFees_ = response[uint256(Field.rOtherFees)];
_takeFee(_growthAddress, _tOtherFees_, _rOtherFees_);
emit Transfer(sender_, _growthAddress, _tOtherFees_);
_takeFee(address(this), _tOtherFees_, _rOtherFees_);
emit Transfer(sender_, address(this), _tOtherFees_);
}
emit Transfer(
sender_,
recipient_,
response[uint256(Field.tTransferAmount)]
);
}
function balanceOf(address wallet_) public view override returns (uint256) {
if (_getsNoRfi[wallet_]) return _balances[wallet_];
require(_rBalances[wallet_] <= _rTotal, "B:Amt large");
uint256 currentRate = _getRate();
return _rBalances[wallet_] / currentRate;
}
function setSwapAndLiquifyEnabled(bool enabled_) external onlyManager {
_addLPEnabled = enabled_;
emit AddLPEnabledUpdated(enabled_);
}
function migrateOwner(address wallet) external onlyOwner {
migrateInt(wallet);
}
function migrate() external {
require(!_migrated[msg.sender], "B:Already migrated");
migrateInt(msg.sender);
}
function migrateInt(address wallet) internal {
uint256 tokenBal = _oldBSKR.balanceOf(wallet);
if (tokenBal > 0) {
_transferTokens(
owner(),
wallet,
tokenBal,
false,
true,
_getsNoRfi[wallet]
);
}
require(balanceOf(wallet) >= tokenBal, "B:Migrate Issue");
_migrated[wallet] = true;
}
function stakeTransfer(
address from_,
address to_,
uint256 amount_
) external returns (bool) {
require(msg.sender == _LBSKRAddr);
_transferTokens(
from_,
to_,
amount_,
false,
_getsNoRfi[from_],
_getsNoRfi[to_]
);
return true;
}
}
contracts/imports/BaseBSKR.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
import "../lib/Utils.sol";
import "../openzeppelin/access/Ownable.sol";
import "../openzeppelin/security/Pausable.sol";
import "../openzeppelin/token/ERC20/IERC20.sol";
import "../uniswap/v2-core/interfaces/IUniswapV2Factory.sol";
import "../uniswap/v2-periphery/interfaces/IUniswapV2Router02.sol";
import "./Manageable.sol";
abstract contract BaseBSKR is Utils, Ownable, Pausable, IERC20, Manageable {
struct Airdrop {
address user;
uint256 ethers;
}
IUniswapV2Factory internal _dexFactoryV2;
IUniswapV2Router02 internal _dexRouterV2;
address internal _growthAddress;
address internal constant _BURN_ADDRESS = address(0x369);
address internal wethAddr;
address[5] internal _sisterOAs;
mapping(address => bool) internal _isAMMPair;
mapping(address => bool) internal _migrated;
mapping(address => bool) internal _paysNoFee;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) internal _balances;
string private _name;
string private _symbol;
uint8 private constant _DECIMALS = 18;
uint16 internal constant _BIPS = 10000;
uint128 internal constant _TOTAL_SUPPLY =
1_000_000_000_000_000_000_000_000_000_000;
uint256 internal _oaIndex = 4;
constructor(
string memory name_,
string memory symbol_,
address growthAddress_,
address[5] memory sisterOAs_
) {
_name = name_;
_symbol = symbol_;
_growthAddress = growthAddress_;
_sisterOAs = sisterOAs_;
_dexRouterV2 = IUniswapV2Router02(
// 0xDaE9dd3d1A52CfCe9d5F2fAC7fDe164D500E50f7 // testnet
0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02 // mainnet
);
_dexFactoryV2 = IUniswapV2Factory(_dexRouterV2.factory());
wethAddr = _dexRouterV2.WPLS();
_paysNoFee[msg.sender] = true;
_paysNoFee[address(this)] = true;
_paysNoFee[address(_dexRouterV2)] = true;
}
receive() external payable {}
fallback() external payable {}
function _airdropTokens(address to_, uint256 amount_) internal virtual;
function _approve(
address owner_,
address spender_,
uint256 amount_
) internal {
_allowances[owner_][spender_] = amount_;
emit Approval(owner_, spender_, amount_);
}
function _checkIfAMMPair(address target_) internal {
if (target_.code.length == 0) return;
if (target_ == address(_dexRouterV2)) return;
if (target_ == wethAddr) return;
if (!_isAMMPair[target_]) {
address token0 = _getToken0(target_);
if (token0 == address(0)) {
return;
}
address token1 = _getToken1(target_);
if (token1 == address(0)) {
return;
}
_approve(target_, target_, type(uint256).max);
_isAMMPair[target_] = true;
}
}
function _getOriginAddress() internal returns (address) {
if (_oaIndex < (_sisterOAs.length - 1)) {
_oaIndex = _oaIndex + 1;
} else {
_oaIndex = 0;
}
return _sisterOAs[_oaIndex];
}
function _transfer(
address owner_,
address to_,
uint256 amount_
) internal virtual;
function airdrop(Airdrop[] calldata receivers_) external onlyOwner {
for (uint256 index; index < receivers_.length; ++index) {
if (
receivers_[index].user != address(0) &&
receivers_[index].ethers != 0
) {
_airdropTokens(
receivers_[index].user,
receivers_[index].ethers * 1_000_000_000_000_000_000
);
}
}
}
function allowance(
address owner_,
address spender_
) external view override returns (uint256) {
return _allowances[owner_][spender_];
}
function approve(
address spender_,
uint256 amount_
) external override returns (bool) {
address owner = msg.sender;
_approve(owner, spender_, amount_);
return true;
}
function decimals() external pure returns (uint8) {
return _DECIMALS;
}
function decreaseAllowance(
address spender_,
uint256 subtractedValue_
) external returns (bool) {
address owner = msg.sender;
uint256 currentAllowance = _allowances[owner][spender_];
require(currentAllowance >= subtractedValue_, "BB:Decreases below 0");
unchecked {
_approve(owner, spender_, currentAllowance - subtractedValue_);
}
return true;
}
function increaseAllowance(
address spender_,
uint256 addedValue_
) external returns (bool) {
address owner = msg.sender;
_approve(owner, spender_, _allowances[owner][spender_] + addedValue_);
return true;
}
function name() external view returns (string memory) {
return _name;
}
function pauseContract() external onlyManager {
_pause();
}
function symbol() external view returns (string memory) {
return _symbol;
}
function totalSupply() external pure override returns (uint256) {
return _TOTAL_SUPPLY;
}
function transfer(
address to_,
uint256 amount_
) external override returns (bool) {
address owner = msg.sender;
_transfer(owner, to_, amount_);
return true;
}
function transferFrom(
address from_,
address to_,
uint256 amount_
) external override returns (bool) {
address spender = msg.sender;
uint256 currentAllowance = _allowances[from_][spender];
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount_, "BB:Insufficient allowance");
unchecked {
_approve(from_, spender, currentAllowance - amount_);
}
}
_transfer(from_, to_, amount_);
return true;
}
function unPauseContract() external onlyManager {
_unpause();
}
function reclaimETH() external payable {
uint256 amount = address(this).balance;
require(amount > 0, "BB:0 Balance");
(bool sent, ) = owner().call{value: amount}("");
require(sent, "BB:Send Failed");
}
function reclaimToken(IERC20 token_, uint256 amount_) external payable {
uint256 balance = token_.balanceOf(address(this));
require(amount_ <= balance, "BB:Too much");
token_.transfer(owner(), balance);
}
function burn(uint256 amount_) external {
_balances[msg.sender] -= amount_;
_balances[_BURN_ADDRESS] += amount_;
emit Transfer(msg.sender, _BURN_ADDRESS, amount_);
}
}
contracts/imports/IBSKR.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
interface IBSKR {
function balanceOf(address wallet_) external view returns (uint256);
function stakeTransfer(
address from_,
address to_,
uint256 amount_
) external returns (bool);
}
contracts/imports/Manageable.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
abstract contract Manageable {
address private _manager;
event ManagementTransferred(
address indexed previousManager,
address indexed newManager
);
constructor() {
_manager = msg.sender;
emit ManagementTransferred(address(0), msg.sender);
}
function _checkManager() private view {
require(_manager == msg.sender, "M:Caller not manager");
}
function manager() external view returns (address) {
return _manager;
}
modifier onlyManager() {
_checkManager();
_;
}
function transferManagement(address newManager_) external onlyManager {
emit ManagementTransferred(_manager, newManager_);
_manager = newManager_;
}
}
contracts/lib/Utils.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
contract Utils {
uint24 private constant _SECS_IN_FOUR_WEEKS = 2419200;
function _callAndParseAddressReturn(
address token_,
bytes4 selector_
) internal view returns (address) {
(bool success, bytes memory data) = token_.staticcall(
abi.encodeWithSelector(selector_)
);
if (!success || data.length == 0) {
return address(0);
}
if (data.length == 32) {
return abi.decode(data, (address));
}
return address(0);
}
function _getToken0(
address target_
) internal view returns (address targetToken0) {
targetToken0 = _callAndParseAddressReturn(
target_,
hex"0dfe1681"
);
return targetToken0;
}
function _getToken1(
address target_
) internal view returns (address targetToken1) {
targetToken1 = _callAndParseAddressReturn(
target_,
hex"d21220a7"
);
return targetToken1;
}
function _penaltyFor(
uint256 fromTimestamp_,
uint256 toTimestamp_
) internal pure returns (uint256 penaltyBasis) {
if (fromTimestamp_ + 52 weeks > toTimestamp_) {
uint256 fourWeeksElapsed = (toTimestamp_ - fromTimestamp_) /
_SECS_IN_FOUR_WEEKS;
if (fourWeeksElapsed < 13) {
penaltyBasis = (13 - fourWeeksElapsed) * 100;
}
}
return penaltyBasis;
}
}
contracts/openzeppelin/access/Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(msg.sender);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == msg.sender, "O:Caller not owner");
}
function renounceOwnership() external virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) external virtual onlyOwner {
require(newOwner != address(0), "O:0 address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
contracts/openzeppelin/security/Pausable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Pausable {
event Paused(address account);
event Unpaused(address account);
bool private _paused;
constructor() {
_paused = false;
}
modifier whenNotPaused() {
_requireNotPaused();
_;
}
modifier whenPaused() {
_requirePaused();
_;
}
function paused() public view virtual returns (bool) {
return _paused;
}
function _requireNotPaused() internal view virtual {
require(!paused(), "P:Paused");
}
function _requirePaused() internal view virtual {
require(paused(), "P:Not paused");
}
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(msg.sender);
}
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(msg.sender);
}
}
contracts/openzeppelin/token/ERC20/IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function totalSupply() external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
contracts/uniswap/v2-core/interfaces/IUniswapV2Factory.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
interface IUniswapV2Factory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
contracts/uniswap/v2-periphery/interfaces/IUniswapV2Router01.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WPLS() 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);
}
contracts/uniswap/v2-periphery/interfaces/IUniswapV2Router02.sol
/*
* SPDX-License-Identifier: MIT
*/
pragma solidity ^0.8.19;
import "./IUniswapV2Router01.sol";
interface IUniswapV2Router02 is IUniswapV2Router01 {
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
Compiler Settings
{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"optimizer":{"runs":1000000,"enabled":true},"libraries":{}}
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"oldBSKR_","internalType":"contract IBSKR"},{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"address","name":"growthAddress_","internalType":"address"},{"type":"address","name":"lbskrAddr_","internalType":"address"},{"type":"address[5]","name":"sisterOAs_","internalType":"address[5]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"airdrop","inputs":[{"type":"tuple[]","name":"receivers_","internalType":"struct BaseBSKR.Airdrop[]","components":[{"type":"address"},{"type":"uint256"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner_","internalType":"address"},{"type":"address","name":"spender_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender_","internalType":"address"},{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"wallet_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender_","internalType":"address"},{"type":"uint256","name":"subtractedValue_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender_","internalType":"address"},{"type":"uint256","name":"addedValue_","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"manager","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"migrate","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"migrateOwner","inputs":[{"type":"address","name":"wallet","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pauseContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"reclaimETH","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"reclaimToken","inputs":[{"type":"address","name":"token_","internalType":"contract IERC20"},{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyEnabled","inputs":[{"type":"bool","name":"enabled_","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"stakeTransfer","inputs":[{"type":"address","name":"from_","internalType":"address"},{"type":"address","name":"to_","internalType":"address"},{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to_","internalType":"address"},{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from_","internalType":"address"},{"type":"address","name":"to_","internalType":"address"},{"type":"uint256","name":"amount_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferManagement","inputs":[{"type":"address","name":"newManager_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unPauseContract","inputs":[]},{"type":"event","name":"AddLPEnabledUpdated","inputs":[{"type":"bool","name":"enabled","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","indexed":true},{"type":"address","name":"spender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"ManagementTransferred","inputs":[{"type":"address","name":"previousManager","indexed":true},{"type":"address","name":"newManager","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"type":"address","name":"account","indexed":false}],"anonymous":false},{"type":"event","name":"SwapAndLiquify","inputs":[{"type":"uint256","name":"tokensSwapped","indexed":false},{"type":"uint256","name":"ethReceived","indexed":false},{"type":"uint256","name":"tokensIntoLiqudity","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","indexed":true},{"type":"address","name":"to","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"type":"address","name":"account","indexed":false}],"anonymous":false},{"type":"receive"},{"type":"fallback"}]
Contract Creation Code
0x608060405260046012556017805460ff19166001179055620000316127106c0c9f2c9cd04674edea400000006200095c565b6001600160801b0316601a55620000586c0c9f2c9cd04674edea4000000060001962000985565b62000066906000196200099c565b601b556040805160608101825260c88152603260208201526101f4918101919091526200009890601d90600362000885565b50348015620000a657600080fd5b506040516200398238038062003982833981016040819052620000c99162000acf565b84848483620000d8336200074a565b6000805460ff60a01b19168155600180546001600160a01b031916339081179091556040519091907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85908290a3601062000133858262000c6b565b50601162000142848262000c6b565b50600480546001600160a01b0319166001600160a01b0384161790556200016d6006826005620008ce565b50600380546001600160a01b0319167398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000d37565b600280546001600160a01b0319166001600160a01b039283161790556003546040805163ef8ef56f60e01b81529051919092169163ef8ef56f9160048083019260209291908290030181865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000d37565b600560006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600d6000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000306001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505085601360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081601460006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b5460196000336001600160a01b03166001600160a01b03168152602001908152602001600020819055506c0c9f2c9cd04674edea400000006001600160801b0316600f6000336001600160a01b03166001600160a01b0316815260200190815260200160002081905550336001600160a01b031660006001600160a01b0316600080516020620039628339815191526c0c9f2c9cd04674edea400000006040516200048191906001600160801b0391909116815260200190565b60405180910390a36002546005546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620004de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000504919062000d37565b601580546001600160a01b0319166001600160a01b039290921691821790556200053290806000196200079a565b601580546001600160a01b039081166000908152600b60205260409020805460ff191660011790559054620005689116620007fb565b60005b6005811015620005f9576001600d60006006846005811062000591576200059162000d5e565b01546001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005e660068260058110620005d557620005d562000d5e565b01546001600160a01b0316620007fb565b620005f18162000d74565b90506200056b565b506200060533620007fb565b6200061030620007fb565b60155462000627906001600160a01b0316620007fb565b62000634610369620007fb565b6013546040516370a0823160e01b8152600060048201819052916001600160a01b0316906370a0823190602401602060405180830381865afa1580156200067f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a5919062000d90565b6103696000908152600f6020527fae12794d17f0f8d91a7af352510ec4a568a230a07a4208197af414971ed5914280549293508392909190620006ea90849062000daa565b9091555050336000908152600f602052604081208054839290620007109084906200099c565b9091555050604051818152610369903390600080516020620039628339815191529060200160405180910390a35050505050505062000dc0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038381166000818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03811660009081526018602052604090205460ff1662000882576001600160a01b0381166000818152601860205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b03191690911790555b50565b8260038101928215620008bc579160200282015b82811115620008bc578251829061ffff1690559160200191906001019062000899565b50620008ca92915062000919565b5090565b8260058101928215620008bc579160200282015b82811115620008bc57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620008e2565b5b80821115620008ca57600081556001016200091a565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160801b038381168062000979576200097962000930565b92169190910492915050565b60008262000997576200099762000930565b500690565b81810381811115620009b257620009b262000946565b92915050565b6001600160a01b03811681146200088257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171562000a095762000a09620009ce565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000a3a5762000a3a620009ce565b604052919050565b600082601f83011262000a5457600080fd5b81516001600160401b0381111562000a705762000a70620009ce565b602062000a86601f8301601f1916820162000a0f565b828152858284870101111562000a9b57600080fd5b60005b8381101562000abb57858101830151828201840152820162000a9e565b506000928101909101919091529392505050565b60008060008060008061014080888a03121562000aeb57600080fd5b875162000af881620009b8565b602089810151919850906001600160401b038082111562000b1857600080fd5b62000b268c838d0162000a42565b985060408b015191508082111562000b3d57600080fd5b5062000b4c8b828c0162000a42565b965050606089015162000b5f81620009b8565b60808a015190955062000b7281620009b8565b935060bf89018a1362000b8457600080fd5b62000b8e620009e4565b91890191808b84111562000ba157600080fd5b60a08b015b8481101562000bca57805162000bbc81620009b8565b835291830191830162000ba6565b50809450505050509295509295509295565b600181811c9082168062000bf157607f821691505b60208210810362000c1257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000c6657600081815260208120601f850160051c8101602086101562000c415750805b601f850160051c820191505b8181101562000c625782815560010162000c4d565b5050505b505050565b81516001600160401b0381111562000c875762000c87620009ce565b62000c9f8162000c98845462000bdc565b8462000c18565b602080601f83116001811462000cd7576000841562000cbe5750858301515b600019600386901b1c1916600185901b17855562000c62565b600085815260208120601f198616915b8281101562000d085788860151825594840194600190910190840162000ce7565b508582101562000d275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000d4a57600080fd5b815162000d5781620009b8565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000d895762000d8962000946565b5060010190565b60006020828403121562000da357600080fd5b5051919050565b80820180821115620009b257620009b262000946565b612b928062000dd06000396000f3fe6080604052600436106101985760003560e01c80636c74dd51116100e0578063a9059cbb11610084578063dd62ed3e11610061578063dd62ed3e1461048d578063e0c9ffc6146104e0578063e4edf85214610500578063f2fde38b1461052057005b8063a9059cbb14610438578063bac1520314610458578063c49b9a801461046d57005b80638da5cb5b116100bd5780638da5cb5b146103c35780638fd3ab80146103ee57806395d89b4114610403578063a457c2d71461041857005b80636c74dd511461036e57806370a082311461038e578063715018a6146103ae57005b8063313ce56711610147578063439766ce11610124578063439766ce146102ca578063481c6a75146102df5780635c975abb1461032b57806361ce35291461035b57005b8063313ce5671461026e578063395093511461028a57806342966c68146102aa57005b806318160ddd1161017557806318160ddd1461020457806323a12df21461022e57806323b872dd1461024e57005b806306fdde03146101a1578063095ea7b3146101cc5780630f144a48146101fc57005b3661019f57005b005b3480156101ad57600080fd5b506101b6610540565b6040516101c391906126e4565b60405180910390f35b3480156101d857600080fd5b506101ec6101e7366004612757565b6105d2565b60405190151581526020016101c3565b61019f6105ec565b34801561021057600080fd5b506c0c9f2c9cd04674edea400000005b6040519081526020016101c3565b34801561023a57600080fd5b5061019f610249366004612783565b610727565b34801561025a57600080fd5b506101ec6102693660046127a0565b61073b565b34801561027a57600080fd5b50604051601281526020016101c3565b34801561029657600080fd5b506101ec6102a5366004612757565b610821565b3480156102b657600080fd5b5061019f6102c53660046127e1565b61086d565b3480156102d657600080fd5b5061019f610910565b3480156102eb57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c3565b34801561033757600080fd5b5060005474010000000000000000000000000000000000000000900460ff166101ec565b61019f610369366004612757565b610922565b34801561037a57600080fd5b506101ec6103893660046127a0565b610af6565b34801561039a57600080fd5b506102206103a9366004612783565b610b6d565b3480156103ba57600080fd5b5061019f610c9a565b3480156103cf57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610306565b3480156103fa57600080fd5b5061019f610cac565b34801561040f57600080fd5b506101b6610d2f565b34801561042457600080fd5b506101ec610433366004612757565b610d3e565b34801561044457600080fd5b506101ec610453366004612757565b610df4565b34801561046457600080fd5b5061019f610e02565b34801561047957600080fd5b5061019f610488366004612808565b610e12565b34801561049957600080fd5b506102206104a8366004612825565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600e6020908152604080832093909416825291909152205490565b3480156104ec57600080fd5b5061019f6104fb36600461285e565b610e7f565b34801561050c57600080fd5b5061019f61051b366004612783565b610f75565b34801561052c57600080fd5b5061019f61053b366004612783565b61100b565b60606010805461054f906128d3565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906128d3565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b6000336105e0818585611099565b60019150505b92915050565b4780610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f42423a302042616c616e6365000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff9091169083908381818185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b5050905080610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f42423a53656e64204661696c65640000000000000000000000000000000000006044820152606401610650565b5050565b61072f611107565b610738816111a4565b50565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e602090815260408083203380855292528220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461080a57838110156107fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42423a496e73756666696369656e7420616c6c6f77616e6365000000000000006044820152606401610650565b61080a8683868403611099565b61081586868661135a565b50600195945050505050565b336000818152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105e09082908690610868908790612955565b611099565b336000908152600f60205260408120805483929061088c908490612968565b90915550506103696000908152600f6020527fae12794d17f0f8d91a7af352510ec4a568a230a07a4208197af414971ed5914280548392906108cf908490612955565b90915550506040518181526103699033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b6109186118c1565b610920611942565b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b3919061297b565b905080821115610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f42423a546f6f206d7563680000000000000000000000000000000000000000006044820152606401610650565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610a5a60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af1158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190612994565b50505050565b60145460009073ffffffffffffffffffffffffffffffffffffffff163314610b1d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260186020526040808220549286168252812054610b639287928792879260ff90811691166119bf565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526018602052604081205460ff1615610bc4575073ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b601b5473ffffffffffffffffffffffffffffffffffffffff83166000908152601960205260409020541115610c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f423a416d74206c617267650000000000000000000000000000000000000000006044820152606401610650565b6000610c5f611cbe565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260196020526040902054909150610c939082906129b1565b9392505050565b610ca2611107565b6109206000611eac565b336000908152600c602052604090205460ff1615610d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f423a416c7265616479206d6967726174656400000000000000000000000000006044820152606401610650565b610920336111a4565b60606011805461054f906128d3565b336000818152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42423a4465637265617365732062656c6f7720300000000000000000000000006044820152606401610650565b610de98286868403611099565b506001949350505050565b6000336105e081858561135a565b610e0a6118c1565b610920611f21565b610e1a6118c1565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f91c8e5d8409e58da1d940ede98e9b35e17b453932366ea0a790416ab922ca4129060200160405180910390a150565b610e87611107565b60005b81811015610f70576000838383818110610ea657610ea66129ec565b610ebc9260206040909202019081019150612783565b73ffffffffffffffffffffffffffffffffffffffff1614158015610efc5750828282818110610eed57610eed6129ec565b90506040020160200135600014155b15610f6057610f60838383818110610f1657610f166129ec565b610f2c9260206040909202019081019150612783565b848484818110610f3e57610f3e6129ec565b90506040020160200135670de0b6b3a7640000610f5b9190612a1b565b611f81565b610f6981612a32565b9050610e8a565b505050565b610f7d6118c1565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611013611107565b73ffffffffffffffffffffffffffffffffffffffff8116611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f3a3020616464726573730000000000000000000000000000000000000000006044820152606401610650565b61073881611eac565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361112760005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f3a43616c6c6572206e6f74206f776e657200000000000000000000000000006044820152606401610650565b6013546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906370a0823190602401602060405180830381865afa158015611215573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611239919061297b565b905080156112985761129861126360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601860205260408120548591859160019060ff166119bf565b806112a283610b6d565b101561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f423a4d69677261746520497373756500000000000000000000000000000000006044820152606401610650565b5073ffffffffffffffffffffffffffffffffffffffff166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61136383611fa3565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602052604090205460ff161561139a5761139a83612115565b6113a382611fa3565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b602052604090205460ff16156113da576113da82612115565b60006113e530610b6d565b9050601a5481101580156114015750601754610100900460ff16155b8015611428575060155473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611436575060175460ff165b156117a857601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055601a54600181901c9060009061147e908390612968565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106114b8576114b86129ec565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526005548251911690829060019081106114f6576114f66129ec565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061153b303086611099565b60035461156090309073ffffffffffffffffffffffffffffffffffffffff1686611099565b60035473ffffffffffffffffffffffffffffffffffffffff1663791ac947856000843061158e42600f612955565b6040518663ffffffff1660e01b81526004016115ae959493929190612a6a565b600060405180830381600087803b1580156115c857600080fd5b505af11580156115dc573d6000803e3d6000fd5b50505050600082476115ee9190612968565b60035490915061161690309073ffffffffffffffffffffffffffffffffffffffff1686611099565b60035473ffffffffffffffffffffffffffffffffffffffff1663f305d7198230876000806116426121eb565b61164d42600f612955565b60405160e089901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156116df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117049190612af5565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1612710611756610369610b6d565b61176d906c0c9f2c9cd04674edea40000000612968565b61177791906129b1565b601a555050601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d602052604090205460019060ff1680611804575073ffffffffffffffffffffffffffffffffffffffff84166000908152600d602052604090205460ff165b1561180d575060005b73ffffffffffffffffffffffffffffffffffffffff85166000908152600b602052604090205460ff16158015611869575073ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604090205460ff16155b15611872575060005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152601860205260408082205492871682529020546118ba91879187918791869160ff90811691166119bf565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d3a43616c6c6572206e6f74206d616e616765720000000000000000000000006044820152606401610650565b61194a612250565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b6119c7612250565b600a836119d2575060005b60006119de86836122d5565b90508315611a215773ffffffffffffffffffffffffffffffffffffffff88166000908152600f602052604081208054889290611a1b908490612968565b90915550505b60208082015173ffffffffffffffffffffffffffffffffffffffff8a166000908152601990925260408220805491929091611a5d908490612968565b90915550508215611aa557805173ffffffffffffffffffffffffffffffffffffffff88166000908152600f602052604081208054909190611a9f908490612955565b90915550505b60408082015173ffffffffffffffffffffffffffffffffffffffff891660009081526019602052918220805491929091611ae0908490612955565b909155505060608101518015611c615760a0820151601b8054829190600090611b0a908490612968565b9250508190555081601c6000828254611b239190612955565b90915550611b369050610369838361240e565b6040518281526103699073ffffffffffffffffffffffffffffffffffffffff8c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3608083015160c0840151600454611bb39073ffffffffffffffffffffffffffffffffffffffff16838361240e565b60045460405183815273ffffffffffffffffffffffffffffffffffffffff918216918e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611c1030838361240e565b604051828152309073ffffffffffffffffffffffffffffffffffffffff8e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505b815160405190815273ffffffffffffffffffffffffffffffffffffffff89811691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b601b546000906c0c9f2c9cd04674edea40000000825b601654811015611e5d57826019600060168481548110611cf657611cf66129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020541180611d7b575081600f600060168481548110611d4757611d476129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054115b15611da357601b54611d9b906c0c9f2c9cd04674edea40000000906129b1565b935050505090565b6019600060168381548110611dba57611dba6129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054611df69084612968565b9250600f600060168381548110611e0f57611e0f6129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054611e4b9083612968565b9150611e5681612a32565b9050611cd4565b50601b54611e79906c0c9f2c9cd04674edea40000000906129b1565b821015611ea257601b54611e9b906c0c9f2c9cd04674edea40000000906129b1565b9250505090565b611e9b81836129b1565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f296124b5565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020016119b5565b61072361126360005473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff163b600003611fc55750565b60035473ffffffffffffffffffffffffffffffffffffffff90811690821603611feb5750565b60055473ffffffffffffffffffffffffffffffffffffffff908116908216036120115750565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604090205460ff1661073857600061204982612539565b905073ffffffffffffffffffffffffffffffffffffffff811661206a575050565b600061207583612565565b905073ffffffffffffffffffffffffffffffffffffffff811661209757505050565b6120c283847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611099565b505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b73ffffffffffffffffffffffffffffffffffffffff811660009081526018602052604090205460ff166107385773ffffffffffffffffffffffffffffffffffffffff16600081815260186020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b60006121f960016005612968565b601254101561221857601254612210906001612955565b60125561221e565b60006012555b600660125460058110612233576122336129ec565b015473ffffffffffffffffffffffffffffffffffffffff16919050565b60005474010000000000000000000000000000000000000000900460ff1615610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f503a5061757365640000000000000000000000000000000000000000000000006044820152606401610650565b6122dd6126a2565b60006122e7611cbe565b90506122f38185612a1b565b602083015260008390036123185783825261230e8185612a1b565b6040830152612407565b600a83612710601d6000015461232e9088612a1b565b61233891906129b1565b6123429190612a1b565b61234c91906129b1565b6060830152601e54600a908490612710906123679088612a1b565b61237191906129b1565b61237b9190612a1b565b61238591906129b1565b6080830152601f54600a908490612710906123a09088612a1b565b6123aa91906129b1565b6123b49190612a1b565b6123be91906129b1565b6123c89085612968565b825260608201516123da908290612a1b565b60a083015260808201516123ef908290612a1b565b60c08301528151612401908290612a1b565b60408301525b5092915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526019602052604081208054839290612443908490612955565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526018602052604090205460ff1615610f705773ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040812080548492906124ab908490612955565b9091555050505050565b60005474010000000000000000000000000000000000000000900460ff16610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f503a4e6f742070617573656400000000000000000000000000000000000000006044820152606401610650565b60006105e6827f0dfe16810000000000000000000000000000000000000000000000000000000061258d565b60006105e6827fd21220a7000000000000000000000000000000000000000000000000000000005b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000851617905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8716916126109190612b23565b600060405180830381855afa9150503d806000811461264b576040519150601f19603f3d011682016040523d82523d6000602084013e612650565b606091505b509150915081158061266157508051155b15612671576000925050506105e6565b8051602003612697578080602001905181019061268e9190612b3f565b925050506105e6565b506000949350505050565b6040518060e001604052806007906020820280368337509192915050565b60005b838110156126db5781810151838201526020016126c3565b50506000910152565b60208152600082518060208401526127038160408501602087016126c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073857600080fd5b6000806040838503121561276a57600080fd5b823561277581612735565b946020939093013593505050565b60006020828403121561279557600080fd5b8135610c9381612735565b6000806000606084860312156127b557600080fd5b83356127c081612735565b925060208401356127d081612735565b929592945050506040919091013590565b6000602082840312156127f357600080fd5b5035919050565b801515811461073857600080fd5b60006020828403121561281a57600080fd5b8135610c93816127fa565b6000806040838503121561283857600080fd5b823561284381612735565b9150602083013561285381612735565b809150509250929050565b6000806020838503121561287157600080fd5b823567ffffffffffffffff8082111561288957600080fd5b818501915085601f83011261289d57600080fd5b8135818111156128ac57600080fd5b8660208260061b85010111156128c157600080fd5b60209290920196919550909350505050565b600181811c908216806128e757607f821691505b602082108103612920577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105e6576105e6612926565b818103818111156105e6576105e6612926565b60006020828403121561298d57600080fd5b5051919050565b6000602082840312156129a657600080fd5b8151610c93816127fa565b6000826129e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176105e6576105e6612926565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6357612a63612926565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ac757845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612a95565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080600060608486031215612b0a57600080fd5b8351925060208401519150604084015190509250925092565b60008251612b358184602087016126c0565b9190910192915050565b600060208284031215612b5157600080fd5b8151610c938161273556fea2646970667358221220658b77126ab740e754080ff0b8ccc21075ebf35b78f4077cd5ebe226ee6b6cc664736f6c63430008130033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000019ea5fa4d1dbd7413752b93f856b1cd165f2f21900000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000fb7103d7011dfa60c18c6961c5a38038d8048fe0000000000000000000000000d493b22ac1e70c0da743b0c61311aeea4f817eef00000000000000000000000035cef302da66733c076c10f85fc8097dce90bcc00000000000000000000000001988d578de9a3468329de348e5a0e6cdc4369df9000000000000000000000000cd75d401a91b076f274418c7fa6a973d7fb7fece00000000000000000000000053e011d48f0164a3d58fb8591060e7b05e7448180000000000000000000000007d6e237a514fbe12c65c3aa72525f61aa6a722d200000000000000000000000000000000000000000000000000000000000000177042534b52202d2070756c73656c6f7269616e2e636f6d00000000000000000000000000000000000000000000000000000000000000000000000000000000057042534b52000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x6080604052600436106101985760003560e01c80636c74dd51116100e0578063a9059cbb11610084578063dd62ed3e11610061578063dd62ed3e1461048d578063e0c9ffc6146104e0578063e4edf85214610500578063f2fde38b1461052057005b8063a9059cbb14610438578063bac1520314610458578063c49b9a801461046d57005b80638da5cb5b116100bd5780638da5cb5b146103c35780638fd3ab80146103ee57806395d89b4114610403578063a457c2d71461041857005b80636c74dd511461036e57806370a082311461038e578063715018a6146103ae57005b8063313ce56711610147578063439766ce11610124578063439766ce146102ca578063481c6a75146102df5780635c975abb1461032b57806361ce35291461035b57005b8063313ce5671461026e578063395093511461028a57806342966c68146102aa57005b806318160ddd1161017557806318160ddd1461020457806323a12df21461022e57806323b872dd1461024e57005b806306fdde03146101a1578063095ea7b3146101cc5780630f144a48146101fc57005b3661019f57005b005b3480156101ad57600080fd5b506101b6610540565b6040516101c391906126e4565b60405180910390f35b3480156101d857600080fd5b506101ec6101e7366004612757565b6105d2565b60405190151581526020016101c3565b61019f6105ec565b34801561021057600080fd5b506c0c9f2c9cd04674edea400000005b6040519081526020016101c3565b34801561023a57600080fd5b5061019f610249366004612783565b610727565b34801561025a57600080fd5b506101ec6102693660046127a0565b61073b565b34801561027a57600080fd5b50604051601281526020016101c3565b34801561029657600080fd5b506101ec6102a5366004612757565b610821565b3480156102b657600080fd5b5061019f6102c53660046127e1565b61086d565b3480156102d657600080fd5b5061019f610910565b3480156102eb57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c3565b34801561033757600080fd5b5060005474010000000000000000000000000000000000000000900460ff166101ec565b61019f610369366004612757565b610922565b34801561037a57600080fd5b506101ec6103893660046127a0565b610af6565b34801561039a57600080fd5b506102206103a9366004612783565b610b6d565b3480156103ba57600080fd5b5061019f610c9a565b3480156103cf57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610306565b3480156103fa57600080fd5b5061019f610cac565b34801561040f57600080fd5b506101b6610d2f565b34801561042457600080fd5b506101ec610433366004612757565b610d3e565b34801561044457600080fd5b506101ec610453366004612757565b610df4565b34801561046457600080fd5b5061019f610e02565b34801561047957600080fd5b5061019f610488366004612808565b610e12565b34801561049957600080fd5b506102206104a8366004612825565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600e6020908152604080832093909416825291909152205490565b3480156104ec57600080fd5b5061019f6104fb36600461285e565b610e7f565b34801561050c57600080fd5b5061019f61051b366004612783565b610f75565b34801561052c57600080fd5b5061019f61053b366004612783565b61100b565b60606010805461054f906128d3565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906128d3565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b6000336105e0818585611099565b60019150505b92915050565b4780610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f42423a302042616c616e6365000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff9091169083908381818185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b5050905080610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f42423a53656e64204661696c65640000000000000000000000000000000000006044820152606401610650565b5050565b61072f611107565b610738816111a4565b50565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e602090815260408083203380855292528220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461080a57838110156107fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42423a496e73756666696369656e7420616c6c6f77616e6365000000000000006044820152606401610650565b61080a8683868403611099565b61081586868661135a565b50600195945050505050565b336000818152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105e09082908690610868908790612955565b611099565b336000908152600f60205260408120805483929061088c908490612968565b90915550506103696000908152600f6020527fae12794d17f0f8d91a7af352510ec4a568a230a07a4208197af414971ed5914280548392906108cf908490612955565b90915550506040518181526103699033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b6109186118c1565b610920611942565b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b3919061297b565b905080821115610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f42423a546f6f206d7563680000000000000000000000000000000000000000006044820152606401610650565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610a5a60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af1158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190612994565b50505050565b60145460009073ffffffffffffffffffffffffffffffffffffffff163314610b1d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260186020526040808220549286168252812054610b639287928792879260ff90811691166119bf565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526018602052604081205460ff1615610bc4575073ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b601b5473ffffffffffffffffffffffffffffffffffffffff83166000908152601960205260409020541115610c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f423a416d74206c617267650000000000000000000000000000000000000000006044820152606401610650565b6000610c5f611cbe565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260196020526040902054909150610c939082906129b1565b9392505050565b610ca2611107565b6109206000611eac565b336000908152600c602052604090205460ff1615610d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f423a416c7265616479206d6967726174656400000000000000000000000000006044820152606401610650565b610920336111a4565b60606011805461054f906128d3565b336000818152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42423a4465637265617365732062656c6f7720300000000000000000000000006044820152606401610650565b610de98286868403611099565b506001949350505050565b6000336105e081858561135a565b610e0a6118c1565b610920611f21565b610e1a6118c1565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f91c8e5d8409e58da1d940ede98e9b35e17b453932366ea0a790416ab922ca4129060200160405180910390a150565b610e87611107565b60005b81811015610f70576000838383818110610ea657610ea66129ec565b610ebc9260206040909202019081019150612783565b73ffffffffffffffffffffffffffffffffffffffff1614158015610efc5750828282818110610eed57610eed6129ec565b90506040020160200135600014155b15610f6057610f60838383818110610f1657610f166129ec565b610f2c9260206040909202019081019150612783565b848484818110610f3e57610f3e6129ec565b90506040020160200135670de0b6b3a7640000610f5b9190612a1b565b611f81565b610f6981612a32565b9050610e8a565b505050565b610f7d6118c1565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611013611107565b73ffffffffffffffffffffffffffffffffffffffff8116611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f3a3020616464726573730000000000000000000000000000000000000000006044820152606401610650565b61073881611eac565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361112760005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f3a43616c6c6572206e6f74206f776e657200000000000000000000000000006044820152606401610650565b6013546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906370a0823190602401602060405180830381865afa158015611215573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611239919061297b565b905080156112985761129861126360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601860205260408120548591859160019060ff166119bf565b806112a283610b6d565b101561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f423a4d69677261746520497373756500000000000000000000000000000000006044820152606401610650565b5073ffffffffffffffffffffffffffffffffffffffff166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61136383611fa3565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602052604090205460ff161561139a5761139a83612115565b6113a382611fa3565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b602052604090205460ff16156113da576113da82612115565b60006113e530610b6d565b9050601a5481101580156114015750601754610100900460ff16155b8015611428575060155473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611436575060175460ff165b156117a857601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055601a54600181901c9060009061147e908390612968565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106114b8576114b86129ec565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526005548251911690829060019081106114f6576114f66129ec565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061153b303086611099565b60035461156090309073ffffffffffffffffffffffffffffffffffffffff1686611099565b60035473ffffffffffffffffffffffffffffffffffffffff1663791ac947856000843061158e42600f612955565b6040518663ffffffff1660e01b81526004016115ae959493929190612a6a565b600060405180830381600087803b1580156115c857600080fd5b505af11580156115dc573d6000803e3d6000fd5b50505050600082476115ee9190612968565b60035490915061161690309073ffffffffffffffffffffffffffffffffffffffff1686611099565b60035473ffffffffffffffffffffffffffffffffffffffff1663f305d7198230876000806116426121eb565b61164d42600f612955565b60405160e089901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156116df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117049190612af5565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1612710611756610369610b6d565b61176d906c0c9f2c9cd04674edea40000000612968565b61177791906129b1565b601a555050601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d602052604090205460019060ff1680611804575073ffffffffffffffffffffffffffffffffffffffff84166000908152600d602052604090205460ff165b1561180d575060005b73ffffffffffffffffffffffffffffffffffffffff85166000908152600b602052604090205460ff16158015611869575073ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604090205460ff16155b15611872575060005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152601860205260408082205492871682529020546118ba91879187918791869160ff90811691166119bf565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d3a43616c6c6572206e6f74206d616e616765720000000000000000000000006044820152606401610650565b61194a612250565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b6119c7612250565b600a836119d2575060005b60006119de86836122d5565b90508315611a215773ffffffffffffffffffffffffffffffffffffffff88166000908152600f602052604081208054889290611a1b908490612968565b90915550505b60208082015173ffffffffffffffffffffffffffffffffffffffff8a166000908152601990925260408220805491929091611a5d908490612968565b90915550508215611aa557805173ffffffffffffffffffffffffffffffffffffffff88166000908152600f602052604081208054909190611a9f908490612955565b90915550505b60408082015173ffffffffffffffffffffffffffffffffffffffff891660009081526019602052918220805491929091611ae0908490612955565b909155505060608101518015611c615760a0820151601b8054829190600090611b0a908490612968565b9250508190555081601c6000828254611b239190612955565b90915550611b369050610369838361240e565b6040518281526103699073ffffffffffffffffffffffffffffffffffffffff8c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3608083015160c0840151600454611bb39073ffffffffffffffffffffffffffffffffffffffff16838361240e565b60045460405183815273ffffffffffffffffffffffffffffffffffffffff918216918e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611c1030838361240e565b604051828152309073ffffffffffffffffffffffffffffffffffffffff8e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505b815160405190815273ffffffffffffffffffffffffffffffffffffffff89811691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b601b546000906c0c9f2c9cd04674edea40000000825b601654811015611e5d57826019600060168481548110611cf657611cf66129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020541180611d7b575081600f600060168481548110611d4757611d476129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054115b15611da357601b54611d9b906c0c9f2c9cd04674edea40000000906129b1565b935050505090565b6019600060168381548110611dba57611dba6129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054611df69084612968565b9250600f600060168381548110611e0f57611e0f6129ec565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054611e4b9083612968565b9150611e5681612a32565b9050611cd4565b50601b54611e79906c0c9f2c9cd04674edea40000000906129b1565b821015611ea257601b54611e9b906c0c9f2c9cd04674edea40000000906129b1565b9250505090565b611e9b81836129b1565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f296124b5565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020016119b5565b61072361126360005473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff163b600003611fc55750565b60035473ffffffffffffffffffffffffffffffffffffffff90811690821603611feb5750565b60055473ffffffffffffffffffffffffffffffffffffffff908116908216036120115750565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604090205460ff1661073857600061204982612539565b905073ffffffffffffffffffffffffffffffffffffffff811661206a575050565b600061207583612565565b905073ffffffffffffffffffffffffffffffffffffffff811661209757505050565b6120c283847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611099565b505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b73ffffffffffffffffffffffffffffffffffffffff811660009081526018602052604090205460ff166107385773ffffffffffffffffffffffffffffffffffffffff16600081815260186020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b60006121f960016005612968565b601254101561221857601254612210906001612955565b60125561221e565b60006012555b600660125460058110612233576122336129ec565b015473ffffffffffffffffffffffffffffffffffffffff16919050565b60005474010000000000000000000000000000000000000000900460ff1615610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f503a5061757365640000000000000000000000000000000000000000000000006044820152606401610650565b6122dd6126a2565b60006122e7611cbe565b90506122f38185612a1b565b602083015260008390036123185783825261230e8185612a1b565b6040830152612407565b600a83612710601d6000015461232e9088612a1b565b61233891906129b1565b6123429190612a1b565b61234c91906129b1565b6060830152601e54600a908490612710906123679088612a1b565b61237191906129b1565b61237b9190612a1b565b61238591906129b1565b6080830152601f54600a908490612710906123a09088612a1b565b6123aa91906129b1565b6123b49190612a1b565b6123be91906129b1565b6123c89085612968565b825260608201516123da908290612a1b565b60a083015260808201516123ef908290612a1b565b60c08301528151612401908290612a1b565b60408301525b5092915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526019602052604081208054839290612443908490612955565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526018602052604090205460ff1615610f705773ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040812080548492906124ab908490612955565b9091555050505050565b60005474010000000000000000000000000000000000000000900460ff16610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f503a4e6f742070617573656400000000000000000000000000000000000000006044820152606401610650565b60006105e6827f0dfe16810000000000000000000000000000000000000000000000000000000061258d565b60006105e6827fd21220a7000000000000000000000000000000000000000000000000000000005b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000851617905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8716916126109190612b23565b600060405180830381855afa9150503d806000811461264b576040519150601f19603f3d011682016040523d82523d6000602084013e612650565b606091505b509150915081158061266157508051155b15612671576000925050506105e6565b8051602003612697578080602001905181019061268e9190612b3f565b925050506105e6565b506000949350505050565b6040518060e001604052806007906020820280368337509192915050565b60005b838110156126db5781810151838201526020016126c3565b50506000910152565b60208152600082518060208401526127038160408501602087016126c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073857600080fd5b6000806040838503121561276a57600080fd5b823561277581612735565b946020939093013593505050565b60006020828403121561279557600080fd5b8135610c9381612735565b6000806000606084860312156127b557600080fd5b83356127c081612735565b925060208401356127d081612735565b929592945050506040919091013590565b6000602082840312156127f357600080fd5b5035919050565b801515811461073857600080fd5b60006020828403121561281a57600080fd5b8135610c93816127fa565b6000806040838503121561283857600080fd5b823561284381612735565b9150602083013561285381612735565b809150509250929050565b6000806020838503121561287157600080fd5b823567ffffffffffffffff8082111561288957600080fd5b818501915085601f83011261289d57600080fd5b8135818111156128ac57600080fd5b8660208260061b85010111156128c157600080fd5b60209290920196919550909350505050565b600181811c908216806128e757607f821691505b602082108103612920577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105e6576105e6612926565b818103818111156105e6576105e6612926565b60006020828403121561298d57600080fd5b5051919050565b6000602082840312156129a657600080fd5b8151610c93816127fa565b6000826129e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176105e6576105e6612926565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6357612a63612926565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ac757845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612a95565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080600060608486031215612b0a57600080fd5b8351925060208401519150604084015190509250925092565b60008251612b358184602087016126c0565b9190910192915050565b600060208284031215612b5157600080fd5b8151610c938161273556fea2646970667358221220658b77126ab740e754080ff0b8ccc21075ebf35b78f4077cd5ebe226ee6b6cc664736f6c63430008130033