ERC-20
Overview
Max Total Supply
1,000,000,000,000 ABC
Holders
439
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,678,304,550.699037451 ABCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ApeToken
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/IERC20.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/access/Ownable.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Context.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/math/SafeMath.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Address.sol"; contract ApeToken is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; // erc20 mapping (address => uint256) private _rOwned; mapping(address => mapping(address => uint256)) private _allowances; // total supply = 1 trillion uint256 private constant _tTotal = 10**12 * 10**_decimals; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal = (MAX - (MAX % _tTotal)); // gets changed to APE ASTAX later string private _name = 'ABC'; // gets changed to ASTAX \xF0\x9F\xA6\x8D later string private _symbol = 'ABC'; uint8 private constant _decimals = 9; // uniswap address public constant uniswapV2RouterAddr = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddr); address public constant uniswapV2FactoryAddr = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); address public liquidityPoolAddr = UniswapV2Library.pairFor(uniswapV2FactoryAddr, uniswapV2Router.WETH(), address(this)); // cooldown and numsells struct Holder { uint256 timeTransfer; uint256 numSells; uint256 timeSell; } mapping (address => Holder) public holder; // first 10 minutes there is a buy limit of 0.3% of liquidity pool uint256 private constant _buyLimit = 27 * 10**8 * 10**_decimals; // first 10 minutes there is a holding limit for each address of 1% of the liquidity pool uint256 private constant _holderLimit = 90 * 10**8 * 10**_decimals; uint256 private constant _resetTime = 24 hours; // taxes mapping (address => bool) public whitelist; mapping (address => bool) public blacklist; struct Taxes { uint256 marketing; uint256 redistribution; uint256 lottery; uint256 buybackBurn; } Taxes private _buyTaxrates = Taxes(50, 25, 25, 0); Taxes private _firstSellTaxrates = Taxes(50, 0, 20, 30); Taxes private _secondSellTaxrates = Taxes(125, 0, 50, 75); Taxes private _thirdSellTaxrates = Taxes(175, 0, 70, 105); Taxes private _fourthSellTaxrates = Taxes(225, 0, 90, 135); address public constant burnAddr = address(0x000000000000000000000000000000000000dEaD); address payable public marketingAddr = payable(0x7B7B7c8A9cd0922E5894B3d3166f313Cf200A363); address payable public marketingInitialAddr = payable(0xdcBBcAA8fD8e610017D6922517Ff3f4ed2611e71); address public lotteryAddr = address(0x284c1D4Fb47e6548bde1e63A47198419Ec678449); // gets set to true after openTrading is called bool public tradingEnabled = false; uint256 public launchTime; // preventing circular calls of swapping bool public inSwap = false; modifier lockTheSwap { inSwap = true; _; inSwap = false; } // every time the contract has 0.000005% of the total supply in tokens it will swap // them to eth in the next sell, keeping the buyback taxes whilst sending the rest to marketing uint256 public minimumTokensBeforeSwap = _tTotal.mul(5).div(1000000); // every time the contract has 1 eth it will use that for the buyback burn uint256 public minimumETHBeforeBurn = 1 ether; // the counter for how much of the token balance of the contract is allocated to buyback. // get reset every time the contract balance is swapped to eth. uint256 public rBuybackBurn; // initial token allocations uint256 private _ownerTokenAmount = _rTotal.div(100).mul(90); uint256 private _marketingInitialTokenAmount = _rTotal.div(100).mul(5); uint256 private _lotteryTokenAmount = _rTotal.div(100).mul(5); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); constructor () { // 90% of tsupply to owner _rOwned[_msgSender()] = _ownerTokenAmount; emit Transfer(address(0), _msgSender(), _ownerTokenAmount); // 5% of tsupply to marketingInitial _rOwned[marketingInitialAddr] = _marketingInitialTokenAmount; emit Transfer(address(0), marketingInitialAddr, _marketingInitialTokenAmount); // 5% of tsupply to lottery _rOwned[lotteryAddr] = _lotteryTokenAmount; emit Transfer(address(0), lotteryAddr, _lotteryTokenAmount); whitelist[address(this)] = true; whitelist[_msgSender()] = true; whitelist[lotteryAddr] = true; whitelist[marketingInitialAddr] = true; whitelist[marketingAddr] = true; } receive() external payable {} // ========== ERC20 function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } // ========== TRANSFER function _transfer(address sender, address recipient, uint256 tAmount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(tAmount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || whitelist[sender] || whitelist[recipient], "Trading is not live yet. "); require(!blacklist[sender] && !blacklist[recipient], "Address is blacklisted. "); Taxes memory taxRates = Taxes(0,0,0,0); // getting appropiate tax rates and swapping of tokens/ sending of eth when threshhold passed if (!whitelist[sender] && !whitelist[recipient]) { // buy tax if (sender == liquidityPoolAddr && recipient != uniswapV2RouterAddr) { if (launchTime.add(10 minutes) >= block.timestamp) { require( balanceOf(recipient).add(tAmount) <= _holderLimit, "The sale is limited to 1% of LP per address for the first 10 minutes. " ); require( tAmount <= _buyLimit, "No buy greater than 0.3% of LP can be made for the first 10 minutes. " ); require( holder[recipient].timeTransfer.add(45 seconds) < block.timestamp, "Need to wait 45 seconds until next transfer. " ); holder[recipient].timeTransfer = block.timestamp; } else { require( holder[sender].timeTransfer.add(30 seconds) < block.timestamp, "Need to wait 30 seconds until next transfer. " ); holder[sender].timeTransfer = block.timestamp; } // set standard buy taxrates taxRates = _buyTaxrates; } // sell tax if (recipient == liquidityPoolAddr) { if (launchTime.add(10 minutes) >= block.timestamp) { require( holder[sender].timeTransfer.add(45 seconds) < block.timestamp, "Need to wait 45 seconds until next transfer. " ); holder[sender].timeTransfer = block.timestamp; } else { require( holder[sender].timeTransfer.add(30 seconds) < block.timestamp, "Need to wait 30 seconds until next transfer. " ); holder[sender].timeTransfer = block.timestamp; } // reset number of sells after 24 hours if (holder[sender].numSells > 0 && holder[sender].timeSell.add(_resetTime) < block.timestamp) { holder[sender].numSells = 0; holder[sender].timeSell = block.timestamp; } // set tax according to price impact or number of sells uint256 priceImpact = tAmount.mul(100).div(balanceOf(liquidityPoolAddr)); // default sell taxrate, gets changed if numsells or priceimpact indicates that it should taxRates = _firstSellTaxrates; if (priceImpact > 1 || holder[sender].numSells == 1) { taxRates = _secondSellTaxrates; } if (priceImpact > 2 || holder[sender].numSells == 2) { taxRates = _thirdSellTaxrates; } if (priceImpact > 3 || holder[sender].numSells >= 3) { taxRates = _fourthSellTaxrates; } // increment number of sells for holder if (holder[sender].numSells < 3) { holder[sender].numSells = holder[sender].numSells.add(1); } } // wallet 2 wallet tax (or nonuniswap) if (sender != liquidityPoolAddr && recipient != liquidityPoolAddr) { if (launchTime.add(10 minutes) >= block.timestamp) { require( holder[sender].timeTransfer.add(45 seconds) < block.timestamp, "Need to wait 45 seconds until next transfer. " ); holder[sender].timeTransfer = block.timestamp; } else { require( holder[sender].timeTransfer.add(30 seconds) < block.timestamp, "Need to wait 30 seconds until next transfer. " ); holder[sender].timeTransfer = block.timestamp; } // same tax rates as a third sell taxRates = _thirdSellTaxrates; } // if not already swapping then tokens and eth can be swapped now if (!inSwap && sender != liquidityPoolAddr) { // swap tokens and send some to marketing, whilst keeping the eth for buyback burn uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= minimumTokensBeforeSwap) { if (rBuybackBurn != 0) { uint256 toBeBurned = tokenFromReflection(rBuybackBurn); rBuybackBurn = 0; uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned); swapTokensForETHTo(toBeSentToMarketing, marketingAddr); swapTokensForETHTo(toBeBurned, payable(this)); } else { swapTokensForETHTo(contractTokenBalance, marketingAddr); } } // swap eth for buyback burn if above minimum uint256 contractETHBalance = address(this).balance; if (contractETHBalance >= minimumETHBeforeBurn) { swapETHForTokensTo(contractETHBalance, burnAddr); } } } // make sure taxes are not applied when swapping internal balances if(inSwap) { taxRates = Taxes(0,0,0,0); } // check taxrates and use simpler transfer if appropiate if (taxRates.marketing == 0 && taxRates.buybackBurn == 0 && taxRates.redistribution == 0 && taxRates.lottery == 0) { _tokenTransferWithoutFees(sender, recipient, tAmount); } else { _tokenTransferWithFees(sender, recipient, tAmount, taxRates); } } function _tokenTransferWithoutFees(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rAmount); emit Transfer(sender, recipient, tAmount); } function _tokenTransferWithFees(address sender, address recipient, uint256 tAmount, Taxes memory taxRates) private { // translating amount to reflected amount uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); // getting tax values Taxes memory tTaxValues = _getTTaxValues(tAmount, taxRates); Taxes memory rTaxValues = _getRTaxValues(tTaxValues); // removing tax values from the total amount uint256 rTransferAmount = _getTransferAmount(rAmount, rTaxValues); uint256 tTransferAmount = _getTransferAmount(tAmount, tTaxValues); // reflecting sender and recipient balances _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); // reflecting redistribution fees _rTotal = _rTotal.sub(rTaxValues.redistribution); // reflecting lottery fees _rOwned[lotteryAddr] = _rOwned[lotteryAddr].add(rTaxValues.lottery); // reflecting buybackburn and marketing fees _rOwned[address(this)] = _rOwned[address(this)].add(rTaxValues.marketing).add(rTaxValues.buybackBurn); rBuybackBurn = rBuybackBurn.add(rTaxValues.buybackBurn); // standard erc20 event emit Transfer(sender, recipient, tTransferAmount); } // ========== SWAP function swapTokensForETHTo(uint256 tokenAmount, address payable recipient) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), uniswapV2RouterAddr, tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, recipient, block.timestamp.add(300) ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokensTo(uint256 amount, address recipient) private lockTheSwap { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, recipient, block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } // ========== REFLECT function _getRate() private view returns(uint256) { return _rTotal.div(_tTotal); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less or equal than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _getTTaxValues(uint256 amount, Taxes memory taxRates) private pure returns (Taxes memory) { Taxes memory taxValues; taxValues.redistribution = amount.div(1000).mul(taxRates.redistribution); taxValues.buybackBurn = amount.div(1000).mul(taxRates.buybackBurn); taxValues.marketing = amount.div(1000).mul(taxRates.marketing); taxValues.lottery = amount.div(1000).mul(taxRates.lottery); return taxValues; } function _getRTaxValues(Taxes memory tTaxValues) private view returns (Taxes memory) { Taxes memory taxValues; uint256 currentRate = _getRate(); taxValues.redistribution = tTaxValues.redistribution.mul(currentRate); taxValues.buybackBurn = tTaxValues.buybackBurn.mul(currentRate); taxValues.marketing = tTaxValues.marketing.mul(currentRate); taxValues.lottery = tTaxValues.lottery.mul(currentRate); return taxValues; } function _getTransferAmount(uint256 amount, Taxes memory taxValues) private pure returns (uint256) { return amount.sub(taxValues.marketing).sub(taxValues.lottery).sub(taxValues.buybackBurn).sub(taxValues.redistribution); } // ========== ADMIN function openTrading() external onlyOwner() { require(!tradingEnabled, "Trading is already enabled. "); tradingEnabled = true; launchTime = block.timestamp; } function manualTaxConv() external onlyOwner() returns (bool) { // swap tokens and send some to marketing, whilst keeping the eth for buyback burn uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { if (rBuybackBurn != 0) { uint256 toBeBurned = tokenFromReflection(rBuybackBurn); rBuybackBurn = 0; uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned); swapTokensForETHTo(toBeSentToMarketing, marketingAddr); swapTokensForETHTo(toBeBurned, payable(this)); } else { swapTokensForETHTo(contractTokenBalance, marketingAddr); } } return true; } function manualBuybackBurn() external onlyOwner() returns (bool) { uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { swapETHForTokensTo(contractETHBalance, burnAddr); } return true; } function setWhitelist(address addr, bool onoff) external onlyOwner() { whitelist[addr] = onoff; } function setBlacklist(address addr, bool onoff) external onlyOwner() { blacklist[addr] = onoff; } function setMarketingWallet(address payable marketing) external onlyOwner() { marketingAddr = marketing; } function setMarketingLottery(address lottery) external onlyOwner() { lotteryAddr = lottery; } function restoreNameAndSymbol() external onlyOwner() { _name = "APE ASTAX"; _symbol = "ASTAX \xF0\x9F\xA6\x8D"; } function setMinimumTokensBeforeSwap(uint256 val) external onlyOwner() { minimumTokensBeforeSwap = val; } function setMinimumETHBeforeBurn(uint256 val) external onlyOwner() { minimumETHBeforeBurn = val; } function getBalance() public view returns (uint256) { return address(this).balance; } } // ========== LIBS library UniswapV2Library { // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash ))))); } } interface IUniswapV2Router02 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holder","outputs":[{"internalType":"uint256","name":"timeTransfer","type":"uint256"},{"internalType":"uint256","name":"numSells","type":"uint256"},{"internalType":"uint256","name":"timeSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuybackBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualTaxConv","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingInitialAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumETHBeforeBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rBuybackBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lottery","type":"address"}],"name":"setMarketingLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumETHBeforeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2FactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526009600a62000014919062001119565b64e8d4a5100062000026919062001256565b600019620000359190620013af565b600019620000449190620012b7565b6003556040518060400160405280600381526020017f4142430000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009492919062000db9565b506040518060400160405280600381526020017f414243000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000e292919062000db9565b50737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000207735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ba57600080fd5b505afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000e80565b3062000bcd60201b62001c201760201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806032815260200160198152602001601981526020016000815250600b6000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280603281526020016000815260200160148152602001601e815250600f6000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280607d81526020016000815260200160328152602001604b8152506013600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806080016040528060af8152602001600081526020016046815260200160698152506017600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806080016040528060e1815260200160008152602001605a81526020016087815250601b600082015181600001556020820151816001015560408201518160020155606082015181600301555050737b7b7c8a9cd0922e5894b3d3166f313cf200a363601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dcbbcaa8fd8e610017d6922517ff3f4ed2611e71602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073284c1d4fb47e6548bde1e63a47198419ec678449602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602160146101000a81548160ff0219169083151502179055506000602360006101000a81548160ff02191690831515021790555062000569620f42406200055560056009600a6200052f919062001119565b64e8d4a5100062000541919062001256565b62000c4b60201b62001c921790919060201c565b62000c6360201b62001ca81790919060201c565b602455670de0b6b3a7640000602555620005af605a6200059b606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b602755620005e96005620005d5606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b6028556200062360056200060f606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b6029553480156200063357600080fd5b5060006200064662000c7b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060275460016000620006fb62000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200074962000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602754604051620007aa91906200104d565b60405180910390a360285460016000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6028546040516200089e91906200104d565b60405180910390a360295460016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6029546040516200099291906200104d565b60405180910390a36001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000a0862000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001572565b600080600062000be4858562000c8360201b60201c565b9150915085828260405160200162000bfe92919062000f8f565b6040516020818303038152906040528051906020012060405160200162000c2792919062000fbf565b6040516020818303038152906040528051906020012060001c925050509392505050565b6000818362000c5b919062001256565b905092915050565b6000818362000c73919062001086565b905092915050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cef9062001009565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161062000d3457828462000d37565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da9906200102b565b60405180910390fd5b9250929050565b82805462000dc79062001347565b90600052602060002090601f01602090048101928262000deb576000855562000e37565b82601f1062000e0657805160ff191683800117855562000e37565b8280016001018555821562000e37579182015b8281111562000e3657825182559160200191906001019062000e19565b5b50905062000e46919062000e4a565b5090565b5b8082111562000e6557600081600090555060010162000e4b565b5090565b60008151905062000e7a8162001558565b92915050565b60006020828403121562000e9357600080fd5b600062000ea38482850162000e69565b91505092915050565b62000ec162000ebb82620012f2565b6200137d565b82525050565b62000edc62000ed68262001306565b62001391565b82525050565b600062000ef16025836200106a565b915062000efe826200148e565b604082019050919050565b600062000f186020836200107b565b915062000f2582620014dd565b602082019050919050565b600062000f3f6001836200107b565b915062000f4c8262001506565b600182019050919050565b600062000f66601e836200106a565b915062000f73826200152f565b602082019050919050565b62000f898162001330565b82525050565b600062000f9d828562000eac565b60148201915062000faf828462000eac565b6014820191508190509392505050565b600062000fcc8262000f30565b915062000fda828562000eac565b60148201915062000fec828462000ec7565b60208201915062000ffd8262000f09565b91508190509392505050565b60006020820190508181036000830152620010248162000ee2565b9050919050565b60006020820190508181036000830152620010468162000f57565b9050919050565b600060208201905062001064600083018462000f7e565b92915050565b600082825260208201905092915050565b600081905092915050565b6000620010938262001330565b9150620010a08362001330565b925082620010b357620010b262001416565b5b828204905092915050565b6000808291508390505b60018511156200111057808604811115620010e857620010e7620013e7565b5b6001851615620010f85780820291505b8081029050620011088562001481565b9450620010c8565b94509492505050565b6000620011268262001330565b915062001133836200133a565b9250620011627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200116a565b905092915050565b6000826200117c57600190506200124f565b816200118c57600090506200124f565b8160018114620011a55760028114620011b057620011e6565b60019150506200124f565b60ff841115620011c557620011c4620013e7565b5b8360020a915084821115620011df57620011de620013e7565b5b506200124f565b5060208310610133831016604e8410600b8410161715620012205782820a9050838111156200121a5762001219620013e7565b5b6200124f565b6200122f8484846001620010be565b92509050818404811115620012495762001248620013e7565b5b81810290505b9392505050565b6000620012638262001330565b9150620012708362001330565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012ac57620012ab620013e7565b5b828202905092915050565b6000620012c48262001330565b9150620012d18362001330565b925082821015620012e757620012e6620013e7565b5b828203905092915050565b6000620012ff8262001310565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200136057607f821691505b6020821081141562001377576200137662001445565b5b50919050565b60006200138a826200139b565b9050919050565b6000819050919050565b6000620013a88262001474565b9050919050565b6000620013bc8262001330565b9150620013c98362001330565b925082620013dc57620013db62001416565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160601b9050919050565b60008160011c9050919050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b6200156381620012f2565b81146200156f57600080fd5b50565b61571b80620015826000396000f3fe6080604052600436106102605760003560e01c806381f1814311610144578063c9567bf9116100b6578063d85ff2ff1161007a578063d85ff2ff14610901578063dd62ed3e1461092c578063ee9e20c614610969578063f2fde38b14610992578063f9f92be4146109bb578063ff142f97146109f857610267565b8063c9567bf91461083e578063cea2085114610855578063d246d41114610880578063d2d7ad83146108ab578063d8306786146108d657610267565b8063a091273b11610108578063a091273b14610730578063a457c2d71461075b578063a9059cbb14610798578063aee50b1e146107d5578063bad291ab146107fe578063c8078c4e1461082757610267565b806381f181431461064757806381f651aa146106725780638da5cb5b1461069d57806395d89b41146106c85780639b19251a146106f357610267565b80632f5b1564116101dd5780634ada218b116101a15780634ada218b1461054b57806353d6fd59146105765780635d098b381461059f57806370a08231146105c8578063715018a614610605578063790ca4131461061c57610267565b80632f5b156414610462578063313ce5671461048d57806339509351146104b85780633ff42b92146104f5578063497f3eeb1461052057610267565b806318160ddd1161022457806318160ddd146103535780631eb7caba1461037e578063216fb989146103bd57806323b872dd146103e85780632d8381191461042557610267565b806306fdde031461026c578063095ea7b31461029757806312065fe0146102d4578063153b0d1e146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a23565b60405161028e91906148d6565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061434e565b610ab5565b6040516102cb9190614854565b60405180910390f35b3480156102e057600080fd5b506102e9610ad3565b6040516102f69190614b18565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614312565b610adb565b005b34801561033457600080fd5b5061033d610bb2565b60405161034a919061486f565b60405180910390f35b34801561035f57600080fd5b50610368610bd8565b6040516103759190614b18565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061420c565b610bfd565b6040516103b493929190614bbd565b60405180910390f35b3480156103c957600080fd5b506103d2610c27565b6040516103df9190614854565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142c3565b610cc8565b60405161041c9190614854565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061438a565b610da1565b6040516104599190614b18565b60405180910390f35b34801561046e57600080fd5b50610477610e0f565b604051610484919061481e565b60405180910390f35b34801561049957600080fd5b506104a2610e35565b6040516104af9190614bf4565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061434e565b610e3e565b6040516104ec9190614854565b60405180910390f35b34801561050157600080fd5b5061050a610ef1565b6040516105179190614839565b60405180910390f35b34801561052c57600080fd5b50610535610f17565b6040516105429190614839565b60405180910390f35b34801561055757600080fd5b50610560610f3d565b60405161056d9190614854565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614312565b610f50565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061425e565b611027565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061420c565b6110e7565b6040516105fc9190614b18565b60405180910390f35b34801561061157600080fd5b5061061a611138565b005b34801561062857600080fd5b50610631611272565b60405161063e9190614b18565b60405180910390f35b34801561065357600080fd5b5061065c611278565b6040516106699190614854565b60405180910390f35b34801561067e57600080fd5b506106876113b7565b604051610694919061481e565b60405180910390f35b3480156106a957600080fd5b506106b26113dd565b6040516106bf919061481e565b60405180910390f35b3480156106d457600080fd5b506106dd611406565b6040516106ea91906148d6565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061420c565b611498565b6040516107279190614854565b60405180910390f35b34801561073c57600080fd5b506107456114b8565b6040516107529190614b18565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061434e565b6114be565b60405161078f9190614854565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba919061434e565b61158b565b6040516107cc9190614854565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061438a565b6115a9565b005b34801561080a57600080fd5b506108256004803603810190610820919061420c565b61162f565b005b34801561083357600080fd5b5061083c6116ef565b005b34801561084a57600080fd5b50610853611805565b005b34801561086157600080fd5b5061086a6118f5565b604051610877919061481e565b60405180910390f35b34801561088c57600080fd5b5061089561190d565b6040516108a2919061481e565b60405180910390f35b3480156108b757600080fd5b506108c0611913565b6040516108cd9190614b18565b60405180910390f35b3480156108e257600080fd5b506108eb611919565b6040516108f89190614854565b60405180910390f35b34801561090d57600080fd5b5061091661192c565b6040516109239190614b18565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614287565b611932565b6040516109609190614b18565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061438a565b6119b9565b005b34801561099e57600080fd5b506109b960048036038101906109b4919061420c565b611a3f565b005b3480156109c757600080fd5b506109e260048036038101906109dd919061420c565b611be8565b6040516109ef9190614854565b60405180910390f35b348015610a0457600080fd5b50610a0d611c08565b604051610a1a919061481e565b60405180910390f35b606060048054610a3290615005565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e90615005565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac9610ac2611cbe565b8484611cc6565b6001905092915050565b600047905090565b610ae3611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610b016113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906149f8565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610be89190614d49565b64e8d4a51000610bf89190614e67565b905090565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610c31611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c906149f8565b60405180910390fd5b60004790506000811115610cc057610cbf8161dead611e91565b5b600191505090565b6000610cd58484846121ab565b610d9684610ce1611cbe565b610d918560405180606001604052806028815260200161569960289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d47611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b600190509392505050565b6000600354821115610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614978565b60405180910390fd5b6000610df26134a0565b9050610e078184611ca890919063ffffffff16565b915050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b6000610ee7610e4b611cbe565b84610ee28560026000610e5c611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b611cc6565b6001905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160149054906101000a900460ff1681565b610f58611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610f766113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906149f8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61102f611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661104d6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906149f8565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611131600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da1565b9050919050565b611140611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60225481565b6000611282611cbe565b73ffffffffffffffffffffffffffffffffffffffff166112a06113dd565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906149f8565b60405180910390fd5b6000611301306110e7565b905060008111156113af57600060265414611381576000611323602654610da1565b90506000602681905550600061134282846134ef90919063ffffffff16565b905061137081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61137a8230613505565b50506113ae565b6113ad81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461141590615005565b80601f016020809104026020016040519081016040528092919081815260200182805461144190615005565b801561148e5780601f106114635761010080835404028352916020019161148e565b820191906000526020600020905b81548152906001019060200180831161147157829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b60006115816114cb611cbe565b8461157c856040518060600160405280602581526020016156c160259139600260006114f5611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b6001905092915050565b600061159f611598611cbe565b84846121ab565b6001905092915050565b6115b1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166115cf6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906149f8565b60405180910390fd5b8060248190555050565b611637611cbe565b73ffffffffffffffffffffffffffffffffffffffff166116556113dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906149f8565b60405180910390fd5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116f7611cbe565b73ffffffffffffffffffffffffffffffffffffffff166117156113dd565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611762906149f8565b60405180910390fd5b6040518060400160405280600981526020017f4150452041535441580000000000000000000000000000000000000000000000815250600490805190602001906117b69291906140d8565b506040518060400160405280600a81526020017f415354415820f09fa68d00000000000000000000000000000000000000000000815250600590805190602001906118029291906140d8565b50565b61180d611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661182b6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906149f8565b60405180910390fd5b602160149054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906148f8565b60405180910390fd5b6001602160146101000a81548160ff02191690831515021790555042602281905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b60245481565b602360009054906101000a900460ff1681565b60265481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166119df6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906149f8565b60405180910390fd5b8060258190555050565b611a47611cbe565b73ffffffffffffffffffffffffffffffffffffffff16611a656113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab2906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6000806000611c2f858561383f565b91509150858282604051602001611c479291906147b0565b60405160208183030381529060405280519060200120604051602001611c6e9291906147dc565b6040516020818303038152906040528051906020012060001c925050509392505050565b60008183611ca09190614e67565b905092915050565b60008183611cb69190614cc5565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614958565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e849190614b18565b60405180910390a3505050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611f1d5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8857600080fd5b505afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190614235565b81600081518110611ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061206f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95846000848661210161012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b8152600401612120949392919061488a565b6000604051808303818588803b15801561213957600080fd5b505af115801561214d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248382604051612183929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290614a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614918565b60405180910390fd5b600081116122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614a18565b60405180910390fd5b602160149054906101000a900460ff16806123325750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123865750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc906149d8565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124695750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614ab8565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125755750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156126175750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561290c57426126346102586022546134d990919063ffffffff16565b106127f5576009600a6126479190614d49565b640218711a006126579190614e67565b61267283612664866110e7565b6134d990919063ffffffff16565b11156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614af8565b60405180910390fd5b6009600a6126c19190614d49565b63a0eebb006126d09190614e67565b821115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906149b8565b60405180910390fd5b42612769602d600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614a38565b60405180910390fd5b42600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506128d4565b4261284c601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b1061288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b600b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9e574261297a6102586022546134d990919063ffffffff16565b10612a6257426129d6602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612b41565b42612ab9601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612be9575042612be762015180600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546134d990919063ffffffff16565b105b15612c7e576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b6000612cd0612cae600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e7565b612cc2606486611c9290919063ffffffff16565b611ca890919063ffffffff16565b9050600f60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091506001811180612d5a57506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612d9757601360405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002811180612de857506002600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612e2557601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003811180612e7757506003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b15612eb457601b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612f9c57612f556001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546134d990919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561304a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561326657426130676102586022546134d990919063ffffffff16565b1061314f57426130c3602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10613103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fa90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061322e565b426131a6601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602360009054906101000a900460ff161580156132d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156133ad5760006132e1306110e7565b9050602454811061338f57600060265414613361576000613303602654610da1565b90506000602681905550600061332282846134ef90919063ffffffff16565b905061335081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61335a8230613505565b505061338e565b61338d81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600047905060255481106133aa576133a98161dead611e91565b5b50505b5b602360009054906101000a900460ff16156133eb576040518060800160405280600081526020016000815260200160008152602001600081525090505b60008160000151148015613403575060008160600151145b8015613413575060008160200151145b8015613423575060008160400151145b156134385761343384848461396d565b613445565b61344484848484613b26565b5b50505050565b6000838311158290613493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348a91906148d6565b60405180910390fd5b5082840390509392505050565b60006134d46009600a6134b39190614d49565b64e8d4a510006134c39190614e67565b600354611ca890919063ffffffff16565b905090565b600081836134e79190614c6f565b905092915050565b600081836134fd9190614ec1565b905092915050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156135915781602001602082028036833780820191505090505b50905030816000815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561367157600080fd5b505afa158015613685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a99190614235565b816001815181106136e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061373c30737a250d5630b4cf539739df2c5dacb4c659f2488d85611cc6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947846000848661379461012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b81526004016137b4959493929190614b63565b600060405180830381600087803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613817929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a890614998565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106138eb5782846138ee565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395d90614ad8565b60405180910390fd5b9250929050565b60006139776134a0565b9050600061398e8284611c9290919063ffffffff16565b90506139e281600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b179190614b18565b60405180910390a35050505050565b6000613b306134a0565b90506000613b478285611c9290919063ffffffff16565b90506000613b558585613ee5565b90506000613b6282613fcf565b90506000613b708483614075565b90506000613b7e8885614075565b9050613bd285600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6782600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc383602001516003546134ef90919063ffffffff16565b600381905550613d41836040015160016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e128360600151613e048560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b6134d990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6e83606001516026546134d990919063ffffffff16565b6026819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ed19190614b18565b60405180910390a350505050505050505050565b613eed61415e565b613ef561415e565b613f208360200151613f126103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816020018181525050613f548360600151613f466103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816060018181525050613f888360000151613f7a6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816000018181525050613fbc8360400151613fae6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b8160400181815250508091505092915050565b613fd761415e565b613fdf61415e565b6000613fe96134a0565b9050614002818560200151611c9290919063ffffffff16565b826020018181525050614022818560600151611c9290919063ffffffff16565b826060018181525050614042818560000151611c9290919063ffffffff16565b826000018181525050614062818560400151611c9290919063ffffffff16565b8260400181815250508192505050919050565b60006140d082602001516140c284606001516140b486604001516140a688600001518a6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b905092915050565b8280546140e490615005565b90600052602060002090601f016020900481019282614106576000855561414d565b82601f1061411f57805160ff191683800117855561414d565b8280016001018555821561414d579182015b8281111561414c578251825591602001919060010190614131565b5b50905061415a9190614186565b5090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5b8082111561419f576000816000905550600101614187565b5090565b6000813590506141b28161563c565b92915050565b6000815190506141c78161563c565b92915050565b6000813590506141dc81615653565b92915050565b6000813590506141f18161566a565b92915050565b60008135905061420681615681565b92915050565b60006020828403121561421e57600080fd5b600061422c848285016141a3565b91505092915050565b60006020828403121561424757600080fd5b6000614255848285016141b8565b91505092915050565b60006020828403121561427057600080fd5b600061427e848285016141cd565b91505092915050565b6000806040838503121561429a57600080fd5b60006142a8858286016141a3565b92505060206142b9858286016141a3565b9150509250929050565b6000806000606084860312156142d857600080fd5b60006142e6868287016141a3565b93505060206142f7868287016141a3565b9250506040614308868287016141f7565b9150509250925092565b6000806040838503121561432557600080fd5b6000614333858286016141a3565b9250506020614344858286016141e2565b9150509250929050565b6000806040838503121561436157600080fd5b600061436f858286016141a3565b9250506020614380858286016141f7565b9150509250929050565b60006020828403121561439c57600080fd5b60006143aa848285016141f7565b91505092915050565b60006143bf83836143e9565b60208301905092915050565b6143d481614f66565b82525050565b6143e381614f07565b82525050565b6143f281614ef5565b82525050565b61440181614ef5565b82525050565b61441861441382614ef5565b615037565b82525050565b600061442982614c1f565b6144338185614c42565b935061443e83614c0f565b8060005b8381101561446f57815161445688826143b3565b975061446183614c35565b925050600181019050614442565b5085935050505092915050565b61448581614f19565b82525050565b61449c61449782614f25565b615049565b82525050565b6144ab81614f78565b82525050565b6144ba81614f9c565b82525050565b60006144cb82614c2a565b6144d58185614c53565b93506144e5818560208601614fd2565b6144ee816150f2565b840191505092915050565b6000614506601c83614c53565b91506145118261511d565b602082019050919050565b6000614529602383614c53565b915061453482615146565b604082019050919050565b600061454c602683614c53565b915061455782615195565b604082019050919050565b600061456f602283614c53565b915061457a826151e4565b604082019050919050565b6000614592603383614c53565b915061459d82615233565b604082019050919050565b60006145b5602583614c53565b91506145c082615282565b604082019050919050565b60006145d8604583614c53565b91506145e3826152d1565b606082019050919050565b60006145fb602083614c64565b915061460682615346565b602082019050919050565b600061461e601983614c53565b91506146298261536f565b602082019050919050565b6000614641600183614c64565b915061464c82615398565b600182019050919050565b6000614664602083614c53565b915061466f826153c1565b602082019050919050565b6000614687602983614c53565b9150614692826153ea565b604082019050919050565b60006146aa602d83614c53565b91506146b582615439565b604082019050919050565b60006146cd602d83614c53565b91506146d882615488565b604082019050919050565b60006146f0602583614c53565b91506146fb826154d7565b604082019050919050565b6000614713602483614c53565b915061471e82615526565b604082019050919050565b6000614736601883614c53565b915061474182615575565b602082019050919050565b6000614759601e83614c53565b91506147648261559e565b602082019050919050565b600061477c604683614c53565b9150614787826155c7565b606082019050919050565b61479b81614f4f565b82525050565b6147aa81614f59565b82525050565b60006147bc8285614407565b6014820191506147cc8284614407565b6014820191508190509392505050565b60006147e782614634565b91506147f38285614407565b601482019150614803828461448b565b602082019150614812826145ee565b91508190509392505050565b600060208201905061483360008301846143f8565b92915050565b600060208201905061484e60008301846143da565b92915050565b6000602082019050614869600083018461447c565b92915050565b600060208201905061488460008301846144a2565b92915050565b600060808201905061489f60008301876144b1565b81810360208301526148b1818661441e565b90506148c060408301856143f8565b6148cd6060830184614792565b95945050505050565b600060208201905081810360008301526148f081846144c0565b905092915050565b60006020820190508181036000830152614911816144f9565b9050919050565b600060208201905081810360008301526149318161451c565b9050919050565b600060208201905081810360008301526149518161453f565b9050919050565b6000602082019050818103600083015261497181614562565b9050919050565b6000602082019050818103600083015261499181614585565b9050919050565b600060208201905081810360008301526149b1816145a8565b9050919050565b600060208201905081810360008301526149d1816145cb565b9050919050565b600060208201905081810360008301526149f181614611565b9050919050565b60006020820190508181036000830152614a1181614657565b9050919050565b60006020820190508181036000830152614a318161467a565b9050919050565b60006020820190508181036000830152614a518161469d565b9050919050565b60006020820190508181036000830152614a71816146c0565b9050919050565b60006020820190508181036000830152614a91816146e3565b9050919050565b60006020820190508181036000830152614ab181614706565b9050919050565b60006020820190508181036000830152614ad181614729565b9050919050565b60006020820190508181036000830152614af18161474c565b9050919050565b60006020820190508181036000830152614b118161476f565b9050919050565b6000602082019050614b2d6000830184614792565b92915050565b6000604082019050614b486000830185614792565b8181036020830152614b5a818461441e565b90509392505050565b600060a082019050614b786000830188614792565b614b8560208301876144b1565b8181036040830152614b97818661441e565b9050614ba660608301856143cb565b614bb36080830184614792565b9695505050505050565b6000606082019050614bd26000830186614792565b614bdf6020830185614792565b614bec6040830184614792565b949350505050565b6000602082019050614c0960008301846147a1565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7a82614f4f565b9150614c8583614f4f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cba57614cb9615065565b5b828201905092915050565b6000614cd082614f4f565b9150614cdb83614f4f565b925082614ceb57614cea615094565b5b828204905092915050565b6000808291508390505b6001851115614d4057808604811115614d1c57614d1b615065565b5b6001851615614d2b5780820291505b8081029050614d3985615110565b9450614d00565b94509492505050565b6000614d5482614f4f565b9150614d5f83614f59565b9250614d8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614d94565b905092915050565b600082614da45760019050614e60565b81614db25760009050614e60565b8160018114614dc85760028114614dd257614e01565b6001915050614e60565b60ff841115614de457614de3615065565b5b8360020a915084821115614dfb57614dfa615065565b5b50614e60565b5060208310610133831016604e8410600b8410161715614e365782820a905083811115614e3157614e30615065565b5b614e60565b614e438484846001614cf6565b92509050818404811115614e5a57614e59615065565b5b81810290505b9392505050565b6000614e7282614f4f565b9150614e7d83614f4f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb657614eb5615065565b5b828202905092915050565b6000614ecc82614f4f565b9150614ed783614f4f565b925082821015614eea57614ee9615065565b5b828203905092915050565b6000614f0082614f2f565b9050919050565b6000614f1282614f2f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f7182614fae565b9050919050565b6000614f8382614f8a565b9050919050565b6000614f9582614f2f565b9050919050565b6000614fa782614f4f565b9050919050565b6000614fb982614fc0565b9050919050565b6000614fcb82614f2f565b9050919050565b60005b83811015614ff0578082015181840152602081019050614fd5565b83811115614fff576000848401525b50505050565b6000600282049050600182168061501d57607f821691505b60208210811415615031576150306150c3565b5b50919050565b600061504282615053565b9050919050565b6000819050919050565b600061505e82615103565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f54726164696e6720697320616c726561647920656e61626c65642e2000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206275792067726561746572207468616e20302e3325206f66204c50206360008201527f616e206265206d61646520666f7220746865206669727374203130206d696e7560208201527f7465732e20000000000000000000000000000000000000000000000000000000604082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203435207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203330207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320697320626c61636b6c69737465642e200000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f5468652073616c65206973206c696d6974656420746f203125206f66204c502060008201527f706572206164647265737320666f7220746865206669727374203130206d696e60208201527f757465732e200000000000000000000000000000000000000000000000000000604082015250565b61564581614ef5565b811461565057600080fd5b50565b61565c81614f07565b811461566757600080fd5b50565b61567381614f19565b811461567e57600080fd5b50565b61568a81614f4f565b811461569557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b5478bf4b5d8aadc0a167c6e0ea3cbaf584742baef743a8957f31ace944f27064736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102605760003560e01c806381f1814311610144578063c9567bf9116100b6578063d85ff2ff1161007a578063d85ff2ff14610901578063dd62ed3e1461092c578063ee9e20c614610969578063f2fde38b14610992578063f9f92be4146109bb578063ff142f97146109f857610267565b8063c9567bf91461083e578063cea2085114610855578063d246d41114610880578063d2d7ad83146108ab578063d8306786146108d657610267565b8063a091273b11610108578063a091273b14610730578063a457c2d71461075b578063a9059cbb14610798578063aee50b1e146107d5578063bad291ab146107fe578063c8078c4e1461082757610267565b806381f181431461064757806381f651aa146106725780638da5cb5b1461069d57806395d89b41146106c85780639b19251a146106f357610267565b80632f5b1564116101dd5780634ada218b116101a15780634ada218b1461054b57806353d6fd59146105765780635d098b381461059f57806370a08231146105c8578063715018a614610605578063790ca4131461061c57610267565b80632f5b156414610462578063313ce5671461048d57806339509351146104b85780633ff42b92146104f5578063497f3eeb1461052057610267565b806318160ddd1161022457806318160ddd146103535780631eb7caba1461037e578063216fb989146103bd57806323b872dd146103e85780632d8381191461042557610267565b806306fdde031461026c578063095ea7b31461029757806312065fe0146102d4578063153b0d1e146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a23565b60405161028e91906148d6565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061434e565b610ab5565b6040516102cb9190614854565b60405180910390f35b3480156102e057600080fd5b506102e9610ad3565b6040516102f69190614b18565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614312565b610adb565b005b34801561033457600080fd5b5061033d610bb2565b60405161034a919061486f565b60405180910390f35b34801561035f57600080fd5b50610368610bd8565b6040516103759190614b18565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061420c565b610bfd565b6040516103b493929190614bbd565b60405180910390f35b3480156103c957600080fd5b506103d2610c27565b6040516103df9190614854565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142c3565b610cc8565b60405161041c9190614854565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061438a565b610da1565b6040516104599190614b18565b60405180910390f35b34801561046e57600080fd5b50610477610e0f565b604051610484919061481e565b60405180910390f35b34801561049957600080fd5b506104a2610e35565b6040516104af9190614bf4565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061434e565b610e3e565b6040516104ec9190614854565b60405180910390f35b34801561050157600080fd5b5061050a610ef1565b6040516105179190614839565b60405180910390f35b34801561052c57600080fd5b50610535610f17565b6040516105429190614839565b60405180910390f35b34801561055757600080fd5b50610560610f3d565b60405161056d9190614854565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614312565b610f50565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061425e565b611027565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061420c565b6110e7565b6040516105fc9190614b18565b60405180910390f35b34801561061157600080fd5b5061061a611138565b005b34801561062857600080fd5b50610631611272565b60405161063e9190614b18565b60405180910390f35b34801561065357600080fd5b5061065c611278565b6040516106699190614854565b60405180910390f35b34801561067e57600080fd5b506106876113b7565b604051610694919061481e565b60405180910390f35b3480156106a957600080fd5b506106b26113dd565b6040516106bf919061481e565b60405180910390f35b3480156106d457600080fd5b506106dd611406565b6040516106ea91906148d6565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061420c565b611498565b6040516107279190614854565b60405180910390f35b34801561073c57600080fd5b506107456114b8565b6040516107529190614b18565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061434e565b6114be565b60405161078f9190614854565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba919061434e565b61158b565b6040516107cc9190614854565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061438a565b6115a9565b005b34801561080a57600080fd5b506108256004803603810190610820919061420c565b61162f565b005b34801561083357600080fd5b5061083c6116ef565b005b34801561084a57600080fd5b50610853611805565b005b34801561086157600080fd5b5061086a6118f5565b604051610877919061481e565b60405180910390f35b34801561088c57600080fd5b5061089561190d565b6040516108a2919061481e565b60405180910390f35b3480156108b757600080fd5b506108c0611913565b6040516108cd9190614b18565b60405180910390f35b3480156108e257600080fd5b506108eb611919565b6040516108f89190614854565b60405180910390f35b34801561090d57600080fd5b5061091661192c565b6040516109239190614b18565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614287565b611932565b6040516109609190614b18565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061438a565b6119b9565b005b34801561099e57600080fd5b506109b960048036038101906109b4919061420c565b611a3f565b005b3480156109c757600080fd5b506109e260048036038101906109dd919061420c565b611be8565b6040516109ef9190614854565b60405180910390f35b348015610a0457600080fd5b50610a0d611c08565b604051610a1a919061481e565b60405180910390f35b606060048054610a3290615005565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e90615005565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac9610ac2611cbe565b8484611cc6565b6001905092915050565b600047905090565b610ae3611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610b016113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906149f8565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610be89190614d49565b64e8d4a51000610bf89190614e67565b905090565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610c31611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c906149f8565b60405180910390fd5b60004790506000811115610cc057610cbf8161dead611e91565b5b600191505090565b6000610cd58484846121ab565b610d9684610ce1611cbe565b610d918560405180606001604052806028815260200161569960289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d47611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b600190509392505050565b6000600354821115610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614978565b60405180910390fd5b6000610df26134a0565b9050610e078184611ca890919063ffffffff16565b915050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b6000610ee7610e4b611cbe565b84610ee28560026000610e5c611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b611cc6565b6001905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160149054906101000a900460ff1681565b610f58611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610f766113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906149f8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61102f611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661104d6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906149f8565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611131600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da1565b9050919050565b611140611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60225481565b6000611282611cbe565b73ffffffffffffffffffffffffffffffffffffffff166112a06113dd565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906149f8565b60405180910390fd5b6000611301306110e7565b905060008111156113af57600060265414611381576000611323602654610da1565b90506000602681905550600061134282846134ef90919063ffffffff16565b905061137081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61137a8230613505565b50506113ae565b6113ad81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461141590615005565b80601f016020809104026020016040519081016040528092919081815260200182805461144190615005565b801561148e5780601f106114635761010080835404028352916020019161148e565b820191906000526020600020905b81548152906001019060200180831161147157829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b60006115816114cb611cbe565b8461157c856040518060600160405280602581526020016156c160259139600260006114f5611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b6001905092915050565b600061159f611598611cbe565b84846121ab565b6001905092915050565b6115b1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166115cf6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906149f8565b60405180910390fd5b8060248190555050565b611637611cbe565b73ffffffffffffffffffffffffffffffffffffffff166116556113dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906149f8565b60405180910390fd5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116f7611cbe565b73ffffffffffffffffffffffffffffffffffffffff166117156113dd565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611762906149f8565b60405180910390fd5b6040518060400160405280600981526020017f4150452041535441580000000000000000000000000000000000000000000000815250600490805190602001906117b69291906140d8565b506040518060400160405280600a81526020017f415354415820f09fa68d00000000000000000000000000000000000000000000815250600590805190602001906118029291906140d8565b50565b61180d611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661182b6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906149f8565b60405180910390fd5b602160149054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906148f8565b60405180910390fd5b6001602160146101000a81548160ff02191690831515021790555042602281905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b60245481565b602360009054906101000a900460ff1681565b60265481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166119df6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906149f8565b60405180910390fd5b8060258190555050565b611a47611cbe565b73ffffffffffffffffffffffffffffffffffffffff16611a656113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab2906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6000806000611c2f858561383f565b91509150858282604051602001611c479291906147b0565b60405160208183030381529060405280519060200120604051602001611c6e9291906147dc565b6040516020818303038152906040528051906020012060001c925050509392505050565b60008183611ca09190614e67565b905092915050565b60008183611cb69190614cc5565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614958565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e849190614b18565b60405180910390a3505050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611f1d5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8857600080fd5b505afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190614235565b81600081518110611ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061206f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95846000848661210161012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b8152600401612120949392919061488a565b6000604051808303818588803b15801561213957600080fd5b505af115801561214d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248382604051612183929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290614a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614918565b60405180910390fd5b600081116122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614a18565b60405180910390fd5b602160149054906101000a900460ff16806123325750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123865750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc906149d8565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124695750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614ab8565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125755750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156126175750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561290c57426126346102586022546134d990919063ffffffff16565b106127f5576009600a6126479190614d49565b640218711a006126579190614e67565b61267283612664866110e7565b6134d990919063ffffffff16565b11156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614af8565b60405180910390fd5b6009600a6126c19190614d49565b63a0eebb006126d09190614e67565b821115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906149b8565b60405180910390fd5b42612769602d600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614a38565b60405180910390fd5b42600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506128d4565b4261284c601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b1061288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b600b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9e574261297a6102586022546134d990919063ffffffff16565b10612a6257426129d6602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612b41565b42612ab9601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612be9575042612be762015180600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546134d990919063ffffffff16565b105b15612c7e576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b6000612cd0612cae600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e7565b612cc2606486611c9290919063ffffffff16565b611ca890919063ffffffff16565b9050600f60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091506001811180612d5a57506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612d9757601360405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002811180612de857506002600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612e2557601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003811180612e7757506003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b15612eb457601b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612f9c57612f556001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546134d990919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561304a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561326657426130676102586022546134d990919063ffffffff16565b1061314f57426130c3602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10613103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fa90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061322e565b426131a6601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602360009054906101000a900460ff161580156132d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156133ad5760006132e1306110e7565b9050602454811061338f57600060265414613361576000613303602654610da1565b90506000602681905550600061332282846134ef90919063ffffffff16565b905061335081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61335a8230613505565b505061338e565b61338d81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600047905060255481106133aa576133a98161dead611e91565b5b50505b5b602360009054906101000a900460ff16156133eb576040518060800160405280600081526020016000815260200160008152602001600081525090505b60008160000151148015613403575060008160600151145b8015613413575060008160200151145b8015613423575060008160400151145b156134385761343384848461396d565b613445565b61344484848484613b26565b5b50505050565b6000838311158290613493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348a91906148d6565b60405180910390fd5b5082840390509392505050565b60006134d46009600a6134b39190614d49565b64e8d4a510006134c39190614e67565b600354611ca890919063ffffffff16565b905090565b600081836134e79190614c6f565b905092915050565b600081836134fd9190614ec1565b905092915050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156135915781602001602082028036833780820191505090505b50905030816000815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561367157600080fd5b505afa158015613685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a99190614235565b816001815181106136e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061373c30737a250d5630b4cf539739df2c5dacb4c659f2488d85611cc6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947846000848661379461012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b81526004016137b4959493929190614b63565b600060405180830381600087803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613817929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a890614998565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106138eb5782846138ee565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395d90614ad8565b60405180910390fd5b9250929050565b60006139776134a0565b9050600061398e8284611c9290919063ffffffff16565b90506139e281600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b179190614b18565b60405180910390a35050505050565b6000613b306134a0565b90506000613b478285611c9290919063ffffffff16565b90506000613b558585613ee5565b90506000613b6282613fcf565b90506000613b708483614075565b90506000613b7e8885614075565b9050613bd285600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6782600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc383602001516003546134ef90919063ffffffff16565b600381905550613d41836040015160016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e128360600151613e048560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b6134d990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6e83606001516026546134d990919063ffffffff16565b6026819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ed19190614b18565b60405180910390a350505050505050505050565b613eed61415e565b613ef561415e565b613f208360200151613f126103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816020018181525050613f548360600151613f466103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816060018181525050613f888360000151613f7a6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816000018181525050613fbc8360400151613fae6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b8160400181815250508091505092915050565b613fd761415e565b613fdf61415e565b6000613fe96134a0565b9050614002818560200151611c9290919063ffffffff16565b826020018181525050614022818560600151611c9290919063ffffffff16565b826060018181525050614042818560000151611c9290919063ffffffff16565b826000018181525050614062818560400151611c9290919063ffffffff16565b8260400181815250508192505050919050565b60006140d082602001516140c284606001516140b486604001516140a688600001518a6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b905092915050565b8280546140e490615005565b90600052602060002090601f016020900481019282614106576000855561414d565b82601f1061411f57805160ff191683800117855561414d565b8280016001018555821561414d579182015b8281111561414c578251825591602001919060010190614131565b5b50905061415a9190614186565b5090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5b8082111561419f576000816000905550600101614187565b5090565b6000813590506141b28161563c565b92915050565b6000815190506141c78161563c565b92915050565b6000813590506141dc81615653565b92915050565b6000813590506141f18161566a565b92915050565b60008135905061420681615681565b92915050565b60006020828403121561421e57600080fd5b600061422c848285016141a3565b91505092915050565b60006020828403121561424757600080fd5b6000614255848285016141b8565b91505092915050565b60006020828403121561427057600080fd5b600061427e848285016141cd565b91505092915050565b6000806040838503121561429a57600080fd5b60006142a8858286016141a3565b92505060206142b9858286016141a3565b9150509250929050565b6000806000606084860312156142d857600080fd5b60006142e6868287016141a3565b93505060206142f7868287016141a3565b9250506040614308868287016141f7565b9150509250925092565b6000806040838503121561432557600080fd5b6000614333858286016141a3565b9250506020614344858286016141e2565b9150509250929050565b6000806040838503121561436157600080fd5b600061436f858286016141a3565b9250506020614380858286016141f7565b9150509250929050565b60006020828403121561439c57600080fd5b60006143aa848285016141f7565b91505092915050565b60006143bf83836143e9565b60208301905092915050565b6143d481614f66565b82525050565b6143e381614f07565b82525050565b6143f281614ef5565b82525050565b61440181614ef5565b82525050565b61441861441382614ef5565b615037565b82525050565b600061442982614c1f565b6144338185614c42565b935061443e83614c0f565b8060005b8381101561446f57815161445688826143b3565b975061446183614c35565b925050600181019050614442565b5085935050505092915050565b61448581614f19565b82525050565b61449c61449782614f25565b615049565b82525050565b6144ab81614f78565b82525050565b6144ba81614f9c565b82525050565b60006144cb82614c2a565b6144d58185614c53565b93506144e5818560208601614fd2565b6144ee816150f2565b840191505092915050565b6000614506601c83614c53565b91506145118261511d565b602082019050919050565b6000614529602383614c53565b915061453482615146565b604082019050919050565b600061454c602683614c53565b915061455782615195565b604082019050919050565b600061456f602283614c53565b915061457a826151e4565b604082019050919050565b6000614592603383614c53565b915061459d82615233565b604082019050919050565b60006145b5602583614c53565b91506145c082615282565b604082019050919050565b60006145d8604583614c53565b91506145e3826152d1565b606082019050919050565b60006145fb602083614c64565b915061460682615346565b602082019050919050565b600061461e601983614c53565b91506146298261536f565b602082019050919050565b6000614641600183614c64565b915061464c82615398565b600182019050919050565b6000614664602083614c53565b915061466f826153c1565b602082019050919050565b6000614687602983614c53565b9150614692826153ea565b604082019050919050565b60006146aa602d83614c53565b91506146b582615439565b604082019050919050565b60006146cd602d83614c53565b91506146d882615488565b604082019050919050565b60006146f0602583614c53565b91506146fb826154d7565b604082019050919050565b6000614713602483614c53565b915061471e82615526565b604082019050919050565b6000614736601883614c53565b915061474182615575565b602082019050919050565b6000614759601e83614c53565b91506147648261559e565b602082019050919050565b600061477c604683614c53565b9150614787826155c7565b606082019050919050565b61479b81614f4f565b82525050565b6147aa81614f59565b82525050565b60006147bc8285614407565b6014820191506147cc8284614407565b6014820191508190509392505050565b60006147e782614634565b91506147f38285614407565b601482019150614803828461448b565b602082019150614812826145ee565b91508190509392505050565b600060208201905061483360008301846143f8565b92915050565b600060208201905061484e60008301846143da565b92915050565b6000602082019050614869600083018461447c565b92915050565b600060208201905061488460008301846144a2565b92915050565b600060808201905061489f60008301876144b1565b81810360208301526148b1818661441e565b90506148c060408301856143f8565b6148cd6060830184614792565b95945050505050565b600060208201905081810360008301526148f081846144c0565b905092915050565b60006020820190508181036000830152614911816144f9565b9050919050565b600060208201905081810360008301526149318161451c565b9050919050565b600060208201905081810360008301526149518161453f565b9050919050565b6000602082019050818103600083015261497181614562565b9050919050565b6000602082019050818103600083015261499181614585565b9050919050565b600060208201905081810360008301526149b1816145a8565b9050919050565b600060208201905081810360008301526149d1816145cb565b9050919050565b600060208201905081810360008301526149f181614611565b9050919050565b60006020820190508181036000830152614a1181614657565b9050919050565b60006020820190508181036000830152614a318161467a565b9050919050565b60006020820190508181036000830152614a518161469d565b9050919050565b60006020820190508181036000830152614a71816146c0565b9050919050565b60006020820190508181036000830152614a91816146e3565b9050919050565b60006020820190508181036000830152614ab181614706565b9050919050565b60006020820190508181036000830152614ad181614729565b9050919050565b60006020820190508181036000830152614af18161474c565b9050919050565b60006020820190508181036000830152614b118161476f565b9050919050565b6000602082019050614b2d6000830184614792565b92915050565b6000604082019050614b486000830185614792565b8181036020830152614b5a818461441e565b90509392505050565b600060a082019050614b786000830188614792565b614b8560208301876144b1565b8181036040830152614b97818661441e565b9050614ba660608301856143cb565b614bb36080830184614792565b9695505050505050565b6000606082019050614bd26000830186614792565b614bdf6020830185614792565b614bec6040830184614792565b949350505050565b6000602082019050614c0960008301846147a1565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7a82614f4f565b9150614c8583614f4f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cba57614cb9615065565b5b828201905092915050565b6000614cd082614f4f565b9150614cdb83614f4f565b925082614ceb57614cea615094565b5b828204905092915050565b6000808291508390505b6001851115614d4057808604811115614d1c57614d1b615065565b5b6001851615614d2b5780820291505b8081029050614d3985615110565b9450614d00565b94509492505050565b6000614d5482614f4f565b9150614d5f83614f59565b9250614d8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614d94565b905092915050565b600082614da45760019050614e60565b81614db25760009050614e60565b8160018114614dc85760028114614dd257614e01565b6001915050614e60565b60ff841115614de457614de3615065565b5b8360020a915084821115614dfb57614dfa615065565b5b50614e60565b5060208310610133831016604e8410600b8410161715614e365782820a905083811115614e3157614e30615065565b5b614e60565b614e438484846001614cf6565b92509050818404811115614e5a57614e59615065565b5b81810290505b9392505050565b6000614e7282614f4f565b9150614e7d83614f4f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb657614eb5615065565b5b828202905092915050565b6000614ecc82614f4f565b9150614ed783614f4f565b925082821015614eea57614ee9615065565b5b828203905092915050565b6000614f0082614f2f565b9050919050565b6000614f1282614f2f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f7182614fae565b9050919050565b6000614f8382614f8a565b9050919050565b6000614f9582614f2f565b9050919050565b6000614fa782614f4f565b9050919050565b6000614fb982614fc0565b9050919050565b6000614fcb82614f2f565b9050919050565b60005b83811015614ff0578082015181840152602081019050614fd5565b83811115614fff576000848401525b50505050565b6000600282049050600182168061501d57607f821691505b60208210811415615031576150306150c3565b5b50919050565b600061504282615053565b9050919050565b6000819050919050565b600061505e82615103565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f54726164696e6720697320616c726561647920656e61626c65642e2000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206275792067726561746572207468616e20302e3325206f66204c50206360008201527f616e206265206d61646520666f7220746865206669727374203130206d696e7560208201527f7465732e20000000000000000000000000000000000000000000000000000000604082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203435207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203330207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320697320626c61636b6c69737465642e200000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f5468652073616c65206973206c696d6974656420746f203125206f66204c502060008201527f706572206164647265737320666f7220746865206669727374203130206d696e60208201527f757465732e200000000000000000000000000000000000000000000000000000604082015250565b61564581614ef5565b811461565057600080fd5b50565b61565c81614f07565b811461566757600080fd5b50565b61567381614f19565b811461567e57600080fd5b50565b61568a81614f4f565b811461569557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b5478bf4b5d8aadc0a167c6e0ea3cbaf584742baef743a8957f31ace944f27064736f6c63430008040033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.