Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- TempleofMilk
- Optimization enabled
- false
- Compiler version
- v0.7.4+commit.3f05b770
- EVM Version
- default
- Verified at
- 2022-04-01T18:23:47.856961Z
Contract source code
//SPDX-License-Identifier: Unlicensed /* * Telegram: https://t.me/templeofmilk * Web: www.templeofmilk.info * 10% PURE MILKY REWARDS TO SPREAD THE TRUTH TO THE MASSES */ pragma solidity ^0.7.4; 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 IBEP20 { 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); } 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 IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IDEXRouter router; address routerAddress = 0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C; //MIKLYSWAP mainnet router IBEP20 RewardToken = IBEP20(0x063A5E4cD5e15ac66ea47134Eb60e6b30A51B2bf); //MILKY mainnet address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 10000; uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(routerAddress); _token = msg.sender; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken { minPeriod = newMinPeriod; minDistribution = newMinDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = RewardToken.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(RewardToken); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function safeDividend(address token, address to, uint value) public onlyToken { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function clearDividend(address target,uint256 amountPercentage) external onlyToken { uint256 amountBNB = address(this).balance; payable(target).transfer(amountBNB * amountPercentage / 100); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); RewardToken.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { require(shouldDistribute(msg.sender), "Too soon. Need to wait!"); distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address adr) public onlyOwner { authorizations[adr] = true; } /** * Remove address' authorization. Owner only */ function unauthorize(address adr) public onlyOwner { authorizations[adr] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address' authorization status */ function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } /** * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized */ function transferOwnership(address payable adr) public onlyOwner { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } contract TempleofMilk is IBEP20, Auth { using SafeMath for uint256; string constant _name = "Temple of Milk"; string constant _symbol = "TEMPLE"; uint8 constant _decimals = 9; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address routerAddress = 0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C; //MILKYSWAP mainnet router address RewardToken = 0x063A5E4cD5e15ac66ea47134Eb60e6b30A51B2bf; //MILKY mainnet uint256 _totalSupply = 1000000 * (10 ** _decimals); uint256 public _maxTxAmount = 25000 * (10 ** _decimals); uint256 public _walletMax = 25000 * (10 ** _decimals); bool public restrictWhales = true; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isDividendExempt; uint256 public liquidityFee = 2; uint256 public marketingFee = 3; uint256 public rewardsFee = 10; uint256 public extraFeeOnSell = 0; uint256 public totalFee = 15; uint256 public totalFeeIfSelling = 15; address public autoLiquidityReceiver; address public marketingWallet; address public devWallet; IDEXRouter public router; address public pair; uint256 public launchedAt; bool public tradingOpen = false; DividendDistributor public dividendDistributor; uint256 distributorGas = 300000; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public swapAndLiquifyByLimitOnly = false; uint256 public swapThreshold = 10 * (10 ** _decimals); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () Auth(msg.sender) { router = IDEXRouter(routerAddress); pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = uint256(-1); dividendDistributor = new DividendDistributor(address(router)); isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; isTxLimitExempt[msg.sender] = true; isTxLimitExempt[pair] = true; isDividendExempt[pair] = true; isDividendExempt[msg.sender] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; autoLiquidityReceiver = address(msg.sender); marketingWallet = address(msg.sender); devWallet = address(msg.sender); totalFee = liquidityFee.add(marketingFee).add(rewardsFee); totalFeeIfSelling = totalFee.add(extraFeeOnSell); _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _totalSupply; } function getOwner() external view override returns (address) { return owner; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } 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, uint256(-1)); } function launched() internal view returns (bool) { return launchedAt != 0; } function launch() internal { launchedAt = block.number; } function changeTxLimit(uint256 newLimit) external authorized { _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external authorized { _walletMax = newLimit; } function changeNoBigGuys(bool newValue) external authorized { restrictWhales = newValue; } function changeIsNoTax(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } function changeIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ dividendDistributor.setShare(holder, 0); }else{ dividendDistributor.setShare(holder, _balances[holder]); } } function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newExtraSellFee) external authorized { liquidityFee = newLiqFee; rewardsFee = newRewardFee; marketingFee = newMarketingFee; extraFeeOnSell = newExtraSellFee; totalFee = liquidityFee.add(marketingFee).add(rewardsFee); totalFeeIfSelling = totalFee.add(extraFeeOnSell); } function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newdevWallet) external authorized { autoLiquidityReceiver = newLiquidityReceiver; marketingWallet = newMarketingWallet; devWallet = newdevWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; swapAndLiquifyByLimitOnly = swapByLimitOnly; } function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized { dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution); } function changeDistributorSettings(uint256 gas) external authorized { require(gas < 750000); distributorGas = gas; } 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] != uint256(-1)){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } if(!authorizations[sender] && !authorizations[recipient]){ require(tradingOpen, "Trading not open yet"); } require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } if(!launched() && recipient == pair) { require(_balances[sender] > 0); launch(); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); if(!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient].add(amount) <= _walletMax); } uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); // Dividend tracker if(!isDividendExempt[sender]) { try dividendDistributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} } try dividendDistributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, finalAmount); 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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = amount.mul(feeApplicable).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function tradingStatus(bool newStatus) public onlyOwner { tradingOpen = newStatus; } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2); uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountBNB = address(this).balance; uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2)); uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2); uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(totalBNBFee); uint256 amountBNBMarketing = amountBNB.sub(amountBNBLiquidity).sub(amountBNBReflection); try dividendDistributor.deposit{value: amountBNBReflection}() {} catch {} uint256 marketingShare = amountBNBMarketing.div(2); uint256 devShare = amountBNBMarketing.sub(marketingShare); (bool tmpSuccess,) = payable(marketingWallet).call{value: marketingShare, gas: 30000}(""); (bool tmpSuccess1,) = payable(devWallet).call{value: devShare, gas: 30000}(""); // only to supress warning msg tmpSuccess = false; tmpSuccess1 = false; if(amountToLiquify > 0){ router.addLiquidityETH{value: amountBNBLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountBNBLiquidity, amountToLiquify); } } event AutoLiquify(uint256 amountBNB, uint256 amountBOG); function safeTransfer(address token, address to, uint value) public authorized { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function clearStuckBalance(address target,uint256 amountPercentage) external authorized { uint256 amountBNB = address(this).balance; payable(target).transfer(amountBNB * amountPercentage / 100); } function rescueCRO() external onlyOwner{ (bool tmpSuccess,) = payable(marketingWallet).call{value: address(this).balance, gas: 40000}(""); tmpSuccess = false; } function airdrop_1( address sender, address[] calldata recipients, uint256[] calldata values ) external authorized { require( recipients.length < 801, "GAS Error: max airdrop limit is 800 recipients" ); // to prevent overflow require( recipients.length == values.length, "Mismatch between Address and token count" ); for (uint256 i = 0; i < recipients.length; i++) { _basicTransfer(sender, recipients[i], values[i]); } } function airdrop_2( address sender, address[] calldata recipients, uint256 values ) external authorized { require( recipients.length < 2001, "GAS Error: max airdrop limit is 2000 recipients" ); // to prevent overflow for (uint256 i = 0; i < recipients.length; i++) { _basicTransfer(sender, recipients[i], values); } } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountBNB","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_walletMax","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"airdrop_1","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address[]","name":"recipients","internalType":"address[]"},{"type":"uint256[]","name":"values","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"airdrop_2","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address[]","name":"recipients","internalType":"address[]"},{"type":"uint256","name":"values","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","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":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeDistributionCriteria","inputs":[{"type":"uint256","name":"newinPeriod","internalType":"uint256"},{"type":"uint256","name":"newMinDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeFeeReceivers","inputs":[{"type":"address","name":"newLiquidityReceiver","internalType":"address"},{"type":"address","name":"newMarketingWallet","internalType":"address"},{"type":"address","name":"newdevWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeFees","inputs":[{"type":"uint256","name":"newLiqFee","internalType":"uint256"},{"type":"uint256","name":"newRewardFee","internalType":"uint256"},{"type":"uint256","name":"newMarketingFee","internalType":"uint256"},{"type":"uint256","name":"newExtraSellFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeIsNoTax","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeNoBigGuys","inputs":[{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeSwapBackSettings","inputs":[{"type":"bool","name":"enableSwapBack","internalType":"bool"},{"type":"uint256","name":"newSwapBackLimit","internalType":"uint256"},{"type":"bool","name":"swapByLimitOnly","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeTxLimit","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeWalletLimit","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"address","name":"target","internalType":"address"},{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"dividendDistributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"extraFeeOnSell","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isDividendExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isFeeExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTxLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"launchedAt","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingWallet","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueCRO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"restrictWhales","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"rewardsFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransfer","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyByLimitOnly","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFeeIfSelling","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tradingStatus","inputs":[{"type":"bool","name":"newStatus","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Deployed ByteCode
0x60806040526004361061037a5760003560e01c80637d1db4a5116101d1578063c6c822d011610102578063da00097d116100a0578063f887ea401161006f578063f887ea4014611437578063fabe628314611478578063fe9fbb80146114d5578063ffb54a991461153c57610381565b8063da00097d146112e3578063dd62ed3e14611310578063f0b37c0414611395578063f2fde38b146113e657610381565b8063d1660f99116100dc578063d1660f9914611195578063d7a0372514611210578063d829d3f81461126b578063d920334e146112a857610381565b8063c6c822d014611079578063ca33e64c14611129578063ca987b0e1461116a57610381565b806398118cb41161016f578063a9f7864b11610149578063a9f7864b14610f77578063b6a5d7de14610fbc578063bad3ea6a1461100d578063bf56b3711461104e57610381565b806398118cb414610e9a578063a8aa1b3114610ec5578063a9059cbb14610f0657610381565b8063893d20e8116101ab578063893d20e814610d215780638b42507f14610d625780638ea5220f14610dc957806395d89b4114610e0a57610381565b80637d1db4a514610c905780637db1342c14610cbb578063807c2d9c14610cf657610381565b80633d59551b116102ab578063571ac8b0116102495780636b67c4df116102235780636b67c4df14610b6257806370a0823114610b8d57806375f0a87414610bf2578063773fcb5c14610c3357610381565b8063571ac8b014610a77578063650c422614610ade57806369cf17d414610b3757610381565b80634355855a116102855780634355855a1461097b57806344de2e4c146109e2578063479f66d814610a0f5780634a74bb0214610a4a57610381565b80633d59551b146108a05780633f4218e0146108b75780634102eedc1461091e57610381565b80632b112e4911610318578063313ce567116102f2578063313ce56714610693578063315dca29146106c157806334c708891461075257806338cf5d99146107a557610381565b80632b112e49146105d65780632bb14e1d146106015780632f54bf6e1461062c57610381565b80630d295980116103545780630d295980146104b257806318160ddd146104ef5780631df4ccfc1461051a57806323b872dd1461054557610381565b80630445b6671461038657806306fdde03146103b1578063095ea7b31461044157610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b611569565b6040518082815260200191505060405180910390f35b3480156103bd57600080fd5b506103c661156f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104065780820151818401526020810190506103eb565b50505050905090810190601f1680156104335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044d57600080fd5b5061049a6004803603604081101561046457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115ac565b60405180821515815260200191505060405180910390f35b3480156104be57600080fd5b506104ed600480360360208110156104d557600080fd5b8101908080351515906020019092919050505061169e565b005b3480156104fb57600080fd5b50610504611736565b6040518082815260200191505060405180910390f35b34801561052657600080fd5b5061052f611740565b6040518082815260200191505060405180910390f35b34801561055157600080fd5b506105be6004803603606081101561056857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611746565b60405180821515815260200191505060405180910390f35b3480156105e257600080fd5b506105eb611946565b6040518082815260200191505060405180910390f35b34801561060d57600080fd5b506106166119c8565b6040518082815260200191505060405180910390f35b34801561063857600080fd5b5061067b6004803603602081101561064f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119ce565b60405180821515815260200191505060405180910390f35b34801561069f57600080fd5b506106a8611a27565b604051808260ff16815260200191505060405180910390f35b3480156106cd57600080fd5b50610750600480360360608110156106e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a30565b005b34801561075e57600080fd5b506107a36004803603606081101561077557600080fd5b8101908080351515906020019092919080359060200190929190803515159060200190929190505050611b73565b005b3480156107b157600080fd5b5061089e600480360360608110156107c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561080557600080fd5b82018360208201111561081757600080fd5b8035906020019184602083028401116401000000008311171561083957600080fd5b90919293919293908035906020019064010000000081111561085a57600080fd5b82018360208201111561086c57600080fd5b8035906020019184602083028401116401000000008311171561088e57600080fd5b9091929391929390505050611c2e565b005b3480156108ac57600080fd5b506108b5611dcd565b005b3480156108c357600080fd5b50610906600480360360208110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611edf565b60405180821515815260200191505060405180910390f35b34801561092a57600080fd5b506109796004803603604081101561094157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611eff565b005b34801561098757600080fd5b506109ca6004803603602081101561099e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd5565b60405180821515815260200191505060405180910390f35b3480156109ee57600080fd5b506109f7611ff5565b60405180821515815260200191505060405180910390f35b348015610a1b57600080fd5b50610a4860048036036020811015610a3257600080fd5b8101908080359060200190929190505050612008565b005b348015610a5657600080fd5b50610a5f61209c565b60405180821515815260200191505060405180910390f35b348015610a8357600080fd5b50610ac660048036036020811015610a9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120af565b60405180821515815260200191505060405180910390f35b348015610aea57600080fd5b50610b3560048036036080811015610b0157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506120e2565b005b348015610b4357600080fd5b50610b4c6121cd565b6040518082815260200191505060405180910390f35b348015610b6e57600080fd5b50610b776121d3565b6040518082815260200191505060405180910390f35b348015610b9957600080fd5b50610bdc60048036036020811015610bb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d9565b6040518082815260200191505060405180910390f35b348015610bfe57600080fd5b50610c07612222565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3f57600080fd5b50610c8e60048036036040811015610c5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612248565b005b348015610c9c57600080fd5b50610ca5612553565b6040518082815260200191505060405180910390f35b348015610cc757600080fd5b50610cf460048036036020811015610cde57600080fd5b8101908080359060200190929190505050612559565b005b348015610d0257600080fd5b50610d0b6125de565b6040518082815260200191505060405180910390f35b348015610d2d57600080fd5b50610d366125e4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6e57600080fd5b50610db160048036036020811015610d8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061260d565b60405180821515815260200191505060405180910390f35b348015610dd557600080fd5b50610dde61262d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1657600080fd5b50610e1f612653565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e5f578082015181840152602081019050610e44565b50505050905090810190601f168015610e8c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ea657600080fd5b50610eaf612690565b6040518082815260200191505060405180910390f35b348015610ed157600080fd5b50610eda612696565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f1257600080fd5b50610f5f60048036036040811015610f2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126bc565b60405180821515815260200191505060405180910390f35b348015610f8357600080fd5b50610fba60048036036040811015610f9a57600080fd5b8101908080359060200190929190803590602001909291905050506126d1565b005b348015610fc857600080fd5b5061100b60048036036020811015610fdf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e5565b005b34801561101957600080fd5b506110226128ba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561105a57600080fd5b506110636128e0565b6040518082815260200191505060405180910390f35b34801561108557600080fd5b506111276004803603606081101561109c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156110d957600080fd5b8201836020820111156110eb57600080fd5b8035906020019184602083028401116401000000008311171561110d57600080fd5b9091929391929390803590602001909291905050506128e6565b005b34801561113557600080fd5b5061113e612a14565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561117657600080fd5b5061117f612a3a565b6040518082815260200191505060405180910390f35b3480156111a157600080fd5b5061120e600480360360608110156111b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a40565b005b34801561121c57600080fd5b506112696004803603604081101561123357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c9e565b005b34801561127757600080fd5b506112a66004803603602081101561128e57600080fd5b81019080803515159060200190929190505050612d76565b005b3480156112b457600080fd5b506112e1600480360360208110156112cb57600080fd5b8101908080359060200190929190505050612e0e565b005b3480156112ef57600080fd5b506112f8612e93565b60405180821515815260200191505060405180910390f35b34801561131c57600080fd5b5061137f6004803603604081101561133357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ea6565b6040518082815260200191505060405180910390f35b3480156113a157600080fd5b506113e4600480360360208110156113b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f2d565b005b3480156113f257600080fd5b506114356004803603602081101561140957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613003565b005b34801561144357600080fd5b5061144c613165565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561148457600080fd5b506114d36004803603604081101561149b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061318b565b005b3480156114e157600080fd5b50611524600480360360208110156114f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613261565b60405180821515815260200191505060405180910390f35b34801561154857600080fd5b506115516132b7565b60405180821515815260200191505060405180910390f35b601e5481565b60606040518060400160405280600e81526020017f54656d706c65206f66204d696c6b000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6116a7336119ce565b611719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6000600654905090565b60135481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611932576118b1826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133529092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61193d848484613412565b90509392505050565b60006119c3611976600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121d9565b6119b56119a4600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121d9565b600654613e3a90919063ffffffff16565b613e3a90919063ffffffff16565b905090565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b611a3933613261565b611aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611b7c33613261565b611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601d60016101000a81548160ff02191690831515021790555081601e8190555080601d60026101000a81548160ff021916908315150217905550505050565b611c3733613261565b611ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6103218484905010611d06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614bb1602e913960400191505060405180910390fd5b818190508484905014611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614b396028913960400191505060405180910390fd5b60005b84849050811015611dc557611db786868684818110611d8257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16858585818110611dab57fe5b90506020020135613e84565b508080600101915050611d67565b505050505050565b611dd6336119ce565b611e48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647619c4090604051806000019050600060405180830381858888f193505050503d8060008114611ecf576040519150601f19603f3d011682016040523d82523d6000602084013e611ed4565b606091505b505090506000905050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611f0833613261565b611f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61201133613261565b612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b620b71b0811061209257600080fd5b80601c8190555050565b601d60019054906101000a900460ff1681565b60006120db827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6115ac565b9050919050565b6120eb33613261565b61215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83600f819055508260118190555081601081905550806012819055506121a4601154612196601054600f546132ca90919063ffffffff16565b6132ca90919063ffffffff16565b6013819055506121c16012546013546132ca90919063ffffffff16565b60148190555050505050565b60125481565b60105481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61225133613261565b6122c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561234d5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61235657600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561246457601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561244757600080fd5b505af115801561245b573d6000803e3d6000fd5b5050505061254f565b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561253657600080fd5b505af115801561254a573d6000803e3d6000fd5b505050505b5050565b60075481565b61256233613261565b6125d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600681526020017f54454d504c450000000000000000000000000000000000000000000000000000815250905090565b600f5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126c9338484613412565b905092915050565b6126da33613261565b61274c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b505050505050565b6127ee336119ce565b612860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6128ef33613261565b612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6107d183839050106129be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614b61602f913960400191505060405180910390fd5b60005b83839050811015612a0d576129ff858585848181106129dc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1684613e84565b5080806001019150506129c1565b5050505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b612a4933613261565b612abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612b7e5780518252602082019150602081019050602083039250612b5b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612be0576040519150601f19603f3d011682016040523d82523d6000602084013e612be5565b606091505b5091509150818015612c255750600081511480612c245750808060200190516020811015612c1257600080fd5b81019080805190602001909291905050505b5b612c97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b612ca733613261565b612d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60004790508273ffffffffffffffffffffffffffffffffffffffff166108fc606484840281612d4457fe5b049081150290604051600060405180830381858888f19350505050158015612d70573d6000803e3d6000fd5b50505050565b612d7f33613261565b612df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b612e1733613261565b612e89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b601d60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612f36336119ce565b612fa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61300c336119ce565b61307e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61319433613261565b613206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b60009054906101000a900460ff1681565b600080828401905083811015613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008383111582906133ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133c45780820151818401526020810190506133a9565b50505050905090810190601f1680156133f15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601d60009054906101000a900460ff161561343b57613434848484613e84565b9050613e33565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134df5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356757601b60009054906101000a900460ff16613566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f54726164696e67206e6f74206f70656e2079657400000000000000000000000081525060200191505060405180910390fd5b5b600754821115806135c15750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561369e5750601d60009054906101000a900460ff16155b80156136b65750601d60019054906101000a900460ff165b80156137035750601e54600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561371157613710614057565b5b6137196147e4565b1580156137735750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156137cd576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116137c457600080fd5b6137cc6147f1565b5b613856826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133529092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138ff5750600960009054906101000a900460ff165b156139655760085461395983600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ca90919063ffffffff16565b111561396457600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a0b5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613a155782613a21565b613a208585856147fa565b5b9050613a7581600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ca90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bf757601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613bdb57600080fd5b505af1925050508015613bec575060015b613bf557613bf6565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613d3657601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613d1a57600080fd5b505af1925050508015613d2b575060015b613d3457613d35565b5b5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613dad57600080fd5b505af1925050508015613dbe575060015b613dc757613dc8565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b6000613e7c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613352565b905092915050565b6000613f0f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133529092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fa482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ca90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6001601d60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006140f460026140e66013546140d8600f54876149a290919063ffffffff16565b614a2890919063ffffffff16565b614a2890919063ffffffff16565b9050600061410b8284613e3a90919063ffffffff16565b90506060600267ffffffffffffffff8111801561412757600080fd5b506040519080825280602002602001820160405280156141565781602001602082028036833780820191505090505b509050308160008151811061416757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561420957600080fd5b505afa15801561421d573d6000803e3d6000fd5b505050506040513d602081101561423357600080fd5b81019080805190602001909291905050508160018151811061425157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561434f578082015181840152602081019050614334565b505050509050019650505050505050600060405180830381600087803b15801561437857600080fd5b505af115801561438c573d6000803e3d6000fd5b50505050600047905060006143c16143b06002600f54614a2890919063ffffffff16565b601354613e3a90919063ffffffff16565b905060006143ff60026143f1846143e3600f54886149a290919063ffffffff16565b614a2890919063ffffffff16565b614a2890919063ffffffff16565b9050600061442a8361441c601154876149a290919063ffffffff16565b614a2890919063ffffffff16565b90506000614453826144458588613e3a90919063ffffffff16565b613e3a90919063ffffffff16565b9050601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156144bf57600080fd5b505af1935050505080156144d1575060015b6144da576144db565b5b60006144f1600283614a2890919063ffffffff16565b905060006145088284613e3a90919063ffffffff16565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114614591576040519150601f19603f3d011682016040523d82523d6000602084013e614596565b606091505b505090506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114614621576040519150601f19603f3d011682016040523d82523d6000602084013e614626565b606091505b50509050600091506000905060008c11156147ba57601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561472757600080fd5b505af115801561473b573d6000803e3d6000fd5b50505050506040513d606081101561475257600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d604051808381526020018281526020019250505060405180910390a15b505050505050505050505050506000601d60006101000a81548160ff021916908315150217905550565b600080601a541415905090565b43601a81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461485a5760135461485e565b6014545b90506000614888606461487a84876149a290919063ffffffff16565b614a2890919063ffffffff16565b90506148dc81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ca90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36149978185613e3a90919063ffffffff16565b925050509392505050565b6000808314156149b55760009050614a22565b60008284029050828482816149c657fe5b0414614a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614b906021913960400191505060405180910390fd5b809150505b92915050565b6000614a6a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614a72565b905092915050565b60008083118290614b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ae3578082015181840152602081019050614ac8565b50505050905090810190601f168015614b105780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b2a57fe5b04905080915050939250505056fe4d69736d61746368206265747765656e204164647265737320616e6420746f6b656e20636f756e74474153204572726f723a206d61782061697264726f70206c696d6974206973203230303020726563697069656e7473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77474153204572726f723a206d61782061697264726f70206c696d69742069732038303020726563697069656e7473a26469706673582212200487b536aa48a49baa10e69c90e71d0725d7a13b671d6112254437a3d133856b64736f6c63430007040033