THEBET_TOKEN
Deploy on AlchemyContract Information
The following smart contract is called THEBET_TOKEN. It is an ERC20 token with additional features such as transaction limits, blacklisting, and automatic liquidity provision. The contract uses the Uniswap V2 router for swapping tokens and adding liquidity. The contract also includes a fee system where a percentage of each transaction is taken as a fee and distributed to the fee receiver. The contract owner can update fees, swap thresholds, and the fee receiver address.
More Info
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, _allowances[owner][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = _allowances[owner][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
}
contract THEBET_TOKEN is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 private uniswapV2Router;
address private uniswapV2Pair;
uint256 public maxTransactionAmount;
uint256 public maxWallet;
uint256 public swapTokensThreshold;
bool public limitsInEffect = true;
bool private _isSwapping;
uint256 private _swapFee = 6;
uint256 private _tokensForFee;
address private _feeReceiver;
// exlcude from fees and max transaction amount
mapping (address => bool) public isExcludedFromFees;
mapping (address => bool) private _isExcludedMaxTransactionAmount;
// for bots
mapping (address => bool) public isBlacklisted;
// any transfer *to* these addresses could be subject to a maximum transfer amount
mapping (address => bool) private _automatedMarketMakerPairs;
// to stop bot spam buys and sells on launch
mapping(address => uint256) private _holderLastTransferBlock;
/**
* @dev Throws if called by any account other than the _feeReceiver
*/
modifier teamOROwner() {
require(_feeReceiver == _msgSender() || owner() == _msgSender(), "Caller is not the _feeReceiver address nor owner.");
_;
}
constructor() ERC20("The BET", "BET") payable {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
uniswapV2Router = _uniswapV2Router;
uint256 totalSupply = 1e7 * 1e18; // 10M
uint256 totalLiquidity = 65e5 * 1e18; // 6.5M
maxTransactionAmount = totalSupply * 325 / 100000;
maxWallet = totalSupply * 65 / 10000;
swapTokensThreshold = totalSupply * 1 / 1000;
_feeReceiver = owner();
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
_isExcludedMaxTransactionAmount[owner()] = true;
_isExcludedMaxTransactionAmount[address(this)] = true;
_isExcludedMaxTransactionAmount[address(0xdead)] = true;
_mint(address(this), totalLiquidity);
_mint(msg.sender, totalSupply.sub(totalLiquidity));
}
/**
* @dev Once live, can never be switched off
*/
function startTrading() external teamOROwner {
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
_isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
_automatedMarketMakerPairs[address(uniswapV2Pair)] = true;
_approve(address(this), address(uniswapV2Router), balanceOf(address(this)));
uniswapV2Router.addLiquidityETH{value: address(this).balance} (
address(this),
balanceOf(address(this)),
0,
0,
owner(),
block.timestamp
);
}
/**
* @dev Remove limits after token is somewhat stable
*/
function removeLimits() external teamOROwner {
limitsInEffect = false;
}
/**
* @dev Exclude from fee calculation
*/
function excludeFromFees(address account, bool excluded) public teamOROwner {
isExcludedFromFees[account] = excluded;
}
/**
* @dev Blacklist certain addresses from transfering
*/
function blacklistAddress(address[] memory addrs, bool state) external teamOROwner {
for (uint i = 0; i < addrs.length; i++) {
if (addrs[i] != uniswapV2Pair && addrs[i] != address(uniswapV2Router))
isBlacklisted[addrs[i]] = state;
}
}
/**
* @dev Update token fees (max set to initial fee)
*/
function updateFees(uint256 fee) external onlyOwner {
_swapFee = fee;
require(_swapFee <= 6, "Must keep fees at 6% or less");
}
/**
* @dev Update wallet that receives fees and newly added LP
*/
function updateFeeReceiver(address newWallet) external teamOROwner {
_feeReceiver = newWallet;
}
/**
* @dev Very important function.
* Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken
*/
function updateSwapTokensThreshold(uint256 newThreshold) external teamOROwner returns (bool) {
require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
swapTokensThreshold = newThreshold;
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "_transfer:: Transfer from the zero address not allowed.");
require(to != address(0), "_transfer:: Transfer to the zero address not allowed.");
require(!isBlacklisted[from], "_transfer:: Your address has been marked as blacklisted.");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
// all to secure a smooth launch
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
!_isSwapping
) {
if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
require(_holderLastTransferBlock[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed.");
_holderLastTransferBlock[tx.origin] = block.number;
}
// on buy
if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount.");
require(amount.add(balanceOf(to)) <= maxWallet, "_transfer:: Max wallet exceeded");
}
// on sell
else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount.");
}
else if (!_isExcludedMaxTransactionAmount[to]) {
require(amount.add(balanceOf(to)) <= maxWallet, "_transfer:: Max wallet exceeded");
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensThreshold;
if (
canSwap &&
!_isSwapping &&
!_automatedMarketMakerPairs[from] &&
!isExcludedFromFees[from] &&
!isExcludedFromFees[to]
) {
_isSwapping = true;
swapBack();
_isSwapping = false;
}
bool takeFee = !_isSwapping;
// if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
if (
isExcludedFromFees[from] ||
isExcludedFromFees[to] ||
(!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to])
) takeFee = false;
uint256 fees = 0;
if (takeFee) {
fees = amount.mul(_swapFee).div(100);
_tokensForFee = amount.mul(_swapFee).div(100);
if (fees > 0)
super._transfer(from, address(this), fees);
amount -= fees;
}
super._transfer(from, to, amount);
}
function _swapTokensForEth(uint256 tokenAmount) internal {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0,
0,
_feeReceiver,
block.timestamp
);
}
function swapBack() internal {
uint256 contractBalance = balanceOf(address(this));
uint256 tokensForLiquidity = _tokensForFee.div(4); // 1/4th of the fee
uint256 tokensForFee = _tokensForFee.sub(tokensForLiquidity);
if (contractBalance == 0 || _tokensForFee == 0) return;
if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold;
// Halve the amount of liquidity tokens
uint256 liquidityTokens = contractBalance * tokensForLiquidity / _tokensForFee / 2;
uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
uint256 initialETHBalance = address(this).balance;
_swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethFee = ethBalance.mul(tokensForFee).div(_tokensForFee);
uint256 ethLiquidity = ethBalance - ethFee;
_tokensForFee = 0;
payable(_feeReceiver).transfer(ethFee);
if (liquidityTokens > 0 && ethLiquidity > 0)
_addLiquidity(liquidityTokens, ethLiquidity);
}
/**
* @dev Transfer eth stuck in contract to _feeReceiver
*/
function withdrawContractETH() external {
payable(_feeReceiver).transfer(address(this).balance);
}
/**
* @dev In case swap wont do it and sells/buys might be blocked
*/
function forceSwap() external teamOROwner {
_swapTokensForEth(balanceOf(address(this)));
}
receive() external payable {}
}
[{"inputs":[],"stateMutability":"payable","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":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":"addrs","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
[{"inputs":[],"stateMutability":"payable","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":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":"addrs","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
60806040526001600b60006101000a81548160ff0219169083151502179055506006600c556040518060400160405280600781526020017f54686520424554000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42455400000000000000000000000000000000000000000000000000000000008152508160039081620000a1919062000a6d565b508060049081620000b3919062000a6d565b505050620000d6620000ca6200040f60201b60201c565b6200041760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006a084595161401484a000000905060006a05606db4c03408968000009050620186a061014583620001bc919062000b83565b620001c8919062000c13565b600881905550612710604183620001e0919062000b83565b620001ec919062000c13565b6009819055506103e860018362000204919062000b83565b62000210919062000c13565b600a8190555062000226620004dd60201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002886200027a620004dd60201b60201c565b60016200050760201b60201c565b6200029b3060016200050760201b60201c565b620002b061dead60016200050760201b60201c565b600160106000620002c6620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003db30826200065960201b60201c565b6200040633620003fa8385620007d160201b62001b301790919060201c565b6200065960201b60201c565b50505062000e2c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005176200040f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620005bc57506200057e6200040f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005a4620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620005fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f59062000cd2565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c29062000d44565b60405180910390fd5b620006df60008383620007e960201b60201c565b8060026000828254620006f3919062000d66565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200074a919062000d66565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007b1919062000dd4565b60405180910390a3620007cd60008383620007ee60201b60201c565b5050565b60008183620007e1919062000df1565b905092915050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200087557607f821691505b6020821081036200088b576200088a6200082d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008b6565b620009018683620008b6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200094e62000948620009428462000919565b62000923565b62000919565b9050919050565b6000819050919050565b6200096a836200092d565b62000982620009798262000955565b848454620008c3565b825550505050565b600090565b620009996200098a565b620009a68184846200095f565b505050565b5b81811015620009ce57620009c26000826200098f565b600181019050620009ac565b5050565b601f82111562000a1d57620009e78162000891565b620009f284620008a6565b8101602085101562000a02578190505b62000a1a62000a1185620008a6565b830182620009ab565b50505b505050565b600082821c905092915050565b600062000a426000198460080262000a22565b1980831691505092915050565b600062000a5d838362000a2f565b9150826002028217905092915050565b62000a7882620007f3565b67ffffffffffffffff81111562000a945762000a93620007fe565b5b62000aa082546200085c565b62000aad828285620009d2565b600060209050601f83116001811462000ae5576000841562000ad0578287015190505b62000adc858262000a4f565b86555062000b4c565b601f19841662000af58662000891565b60005b8281101562000b1f5784890151825560018201915060208501945060208101905062000af8565b8683101562000b3f578489015162000b3b601f89168262000a2f565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b908262000919565b915062000b9d8362000919565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd95762000bd862000b54565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c208262000919565b915062000c2d8362000919565b92508262000c405762000c3f62000be4565b5b828204905092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f7420746865205f6665655265636569766572206160008201527f646472657373206e6f72206f776e65722e000000000000000000000000000000602082015250565b600062000cba60318362000c4b565b915062000cc78262000c5c565b604082019050919050565b6000602082019050818103600083015262000ced8162000cab565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d2c601f8362000c4b565b915062000d398262000cf4565b602082019050919050565b6000602082019050818103600083015262000d5f8162000d1d565b9050919050565b600062000d738262000919565b915062000d808362000919565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000db85762000db762000b54565b5b828201905092915050565b62000dce8162000919565b82525050565b600060208201905062000deb600083018462000dc3565b92915050565b600062000dfe8262000919565b915062000e0b8362000919565b92508282101562000e215762000e2062000b54565b5b828203905092915050565b61462c8062000e3c6000396000f3fe6080604052600436106101c65760003560e01c806384826368116100f7578063c69bebe411610095578063df778d2611610064578063df778d261461064f578063f2fde38b14610666578063f8b45b051461068f578063fe575a87146106ba576101cd565b8063c69bebe414610593578063c8c8ebe4146105bc578063cef85139146105e7578063dd62ed3e14610612576101cd565b806395d89b41116100d157806395d89b41146104c5578063a457c2d7146104f0578063a9059cbb1461052d578063c02466681461056a576101cd565b806384826368146104345780638baa63b21461045d5780638da5cb5b1461049a576101cd565b80633dd5b2da1161016457806370a082311161013e57806370a08231146103a0578063715018a6146103dd578063751039fc146103f457806378dacee11461040b576101cd565b80633dd5b2da146103215780634a62bb65146103385780634fbee19314610363576101cd565b806323b872dd116101a057806323b872dd14610265578063293230b8146102a2578063313ce567146102b957806339509351146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806318160ddd1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f7565b6040516101f49190613111565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906131db565b610789565b6040516102319190613236565b60405180910390f35b34801561024657600080fd5b5061024f6107ac565b60405161025c9190613260565b60405180910390f35b34801561027157600080fd5b5061028c6004803603810190610287919061327b565b6107b6565b6040516102999190613236565b60405180910390f35b3480156102ae57600080fd5b506102b76107e5565b005b3480156102c557600080fd5b506102ce610c85565b6040516102db91906132ea565b60405180910390f35b3480156102f057600080fd5b5061030b600480360381019061030691906131db565b610c8e565b6040516103189190613236565b60405180910390f35b34801561032d57600080fd5b50610336610d38565b005b34801561034457600080fd5b5061034d610da3565b60405161035a9190613236565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613305565b610db6565b6040516103979190613236565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613305565b610dd6565b6040516103d49190613260565b60405180910390f35b3480156103e957600080fd5b506103f2610e1e565b005b34801561040057600080fd5b50610409610ea6565b005b34801561041757600080fd5b50610432600480360381019061042d9190613332565b610f9e565b005b34801561044057600080fd5b5061045b600480360381019061045691906134d3565b61106a565b005b34801561046957600080fd5b50610484600480360381019061047f9190613332565b6112c0565b6040516104919190613236565b60405180910390f35b3480156104a657600080fd5b506104af611474565b6040516104bc919061353e565b60405180910390f35b3480156104d157600080fd5b506104da61149e565b6040516104e79190613111565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906131db565b611530565b6040516105249190613236565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906131db565b61161a565b6040516105619190613236565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613559565b61163d565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190613305565b611773565b005b3480156105c857600080fd5b506105d1611892565b6040516105de9190613260565b60405180910390f35b3480156105f357600080fd5b506105fc611898565b6040516106099190613260565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613599565b61189e565b6040516106469190613260565b60405180910390f35b34801561065b57600080fd5b50610664611925565b005b34801561067257600080fd5b5061068d60048036038101906106889190613305565b611a13565b005b34801561069b57600080fd5b506106a4611b0a565b6040516106b19190613260565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190613305565b611b10565b6040516106ee9190613236565b60405180910390f35b60606003805461070690613608565b80601f016020809104026020016040519081016040528092919081815260200182805461073290613608565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b5050505050905090565b600080610794611b46565b90506107a1818585611b4e565b600191505092915050565b6000600254905090565b6000806107c1611b46565b90506107ce858285611d17565b6107d9858585611da3565b60019150509392505050565b6107ed611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610881575061084b611b46565b73ffffffffffffffffffffffffffffffffffffffff16610869611474565b73ffffffffffffffffffffffffffffffffffffffff16145b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b7906136ab565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095191906136e0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906136e0565b6040518363ffffffff1660e01b8152600401610a1b92919061370d565b6020604051808303816000875af1158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e91906136e0565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610bc730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610bc230610dd6565b611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610c1030610dd6565b600080610c1b611474565b426040518863ffffffff1660e01b8152600401610c3d9695949392919061377b565b60606040518083038185885af1158015610c5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c8091906137f1565b505050565b60006012905090565b600080610c99611b46565b9050610d2d818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d289190613873565b611b4e565b600191505092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610da0573d6000803e3d6000fd5b50565b600b60009054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e26611b46565b73ffffffffffffffffffffffffffffffffffffffff16610e44611474565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613915565b60405180910390fd5b610ea460006127f9565b565b610eae611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f425750610f0c611b46565b73ffffffffffffffffffffffffffffffffffffffff16610f2a611474565b73ffffffffffffffffffffffffffffffffffffffff16145b610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906136ab565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550565b610fa6611b46565b73ffffffffffffffffffffffffffffffffffffffff16610fc4611474565b73ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613915565b60405180910390fd5b80600c819055506006600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613981565b60405180910390fd5b50565b611072611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061110657506110d0611b46565b73ffffffffffffffffffffffffffffffffffffffff166110ee611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906136ab565b60405180910390fd5b60005b82518110156112bb57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683828151811061119d5761119c6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156112315750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168382815181106112105761120f6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112a857816011600085848151811061124e5761124d6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806112b3906139d0565b915050611148565b505050565b60006112ca611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061135e5750611328611b46565b73ffffffffffffffffffffffffffffffffffffffff16611346611474565b73ffffffffffffffffffffffffffffffffffffffff16145b61139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906136ab565b60405180910390fd5b620186a060016113ab6107ac565b6113b59190613a18565b6113bf9190613aa1565b821015611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613b44565b60405180910390fd5b6103e8600561140e6107ac565b6114189190613a18565b6114229190613aa1565b821115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613bd6565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ad90613608565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613608565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b60008061153b611b46565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890613c68565b60405180910390fd5b61160e8286868403611b4e565b60019250505092915050565b600080611625611b46565b9050611632818585611da3565b600191505092915050565b611645611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116d957506116a3611b46565b73ffffffffffffffffffffffffffffffffffffffff166116c1611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f906136ab565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61177b611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061180f57506117d9611b46565b73ffffffffffffffffffffffffffffffffffffffff166117f7611474565b73ffffffffffffffffffffffffffffffffffffffff16145b61184e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906136ab565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61192d611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806119c1575061198b611b46565b73ffffffffffffffffffffffffffffffffffffffff166119a9611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906136ab565b60405180910390fd5b611a11611a0c30610dd6565b6128bf565b565b611a1b611b46565b73ffffffffffffffffffffffffffffffffffffffff16611a39611474565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613915565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613cfa565b60405180910390fd5b611b07816127f9565b50565b60095481565b60116020528060005260406000206000915054906101000a900460ff1681565b60008183611b3e9190613d1a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613e52565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d0a9190613260565b60405180910390a3505050565b6000611d23848461189e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d9d5781811015611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613ebe565b60405180910390fd5b611d9c8484848403611b4e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990613f50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613fe2565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590614074565b60405180910390fd5b60008103611f2757611f2283836000612b02565b6127f4565b600b60009054906101000a900460ff161561247e57611f44611474565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb25750611f82611474565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fcb5750600b60019054906101000a900460ff16155b1561247d57611fd8611474565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156120615750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156121865743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121389061412c565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122295750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d757600854811115612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a906141e4565b60405180910390fd5b60095461229161228284610dd6565b83612d8190919063ffffffff16565b11156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614250565b60405180910390fd5b61247c565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561237a5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c9576008548111156123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614308565b60405180910390fd5b61247b565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661247a5760095461243861242984610dd6565b83612d8190919063ffffffff16565b1115612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614250565b60405180910390fd5b5b5b5b5b5b600061248930610dd6565b90506000600a5482101590508080156124af5750600b60019054906101000a900460ff16155b80156125055750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561255b5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125b15750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f5576001600b60016101000a81548160ff0219169083151502179055506125d9612d97565b6000600b60016101000a81548160ff0219169083151502179055505b6000600b60019054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ab5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127565750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127555750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561276057600090505b600081156127e4576127906064612782600c5488612f4290919063ffffffff16565b612f5890919063ffffffff16565b90506127ba60646127ac600c5488612f4290919063ffffffff16565b612f5890919063ffffffff16565b600d8190555060008111156127d5576127d4873083612b02565b5b80856127e19190613d1a565b94505b6127ef878787612b02565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156128dc576128db613364565b5b60405190808252806020026020018201604052801561290a5781602001602082028036833780820191505090505b5090503081600081518110612922576129216139a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ed91906136e0565b81600181518110612a0157612a006139a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a6830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612acc9594939291906143e6565b600060405180830381600087803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b68906144b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd790614544565b60405180910390fd5b612beb838383612f6e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c68906145d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d049190613873565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d689190613260565b60405180910390a3612d7b848484612f73565b50505050565b60008183612d8f9190613873565b905092915050565b6000612da230610dd6565b90506000612dbc6004600d54612f5890919063ffffffff16565b90506000612dd582600d54611b3090919063ffffffff16565b90506000831480612de857506000600d54145b15612df557505050612f40565b600a54831115612e0557600a5492505b60006002600d548486612e189190613a18565b612e229190613aa1565b612e2c9190613aa1565b90506000612e438286611b3090919063ffffffff16565b90506000479050612e53826128bf565b6000612e688247611b3090919063ffffffff16565b90506000612e93600d54612e858885612f4290919063ffffffff16565b612f5890919063ffffffff16565b905060008183612ea39190613d1a565b90506000600d81905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612f15573d6000803e3d6000fd5b50600086118015612f265750600081115b15612f3657612f358682612f78565b5b5050505050505050505b565b60008183612f509190613a18565b905092915050565b60008183612f669190613aa1565b905092915050565b505050565b505050565b612fa530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161302e9695949392919061377b565b60606040518083038185885af115801561304c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061307191906137f1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130b2578082015181840152602081019050613097565b838111156130c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006130e382613078565b6130ed8185613083565b93506130fd818560208601613094565b613106816130c7565b840191505092915050565b6000602082019050818103600083015261312b81846130d8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061317282613147565b9050919050565b61318281613167565b811461318d57600080fd5b50565b60008135905061319f81613179565b92915050565b6000819050919050565b6131b8816131a5565b81146131c357600080fd5b50565b6000813590506131d5816131af565b92915050565b600080604083850312156131f2576131f161313d565b5b600061320085828601613190565b9250506020613211858286016131c6565b9150509250929050565b60008115159050919050565b6132308161321b565b82525050565b600060208201905061324b6000830184613227565b92915050565b61325a816131a5565b82525050565b60006020820190506132756000830184613251565b92915050565b6000806000606084860312156132945761329361313d565b5b60006132a286828701613190565b93505060206132b386828701613190565b92505060406132c4868287016131c6565b9150509250925092565b600060ff82169050919050565b6132e4816132ce565b82525050565b60006020820190506132ff60008301846132db565b92915050565b60006020828403121561331b5761331a61313d565b5b600061332984828501613190565b91505092915050565b6000602082840312156133485761334761313d565b5b6000613356848285016131c6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61339c826130c7565b810181811067ffffffffffffffff821117156133bb576133ba613364565b5b80604052505050565b60006133ce613133565b90506133da8282613393565b919050565b600067ffffffffffffffff8211156133fa576133f9613364565b5b602082029050602081019050919050565b600080fd5b600061342361341e846133df565b6133c4565b905080838252602082019050602084028301858111156134465761344561340b565b5b835b8181101561346f578061345b8882613190565b845260208401935050602081019050613448565b5050509392505050565b600082601f83011261348e5761348d61335f565b5b813561349e848260208601613410565b91505092915050565b6134b08161321b565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b600080604083850312156134ea576134e961313d565b5b600083013567ffffffffffffffff81111561350857613507613142565b5b61351485828601613479565b9250506020613525858286016134be565b9150509250929050565b61353881613167565b82525050565b6000602082019050613553600083018461352f565b92915050565b600080604083850312156135705761356f61313d565b5b600061357e85828601613190565b925050602061358f858286016134be565b9150509250929050565b600080604083850312156135b0576135af61313d565b5b60006135be85828601613190565b92505060206135cf85828601613190565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061362057607f821691505b602082108103613633576136326135d9565b5b50919050565b7f43616c6c6572206973206e6f7420746865205f6665655265636569766572206160008201527f646472657373206e6f72206f776e65722e000000000000000000000000000000602082015250565b6000613695603183613083565b91506136a082613639565b604082019050919050565b600060208201905081810360008301526136c481613688565b9050919050565b6000815190506136da81613179565b92915050565b6000602082840312156136f6576136f561313d565b5b6000613704848285016136cb565b91505092915050565b6000604082019050613722600083018561352f565b61372f602083018461352f565b9392505050565b6000819050919050565b6000819050919050565b600061376561376061375b84613736565b613740565b6131a5565b9050919050565b6137758161374a565b82525050565b600060c082019050613790600083018961352f565b61379d6020830188613251565b6137aa604083018761376c565b6137b7606083018661376c565b6137c4608083018561352f565b6137d160a0830184613251565b979650505050505050565b6000815190506137eb816131af565b92915050565b60008060006060848603121561380a5761380961313d565b5b6000613818868287016137dc565b9350506020613829868287016137dc565b925050604061383a868287016137dc565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387e826131a5565b9150613889836131a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138be576138bd613844565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ff602083613083565b915061390a826138c9565b602082019050919050565b6000602082019050818103600083015261392e816138f2565b9050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b600061396b601c83613083565b915061397682613935565b602082019050919050565b6000602082019050818103600083015261399a8161395e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139db826131a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a0d57613a0c613844565b5b600182019050919050565b6000613a23826131a5565b9150613a2e836131a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a6757613a66613844565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aac826131a5565b9150613ab7836131a5565b925082613ac757613ac6613a72565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b6000613b2e603883613083565b9150613b3982613ad2565b604082019050919050565b60006020820190508181036000830152613b5d81613b21565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b6000613bc0603783613083565b9150613bcb82613b64565b604082019050919050565b60006020820190508181036000830152613bef81613bb3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c52602583613083565b9150613c5d82613bf6565b604082019050919050565b60006020820190508181036000830152613c8181613c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce4602683613083565b9150613cef82613c88565b604082019050919050565b60006020820190508181036000830152613d1381613cd7565b9050919050565b6000613d25826131a5565b9150613d30836131a5565b925082821015613d4357613d42613844565b5b828203905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613daa602483613083565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e3c602283613083565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ea8601d83613083565b9150613eb382613e72565b602082019050919050565b60006020820190508181036000830152613ed781613e9b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722066726f6d20746865207a6560008201527f726f2061646472657373206e6f7420616c6c6f7765642e000000000000000000602082015250565b6000613f3a603783613083565b9150613f4582613ede565b604082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f5f7472616e736665723a3a205472616e7366657220746f20746865207a65726f60008201527f2061646472657373206e6f7420616c6c6f7765642e0000000000000000000000602082015250565b6000613fcc603583613083565b9150613fd782613f70565b604082019050919050565b60006020820190508181036000830152613ffb81613fbf565b9050919050565b7f5f7472616e736665723a3a20596f75722061646472657373206861732062656560008201527f6e206d61726b656420617320626c61636b6c69737465642e0000000000000000602082015250565b600061405e603883613083565b915061406982614002565b604082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614116604983613083565b915061412182614094565b606082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b60006141ce604183613083565b91506141d98261414c565b606082019050919050565b600060208201905081810360008301526141fd816141c1565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b600061423a601f83613083565b915061424582614204565b602082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b60006142f2604283613083565b91506142fd82614270565b606082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61435d81613167565b82525050565b600061436f8383614354565b60208301905092915050565b6000602082019050919050565b600061439382614328565b61439d8185614333565b93506143a883614344565b8060005b838110156143d95781516143c08882614363565b97506143cb8361437b565b9250506001810190506143ac565b5085935050505092915050565b600060a0820190506143fb6000830188613251565b614408602083018761376c565b818103604083015261441a8186614388565b9050614429606083018561352f565b6144366080830184613251565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061449c602583613083565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061452e602383613083565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006145c0602683613083565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b905091905056fea264697066735822122028bcbf3e3455db63570d124824abbee5cc90bc95ebd1490f21e8a708b10f8cc864736f6c634300080f0033
60806040526001600b60006101000a81548160ff0219169083151502179055506006600c556040518060400160405280600781526020017f54686520424554000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42455400000000000000000000000000000000000000000000000000000000008152508160039081620000a1919062000a6d565b508060049081620000b3919062000a6d565b505050620000d6620000ca6200040f60201b60201c565b6200041760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006a084595161401484a000000905060006a05606db4c03408968000009050620186a061014583620001bc919062000b83565b620001c8919062000c13565b600881905550612710604183620001e0919062000b83565b620001ec919062000c13565b6009819055506103e860018362000204919062000b83565b62000210919062000c13565b600a8190555062000226620004dd60201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002886200027a620004dd60201b60201c565b60016200050760201b60201c565b6200029b3060016200050760201b60201c565b620002b061dead60016200050760201b60201c565b600160106000620002c6620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003db30826200065960201b60201c565b6200040633620003fa8385620007d160201b62001b301790919060201c565b6200065960201b60201c565b50505062000e2c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005176200040f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620005bc57506200057e6200040f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005a4620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620005fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f59062000cd2565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c29062000d44565b60405180910390fd5b620006df60008383620007e960201b60201c565b8060026000828254620006f3919062000d66565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200074a919062000d66565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007b1919062000dd4565b60405180910390a3620007cd60008383620007ee60201b60201c565b5050565b60008183620007e1919062000df1565b905092915050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200087557607f821691505b6020821081036200088b576200088a6200082d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008b6565b620009018683620008b6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200094e62000948620009428462000919565b62000923565b62000919565b9050919050565b6000819050919050565b6200096a836200092d565b62000982620009798262000955565b848454620008c3565b825550505050565b600090565b620009996200098a565b620009a68184846200095f565b505050565b5b81811015620009ce57620009c26000826200098f565b600181019050620009ac565b5050565b601f82111562000a1d57620009e78162000891565b620009f284620008a6565b8101602085101562000a02578190505b62000a1a62000a1185620008a6565b830182620009ab565b50505b505050565b600082821c905092915050565b600062000a426000198460080262000a22565b1980831691505092915050565b600062000a5d838362000a2f565b9150826002028217905092915050565b62000a7882620007f3565b67ffffffffffffffff81111562000a945762000a93620007fe565b5b62000aa082546200085c565b62000aad828285620009d2565b600060209050601f83116001811462000ae5576000841562000ad0578287015190505b62000adc858262000a4f565b86555062000b4c565b601f19841662000af58662000891565b60005b8281101562000b1f5784890151825560018201915060208501945060208101905062000af8565b8683101562000b3f578489015162000b3b601f89168262000a2f565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b908262000919565b915062000b9d8362000919565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd95762000bd862000b54565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c208262000919565b915062000c2d8362000919565b92508262000c405762000c3f62000be4565b5b828204905092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f7420746865205f6665655265636569766572206160008201527f646472657373206e6f72206f776e65722e000000000000000000000000000000602082015250565b600062000cba60318362000c4b565b915062000cc78262000c5c565b604082019050919050565b6000602082019050818103600083015262000ced8162000cab565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d2c601f8362000c4b565b915062000d398262000cf4565b602082019050919050565b6000602082019050818103600083015262000d5f8162000d1d565b9050919050565b600062000d738262000919565b915062000d808362000919565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000db85762000db762000b54565b5b828201905092915050565b62000dce8162000919565b82525050565b600060208201905062000deb600083018462000dc3565b92915050565b600062000dfe8262000919565b915062000e0b8362000919565b92508282101562000e215762000e2062000b54565b5b828203905092915050565b61462c8062000e3c6000396000f3fe6080604052600436106101c65760003560e01c806384826368116100f7578063c69bebe411610095578063df778d2611610064578063df778d261461064f578063f2fde38b14610666578063f8b45b051461068f578063fe575a87146106ba576101cd565b8063c69bebe414610593578063c8c8ebe4146105bc578063cef85139146105e7578063dd62ed3e14610612576101cd565b806395d89b41116100d157806395d89b41146104c5578063a457c2d7146104f0578063a9059cbb1461052d578063c02466681461056a576101cd565b806384826368146104345780638baa63b21461045d5780638da5cb5b1461049a576101cd565b80633dd5b2da1161016457806370a082311161013e57806370a08231146103a0578063715018a6146103dd578063751039fc146103f457806378dacee11461040b576101cd565b80633dd5b2da146103215780634a62bb65146103385780634fbee19314610363576101cd565b806323b872dd116101a057806323b872dd14610265578063293230b8146102a2578063313ce567146102b957806339509351146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806318160ddd1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f7565b6040516101f49190613111565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906131db565b610789565b6040516102319190613236565b60405180910390f35b34801561024657600080fd5b5061024f6107ac565b60405161025c9190613260565b60405180910390f35b34801561027157600080fd5b5061028c6004803603810190610287919061327b565b6107b6565b6040516102999190613236565b60405180910390f35b3480156102ae57600080fd5b506102b76107e5565b005b3480156102c557600080fd5b506102ce610c85565b6040516102db91906132ea565b60405180910390f35b3480156102f057600080fd5b5061030b600480360381019061030691906131db565b610c8e565b6040516103189190613236565b60405180910390f35b34801561032d57600080fd5b50610336610d38565b005b34801561034457600080fd5b5061034d610da3565b60405161035a9190613236565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613305565b610db6565b6040516103979190613236565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613305565b610dd6565b6040516103d49190613260565b60405180910390f35b3480156103e957600080fd5b506103f2610e1e565b005b34801561040057600080fd5b50610409610ea6565b005b34801561041757600080fd5b50610432600480360381019061042d9190613332565b610f9e565b005b34801561044057600080fd5b5061045b600480360381019061045691906134d3565b61106a565b005b34801561046957600080fd5b50610484600480360381019061047f9190613332565b6112c0565b6040516104919190613236565b60405180910390f35b3480156104a657600080fd5b506104af611474565b6040516104bc919061353e565b60405180910390f35b3480156104d157600080fd5b506104da61149e565b6040516104e79190613111565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906131db565b611530565b6040516105249190613236565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906131db565b61161a565b6040516105619190613236565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613559565b61163d565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190613305565b611773565b005b3480156105c857600080fd5b506105d1611892565b6040516105de9190613260565b60405180910390f35b3480156105f357600080fd5b506105fc611898565b6040516106099190613260565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613599565b61189e565b6040516106469190613260565b60405180910390f35b34801561065b57600080fd5b50610664611925565b005b34801561067257600080fd5b5061068d60048036038101906106889190613305565b611a13565b005b34801561069b57600080fd5b506106a4611b0a565b6040516106b19190613260565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190613305565b611b10565b6040516106ee9190613236565b60405180910390f35b60606003805461070690613608565b80601f016020809104026020016040519081016040528092919081815260200182805461073290613608565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b5050505050905090565b600080610794611b46565b90506107a1818585611b4e565b600191505092915050565b6000600254905090565b6000806107c1611b46565b90506107ce858285611d17565b6107d9858585611da3565b60019150509392505050565b6107ed611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610881575061084b611b46565b73ffffffffffffffffffffffffffffffffffffffff16610869611474565b73ffffffffffffffffffffffffffffffffffffffff16145b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b7906136ab565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095191906136e0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906136e0565b6040518363ffffffff1660e01b8152600401610a1b92919061370d565b6020604051808303816000875af1158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e91906136e0565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610bc730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610bc230610dd6565b611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610c1030610dd6565b600080610c1b611474565b426040518863ffffffff1660e01b8152600401610c3d9695949392919061377b565b60606040518083038185885af1158015610c5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c8091906137f1565b505050565b60006012905090565b600080610c99611b46565b9050610d2d818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d289190613873565b611b4e565b600191505092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610da0573d6000803e3d6000fd5b50565b600b60009054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e26611b46565b73ffffffffffffffffffffffffffffffffffffffff16610e44611474565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613915565b60405180910390fd5b610ea460006127f9565b565b610eae611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f425750610f0c611b46565b73ffffffffffffffffffffffffffffffffffffffff16610f2a611474565b73ffffffffffffffffffffffffffffffffffffffff16145b610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906136ab565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550565b610fa6611b46565b73ffffffffffffffffffffffffffffffffffffffff16610fc4611474565b73ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613915565b60405180910390fd5b80600c819055506006600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613981565b60405180910390fd5b50565b611072611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061110657506110d0611b46565b73ffffffffffffffffffffffffffffffffffffffff166110ee611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906136ab565b60405180910390fd5b60005b82518110156112bb57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683828151811061119d5761119c6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156112315750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168382815181106112105761120f6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112a857816011600085848151811061124e5761124d6139a1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806112b3906139d0565b915050611148565b505050565b60006112ca611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061135e5750611328611b46565b73ffffffffffffffffffffffffffffffffffffffff16611346611474565b73ffffffffffffffffffffffffffffffffffffffff16145b61139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906136ab565b60405180910390fd5b620186a060016113ab6107ac565b6113b59190613a18565b6113bf9190613aa1565b821015611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613b44565b60405180910390fd5b6103e8600561140e6107ac565b6114189190613a18565b6114229190613aa1565b821115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613bd6565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ad90613608565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613608565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b60008061153b611b46565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890613c68565b60405180910390fd5b61160e8286868403611b4e565b60019250505092915050565b600080611625611b46565b9050611632818585611da3565b600191505092915050565b611645611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116d957506116a3611b46565b73ffffffffffffffffffffffffffffffffffffffff166116c1611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f906136ab565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61177b611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061180f57506117d9611b46565b73ffffffffffffffffffffffffffffffffffffffff166117f7611474565b73ffffffffffffffffffffffffffffffffffffffff16145b61184e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906136ab565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61192d611b46565b73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806119c1575061198b611b46565b73ffffffffffffffffffffffffffffffffffffffff166119a9611474565b73ffffffffffffffffffffffffffffffffffffffff16145b611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906136ab565b60405180910390fd5b611a11611a0c30610dd6565b6128bf565b565b611a1b611b46565b73ffffffffffffffffffffffffffffffffffffffff16611a39611474565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613915565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613cfa565b60405180910390fd5b611b07816127f9565b50565b60095481565b60116020528060005260406000206000915054906101000a900460ff1681565b60008183611b3e9190613d1a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613e52565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d0a9190613260565b60405180910390a3505050565b6000611d23848461189e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d9d5781811015611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613ebe565b60405180910390fd5b611d9c8484848403611b4e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990613f50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613fe2565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590614074565b60405180910390fd5b60008103611f2757611f2283836000612b02565b6127f4565b600b60009054906101000a900460ff161561247e57611f44611474565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb25750611f82611474565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fcb5750600b60019054906101000a900460ff16155b1561247d57611fd8611474565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156120615750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156121865743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121389061412c565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122295750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d757600854811115612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a906141e4565b60405180910390fd5b60095461229161228284610dd6565b83612d8190919063ffffffff16565b11156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614250565b60405180910390fd5b61247c565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561237a5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c9576008548111156123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614308565b60405180910390fd5b61247b565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661247a5760095461243861242984610dd6565b83612d8190919063ffffffff16565b1115612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614250565b60405180910390fd5b5b5b5b5b5b600061248930610dd6565b90506000600a5482101590508080156124af5750600b60019054906101000a900460ff16155b80156125055750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561255b5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125b15750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f5576001600b60016101000a81548160ff0219169083151502179055506125d9612d97565b6000600b60016101000a81548160ff0219169083151502179055505b6000600b60019054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ab5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127565750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127555750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561276057600090505b600081156127e4576127906064612782600c5488612f4290919063ffffffff16565b612f5890919063ffffffff16565b90506127ba60646127ac600c5488612f4290919063ffffffff16565b612f5890919063ffffffff16565b600d8190555060008111156127d5576127d4873083612b02565b5b80856127e19190613d1a565b94505b6127ef878787612b02565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156128dc576128db613364565b5b60405190808252806020026020018201604052801561290a5781602001602082028036833780820191505090505b5090503081600081518110612922576129216139a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ed91906136e0565b81600181518110612a0157612a006139a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a6830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612acc9594939291906143e6565b600060405180830381600087803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b68906144b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd790614544565b60405180910390fd5b612beb838383612f6e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c68906145d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d049190613873565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d689190613260565b60405180910390a3612d7b848484612f73565b50505050565b60008183612d8f9190613873565b905092915050565b6000612da230610dd6565b90506000612dbc6004600d54612f5890919063ffffffff16565b90506000612dd582600d54611b3090919063ffffffff16565b90506000831480612de857506000600d54145b15612df557505050612f40565b600a54831115612e0557600a5492505b60006002600d548486612e189190613a18565b612e229190613aa1565b612e2c9190613aa1565b90506000612e438286611b3090919063ffffffff16565b90506000479050612e53826128bf565b6000612e688247611b3090919063ffffffff16565b90506000612e93600d54612e858885612f4290919063ffffffff16565b612f5890919063ffffffff16565b905060008183612ea39190613d1a565b90506000600d81905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612f15573d6000803e3d6000fd5b50600086118015612f265750600081115b15612f3657612f358682612f78565b5b5050505050505050505b565b60008183612f509190613a18565b905092915050565b60008183612f669190613aa1565b905092915050565b505050565b505050565b612fa530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b4e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161302e9695949392919061377b565b60606040518083038185885af115801561304c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061307191906137f1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130b2578082015181840152602081019050613097565b838111156130c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006130e382613078565b6130ed8185613083565b93506130fd818560208601613094565b613106816130c7565b840191505092915050565b6000602082019050818103600083015261312b81846130d8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061317282613147565b9050919050565b61318281613167565b811461318d57600080fd5b50565b60008135905061319f81613179565b92915050565b6000819050919050565b6131b8816131a5565b81146131c357600080fd5b50565b6000813590506131d5816131af565b92915050565b600080604083850312156131f2576131f161313d565b5b600061320085828601613190565b9250506020613211858286016131c6565b9150509250929050565b60008115159050919050565b6132308161321b565b82525050565b600060208201905061324b6000830184613227565b92915050565b61325a816131a5565b82525050565b60006020820190506132756000830184613251565b92915050565b6000806000606084860312156132945761329361313d565b5b60006132a286828701613190565b93505060206132b386828701613190565b92505060406132c4868287016131c6565b9150509250925092565b600060ff82169050919050565b6132e4816132ce565b82525050565b60006020820190506132ff60008301846132db565b92915050565b60006020828403121561331b5761331a61313d565b5b600061332984828501613190565b91505092915050565b6000602082840312156133485761334761313d565b5b6000613356848285016131c6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61339c826130c7565b810181811067ffffffffffffffff821117156133bb576133ba613364565b5b80604052505050565b60006133ce613133565b90506133da8282613393565b919050565b600067ffffffffffffffff8211156133fa576133f9613364565b5b602082029050602081019050919050565b600080fd5b600061342361341e846133df565b6133c4565b905080838252602082019050602084028301858111156134465761344561340b565b5b835b8181101561346f578061345b8882613190565b845260208401935050602081019050613448565b5050509392505050565b600082601f83011261348e5761348d61335f565b5b813561349e848260208601613410565b91505092915050565b6134b08161321b565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b600080604083850312156134ea576134e961313d565b5b600083013567ffffffffffffffff81111561350857613507613142565b5b61351485828601613479565b9250506020613525858286016134be565b9150509250929050565b61353881613167565b82525050565b6000602082019050613553600083018461352f565b92915050565b600080604083850312156135705761356f61313d565b5b600061357e85828601613190565b925050602061358f858286016134be565b9150509250929050565b600080604083850312156135b0576135af61313d565b5b60006135be85828601613190565b92505060206135cf85828601613190565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061362057607f821691505b602082108103613633576136326135d9565b5b50919050565b7f43616c6c6572206973206e6f7420746865205f6665655265636569766572206160008201527f646472657373206e6f72206f776e65722e000000000000000000000000000000602082015250565b6000613695603183613083565b91506136a082613639565b604082019050919050565b600060208201905081810360008301526136c481613688565b9050919050565b6000815190506136da81613179565b92915050565b6000602082840312156136f6576136f561313d565b5b6000613704848285016136cb565b91505092915050565b6000604082019050613722600083018561352f565b61372f602083018461352f565b9392505050565b6000819050919050565b6000819050919050565b600061376561376061375b84613736565b613740565b6131a5565b9050919050565b6137758161374a565b82525050565b600060c082019050613790600083018961352f565b61379d6020830188613251565b6137aa604083018761376c565b6137b7606083018661376c565b6137c4608083018561352f565b6137d160a0830184613251565b979650505050505050565b6000815190506137eb816131af565b92915050565b60008060006060848603121561380a5761380961313d565b5b6000613818868287016137dc565b9350506020613829868287016137dc565b925050604061383a868287016137dc565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387e826131a5565b9150613889836131a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138be576138bd613844565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ff602083613083565b915061390a826138c9565b602082019050919050565b6000602082019050818103600083015261392e816138f2565b9050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b600061396b601c83613083565b915061397682613935565b602082019050919050565b6000602082019050818103600083015261399a8161395e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139db826131a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a0d57613a0c613844565b5b600182019050919050565b6000613a23826131a5565b9150613a2e836131a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a6757613a66613844565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aac826131a5565b9150613ab7836131a5565b925082613ac757613ac6613a72565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b6000613b2e603883613083565b9150613b3982613ad2565b604082019050919050565b60006020820190508181036000830152613b5d81613b21565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b6000613bc0603783613083565b9150613bcb82613b64565b604082019050919050565b60006020820190508181036000830152613bef81613bb3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c52602583613083565b9150613c5d82613bf6565b604082019050919050565b60006020820190508181036000830152613c8181613c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce4602683613083565b9150613cef82613c88565b604082019050919050565b60006020820190508181036000830152613d1381613cd7565b9050919050565b6000613d25826131a5565b9150613d30836131a5565b925082821015613d4357613d42613844565b5b828203905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613daa602483613083565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e3c602283613083565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ea8601d83613083565b9150613eb382613e72565b602082019050919050565b60006020820190508181036000830152613ed781613e9b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722066726f6d20746865207a6560008201527f726f2061646472657373206e6f7420616c6c6f7765642e000000000000000000602082015250565b6000613f3a603783613083565b9150613f4582613ede565b604082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f5f7472616e736665723a3a205472616e7366657220746f20746865207a65726f60008201527f2061646472657373206e6f7420616c6c6f7765642e0000000000000000000000602082015250565b6000613fcc603583613083565b9150613fd782613f70565b604082019050919050565b60006020820190508181036000830152613ffb81613fbf565b9050919050565b7f5f7472616e736665723a3a20596f75722061646472657373206861732062656560008201527f6e206d61726b656420617320626c61636b6c69737465642e0000000000000000602082015250565b600061405e603883613083565b915061406982614002565b604082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614116604983613083565b915061412182614094565b606082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b60006141ce604183613083565b91506141d98261414c565b606082019050919050565b600060208201905081810360008301526141fd816141c1565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b600061423a601f83613083565b915061424582614204565b602082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b60006142f2604283613083565b91506142fd82614270565b606082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61435d81613167565b82525050565b600061436f8383614354565b60208301905092915050565b6000602082019050919050565b600061439382614328565b61439d8185614333565b93506143a883614344565b8060005b838110156143d95781516143c08882614363565b97506143cb8361437b565b9250506001810190506143ac565b5085935050505092915050565b600060a0820190506143fb6000830188613251565b614408602083018761376c565b818103604083015261441a8186614388565b9050614429606083018561352f565b6144366080830184613251565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061449c602583613083565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061452e602383613083565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006145c0602683613083565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b905091905056fea264697066735822122028bcbf3e3455db63570d124824abbee5cc90bc95ebd1490f21e8a708b10f8cc864736f6c634300080f0033