ERC-20
Overview
Max Total Supply
10,000,000 ERC20 ***
Holders
963
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BuildAI
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: UNLICENSED /* Telegram: https://t.me/BUILDAIHUB Website: https://buildaierc.com/ X: https://twitter.com/BuildAI_erc Linktree: https://linktr.ee/BuildAI */ 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) { this; return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface 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) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 private _totalSupply = 10000000 * 10 ** decimals(); 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 recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: generation to the zero address"); _beforeTokenTransfer(address(0), account, amount); _balances[account] = amount; emit Transfer(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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library Address { function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _setOwner(_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 { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } abstract contract ERC20Burnable is Context, ERC20, Ownable { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual onlyOwner { _burn(_msgSender(), amount * 10 ** decimals()); } } contract BuildAI is ERC20, Ownable, ERC20Burnable { using Address for address payable; IRouter public router; address public pair; uint256 public initialAirdrop = 2249936 * 10 ** decimals(); bool public tradingEnabled = false; uint256 public ThresholdAmount = 10000 * 10 ** 18; address public marketingWallet; address public devWallet; address public constant deadWallet = 0x000000000000000000000000000000000000dEaD; struct Taxes { uint256 marketing; uint256 dev; uint256 liquidity; } Taxes public buyTaxes = Taxes(1000, 1000, 1000); Taxes public sellTaxes = Taxes(1000, 1000, 1000); mapping(address => bool) public exemptFee; constructor( address _marketingWallet, address _devWallet, string memory name, string memory symbol ) ERC20(name, symbol) { require( _marketingWallet != address(0), "Marketing wallet cannot be zero address" ); require(_devWallet != address(0), "dev wallet cannot be zero address"); _mint( address(0x6c233F2A4708E7a8Edd207E6C643E8C673d0a7f0), totalSupply() - (initialAirdrop) ); _mint(address(this), initialAirdrop); IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); pair = IFactory(_router.factory()).createPair( address(this), _router.WETH() ); router = _router; marketingWallet = _marketingWallet; devWallet = _devWallet; exemptFee[address(this)] = true; exemptFee[owner()] = true; exemptFee[marketingWallet] = true; exemptFee[devWallet] = true; exemptFee[deadWallet] = true; } function approve( address spender, uint256 amount ) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); _transfer(sender, recipient, amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public override returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public override returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function transfer( address recipient, uint256 amount ) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal override { require(amount > 0, "Transfer amount must be greater than zero"); if (!exemptFee[sender] && !exemptFee[recipient]) { require(tradingEnabled, "Trading not enabled"); } uint256 feeswap; uint256 fee; Taxes memory currentTaxes; if ( exemptFee[sender] || exemptFee[recipient] || (sender != pair && recipient != pair) ) { fee = 0; } else { if (recipient == pair) { feeswap = sellTaxes.marketing + sellTaxes.dev + sellTaxes.liquidity; currentTaxes = sellTaxes; } else { feeswap = buyTaxes.marketing + buyTaxes.dev + buyTaxes.liquidity; currentTaxes = buyTaxes; } fee = ((amount * feeswap) / 10000); } if (sender != pair) handle_fees(feeswap, currentTaxes); super._transfer(sender, recipient, amount - fee); if (feeswap > 0) { super._transfer(sender, address(this), fee); } } function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private { if (feeswap == 0) { return; } uint256 contractBalance = balanceOf(address(this)); if (contractBalance >= ThresholdAmount) { if (ThresholdAmount > 1) { contractBalance = ThresholdAmount; } uint256 denominator = feeswap * 2; uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) / denominator; uint256 AmountToSwap = contractBalance - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForETH(AmountToSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity); uint256 bnbToAddLiquidityWith = (unitBalance * swapTaxes.liquidity); if (bnbToAddLiquidityWith > 0) { addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith); } uint256 marketingAmt = (unitBalance * 2 * swapTaxes.marketing); if (marketingAmt > 0) { payable(marketingWallet).sendValue(marketingAmt); } uint256 devAmt = (unitBalance * 2 * swapTaxes.dev); if (devAmt > 0) { payable(devWallet).sendValue(devAmt); } } } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(router), tokenAmount); router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, deadWallet, block.timestamp ); } function updateTreshhold(uint256 new_amount) external onlyOwner { ThresholdAmount = new_amount * 10 ** decimals(); } function setBuyTaxes( uint256 _marketing, uint256 _dev, uint256 _liquidity ) external onlyOwner { uint256 totalTax = _marketing + _dev + _liquidity; require(totalTax <= 3000, "Must keep fees at 30% or less"); if (totalTax > 5) { require( _marketing <= buyTaxes.marketing && _dev <= buyTaxes.dev && _liquidity <= buyTaxes.liquidity, "Only reductions allowed" ); } else { require(totalTax <= 5, "Cannot exceed 5% after reduction to 5%"); } buyTaxes = Taxes(_marketing, _dev, _liquidity); } function setSellTaxes( uint256 _marketing, uint256 _dev, uint256 _liquidity ) external onlyOwner { uint256 totalTax = _marketing + _dev + _liquidity; require(totalTax <= 3000, "Must keep fees at 30% or less"); if (totalTax > 5) { require( _marketing <= sellTaxes.marketing && _dev <= sellTaxes.dev && _liquidity <= sellTaxes.liquidity, "Only reductions allowed" ); } else { require(totalTax <= 5, "Cannot exceed 5% after reduction to 5%"); } sellTaxes = Taxes(_marketing, _dev, _liquidity); } function sendInitialAirdrop( address[] memory recipients, uint256[] memory amounts ) external onlyOwner { require(recipients.length == amounts.length, "Array length mismatch"); // Calculate the total amount to be distributed uint256 totalAmount = 0; for (uint256 i = 0; i < amounts.length; i++) { totalAmount += amounts[i]; } // Ensure the total amount does not exceed the initial airdrop allocation require( totalAmount <= initialAirdrop, "Total amount exceeds initial airdrop allocation" ); initialAirdrop = initialAirdrop - totalAmount; // Distribute tokens to each recipient for (uint256 i = 0; i < recipients.length; i++) { _transfer(address(this), recipients[i], amounts[i]); } } function enableTrading() external onlyOwner { require(!tradingEnabled, "Trading is already enabled"); tradingEnabled = true; } function updateMarketingWallet(address newWallet) external onlyOwner { require(newWallet != address(0), "Fee Address cannot be zero address"); require(newWallet != address(this), "Fee Address cannot be CA"); marketingWallet = newWallet; } function updatedevWallet(address newWallet) external onlyOwner { require(newWallet != address(0), "Fee Address cannot be zero address"); require(newWallet != address(this), "Fee Address cannot be CA"); devWallet = newWallet; } function updateExemptFee(address _address, bool state) external onlyOwner { exemptFee[_address] = state; } function bulkExemptFee( address[] memory accounts, bool state ) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { exemptFee[accounts[i]] = state; } } function rescueETH() external onlyOwner { uint256 contractETHBalance = address(this).balance; payable(owner()).transfer(contractETHBalance); } function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner { IERC20(tokenAdd).transfer(owner(), amount); } // fallbacks receive() external payable {} }
{ "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ThresholdAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"sendInitialAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261001261073060201b60201c565b600a61001e9190610ae7565b6298968061002c9190610b32565b60025561003d61073060201b60201c565b600a6100499190610ae7565b622254d06100579190610b32565b6008556000600960006101000a81548160ff02191690831515021790555069021e19e0c9bab2400000600a5560405180606001604052806103e881526020016103e881526020016103e8815250600d600082015181600001556020820151816001015560408201518160020155505060405180606001604052806103e881526020016103e881526020016103e88152506010600082015181600001556020820151816001015560408201518160020155505034801561011557600080fd5b50604051615d9f380380615d9f83398181016040528101906101379190610d47565b818181600390816101489190610ffd565b5080600490816101589190610ffd565b50505061017761016c61073960201b60201c565b61074160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036101e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101dd90611152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906111e4565b60405180910390fd5b610293736c233f2a4708e7a8edd207e6c643e8c673d0a7f060085461027e61080760201b60201c565b6102889190611204565b61081160201b60201c565b6102a53060085461081160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d9190611238565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b89190611238565b6040518363ffffffff1660e01b81526004016103d5929190611274565b6020604051808303816000875af11580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104189190611238565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061058761093f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050611359565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108779061130f565b60405180910390fd5b6108926000838361096960201b60201c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610933919061133e565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156109f4578086048111156109d0576109cf61096e565b5b60018516156109df5780820291505b80810290506109ed8561099d565b94506109b4565b94509492505050565b600082610a0d5760019050610ac9565b81610a1b5760009050610ac9565b8160018114610a315760028114610a3b57610a6a565b6001915050610ac9565b60ff841115610a4d57610a4c61096e565b5b8360020a915084821115610a6457610a6361096e565b5b50610ac9565b5060208310610133831016604e8410600b8410161715610a9f5782820a905083811115610a9a57610a9961096e565b5b610ac9565b610aac84848460016109aa565b92509050818404811115610ac357610ac261096e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000610af282610ad0565b9150610afd83610ada565b9250610b2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846109fd565b905092915050565b6000610b3d82610ad0565b9150610b4883610ad0565b9250828202610b5681610ad0565b91508282048414831517610b6d57610b6c61096e565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bb382610b88565b9050919050565b610bc381610ba8565b8114610bce57600080fd5b50565b600081519050610be081610bba565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610c3982610bf0565b810181811067ffffffffffffffff82111715610c5857610c57610c01565b5b80604052505050565b6000610c6b610b74565b9050610c778282610c30565b919050565b600067ffffffffffffffff821115610c9757610c96610c01565b5b610ca082610bf0565b9050602081019050919050565b60005b83811015610ccb578082015181840152602081019050610cb0565b60008484015250505050565b6000610cea610ce584610c7c565b610c61565b905082815260208101848484011115610d0657610d05610beb565b5b610d11848285610cad565b509392505050565b600082601f830112610d2e57610d2d610be6565b5b8151610d3e848260208601610cd7565b91505092915050565b60008060008060808587031215610d6157610d60610b7e565b5b6000610d6f87828801610bd1565b9450506020610d8087828801610bd1565b935050604085015167ffffffffffffffff811115610da157610da0610b83565b5b610dad87828801610d19565b925050606085015167ffffffffffffffff811115610dce57610dcd610b83565b5b610dda87828801610d19565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3857607f821691505b602082108103610e4b57610e4a610df1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610eb37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610e76565b610ebd8683610e76565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610efa610ef5610ef084610ad0565b610ed5565b610ad0565b9050919050565b6000819050919050565b610f1483610edf565b610f28610f2082610f01565b848454610e83565b825550505050565b600090565b610f3d610f30565b610f48818484610f0b565b505050565b5b81811015610f6c57610f61600082610f35565b600181019050610f4e565b5050565b601f821115610fb157610f8281610e51565b610f8b84610e66565b81016020851015610f9a578190505b610fae610fa685610e66565b830182610f4d565b50505b505050565b600082821c905092915050565b6000610fd460001984600802610fb6565b1980831691505092915050565b6000610fed8383610fc3565b9150826002028217905092915050565b61100682610de6565b67ffffffffffffffff81111561101f5761101e610c01565b5b6110298254610e20565b611034828285610f70565b600060209050601f8311600181146110675760008415611055578287015190505b61105f8582610fe1565b8655506110c7565b601f19841661107586610e51565b60005b8281101561109d57848901518255600182019150602085019450602081019050611078565b868310156110ba57848901516110b6601f891682610fc3565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b600061113c6027836110cf565b9150611147826110e0565b604082019050919050565b6000602082019050818103600083015261116b8161112f565b9050919050565b7f6465762077616c6c65742063616e6e6f74206265207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006111ce6021836110cf565b91506111d982611172565b604082019050919050565b600060208201905081810360008301526111fd816111c1565b9050919050565b600061120f82610ad0565b915061121a83610ad0565b92508282039050818111156112325761123161096e565b5b92915050565b60006020828403121561124e5761124d610b7e565b5b600061125c84828501610bd1565b91505092915050565b61126e81610ba8565b82525050565b60006040820190506112896000830185611265565b6112966020830184611265565b9392505050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112f96025836110cf565b91506113048261129d565b604082019050919050565b60006020820190508181036000830152611328816112ec565b9050919050565b61133881610ad0565b82525050565b6000602082019050611353600083018461132f565b92915050565b614a37806113686000396000f3fe60806040526004361061021e5760003560e01c80638a8c523c11610123578063aacebbe3116100ab578063f2fde38b1161006f578063f2fde38b146107d0578063f66895a3146107f9578063f887ea4014610826578063fbb63ac314610851578063fc1704411461087a57610225565b8063aacebbe3146106d7578063bcd5dd9814610700578063c5d32bb21461072b578063da48567c14610768578063dd62ed3e1461079357610225565b806395d89b41116100f257806395d89b41146105de578063a3fce65e14610609578063a457c2d714610632578063a8aa1b311461066f578063a9059cbb1461069a57610225565b80638a8c523c146105485780638cd4426d1461055f5780638da5cb5b146105885780638ea5220f146105b357610225565b8063355496ca116101a657806370a082311161017557806370a0823114610471578063715018a6146104ae57806375f0a874146104c557806385141a77146104f0578063864701a51461051b57610225565b8063355496ca146103b757806339509351146103e057806342966c681461041d5780634ada218b1461044657610225565b806318160ddd116101ed57806318160ddd146102e45780631870517a1461030f57806320800a001461033857806323b872dd1461034f578063313ce5671461038c57610225565b806306fdde031461022a5780630873321414610255578063095ea7b31461027e5780630e375a5c146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108a3565b60405161024c91906130b7565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613123565b610935565b005b34801561028a57600080fd5b506102a560048036038101906102a091906131d4565b610b12565b6040516102b2919061322f565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906133be565b610b30565b005b3480156102f057600080fd5b506102f9610c3b565b6040516103069190613429565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613123565b610c45565b005b34801561034457600080fd5b5061034d610e22565b005b34801561035b57600080fd5b5061037660048036038101906103719190613444565b610ef4565b604051610383919061322f565b60405180910390f35b34801561039857600080fd5b506103a1610ff4565b6040516103ae91906134b3565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d991906134ce565b610ffd565b005b3480156103ec57600080fd5b50610407600480360381019061040291906131d4565b6110d4565b604051610414919061322f565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f919061350e565b611180565b005b34801561045257600080fd5b5061045b61122e565b604051610468919061322f565b60405180910390f35b34801561047d57600080fd5b506104986004803603810190610493919061353b565b611241565b6040516104a59190613429565b60405180910390f35b3480156104ba57600080fd5b506104c3611289565b005b3480156104d157600080fd5b506104da611311565b6040516104e79190613577565b60405180910390f35b3480156104fc57600080fd5b50610505611337565b6040516105129190613577565b60405180910390f35b34801561052757600080fd5b5061053061133d565b60405161053f93929190613592565b60405180910390f35b34801561055457600080fd5b5061055d611355565b005b34801561056b57600080fd5b50610586600480360381019061058191906131d4565b61143e565b005b34801561059457600080fd5b5061059d611544565b6040516105aa9190613577565b60405180910390f35b3480156105bf57600080fd5b506105c861156e565b6040516105d59190613577565b60405180910390f35b3480156105ea57600080fd5b506105f3611594565b60405161060091906130b7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b919061368c565b611626565b005b34801561063e57600080fd5b50610659600480360381019061065491906131d4565b6117e0565b604051610666919061322f565b60405180910390f35b34801561067b57600080fd5b506106846118d4565b6040516106919190613577565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906131d4565b6118fa565b6040516106ce919061322f565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f9919061353b565b611911565b005b34801561070c57600080fd5b50610715611aae565b6040516107229190613429565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d919061353b565b611ab4565b60405161075f919061322f565b60405180910390f35b34801561077457600080fd5b5061077d611ad4565b60405161078a9190613429565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613704565b611ada565b6040516107c79190613429565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061353b565b611b61565b005b34801561080557600080fd5b5061080e611c58565b60405161081d93929190613592565b60405180910390f35b34801561083257600080fd5b5061083b611c70565b60405161084891906137a3565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061350e565b611c96565b005b34801561088657600080fd5b506108a1600480360381019061089c919061353b565b611d3a565b005b6060600380546108b2906137ed565b80601f01602080910402602001604051908101604052809291908181526020018280546108de906137ed565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b61093d611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661095b611544565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061386a565b60405180910390fd5b60008183856109c091906138b9565b6109ca91906138b9565b9050610bb8811115610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890613939565b60405180910390fd5b6005811115610a89576010600001548411158015610a3457506010600101548311155b8015610a4557506010600201548211155b610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b906139a5565b60405180910390fd5b610ace565b6005811115610acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac490613a37565b60405180910390fd5b5b604051806060016040528085815260200184815260200183815250601060008201518160000155602082015181600101556040820151816002015590505050505050565b6000610b26610b1f611ed7565b8484611edf565b6001905092915050565b610b38611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610b56611544565b73ffffffffffffffffffffffffffffffffffffffff1614610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba39061386a565b60405180910390fd5b60005b8251811015610c36578160136000858481518110610bd057610bcf613a57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610baf565b505050565b6000600254905090565b610c4d611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610c6b611544565b73ffffffffffffffffffffffffffffffffffffffff1614610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061386a565b60405180910390fd5b6000818385610cd091906138b9565b610cda91906138b9565b9050610bb8811115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613939565b60405180910390fd5b6005811115610d9957600d600001548411158015610d445750600d600101548311155b8015610d555750600d600201548211155b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906139a5565b60405180910390fd5b610dde565b6005811115610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613a37565b60405180910390fd5b5b604051806060016040528085815260200184815260200183815250600d60008201518160000155602082015181600101556040820151816002015590505050505050565b610e2a611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610e48611544565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061386a565b60405180910390fd5b6000479050610eab611544565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ef0573d6000803e3d6000fd5b5050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f40611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613af8565b60405180910390fd5b610fdd85610fcc611ed7565b8584610fd89190613b18565b611edf565b610fe88585856120a8565b60019150509392505050565b60006012905090565b611005611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611023611544565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110709061386a565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111766110e1611ed7565b8484600160006110ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461117191906138b9565b611edf565b6001905092915050565b611188611ed7565b73ffffffffffffffffffffffffffffffffffffffff166111a6611544565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f39061386a565b60405180910390fd5b61122b611207611ed7565b61120f610ff4565b600a61121b9190613c7f565b836112269190613cca565b612505565b50565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611291611ed7565b73ffffffffffffffffffffffffffffffffffffffff166112af611544565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc9061386a565b60405180910390fd5b61130f60006126d8565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600d8060000154908060010154908060020154905083565b61135d611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661137b611544565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c89061386a565b60405180910390fd5b600960009054906101000a900460ff1615611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613d58565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611446611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611464611544565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b19061386a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114de611544565b836040518363ffffffff1660e01b81526004016114fc929190613d78565b6020604051808303816000875af115801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613db6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115a3906137ed565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf906137ed565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b5050505050905090565b61162e611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661164c611544565b73ffffffffffffffffffffffffffffffffffffffff16146116a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116999061386a565b60405180910390fd5b80518251146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613e2f565b60405180910390fd5b6000805b82518110156117285782818151811061170657611705613a57565b5b60200260200101518261171991906138b9565b915080806001019150506116ea565b5060085481111561176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590613ec1565b60405180910390fd5b8060085461177c9190613b18565b60088190555060005b83518110156117da576117cd308583815181106117a5576117a4613a57565b5b60200260200101518584815181106117c0576117bf613a57565b5b60200260200101516120a8565b8080600101915050611785565b50505050565b600080600160006117ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613f53565b60405180910390fd5b6118c96118b7611ed7565b8585846118c49190613b18565b611edf565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119073384846120a8565b6001905092915050565b611919611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611937611544565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119849061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613fe5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6190614051565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b69611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611b87611544565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd49061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906140e3565b60405180910390fd5b611c55816126d8565b50565b60108060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c9e611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611cbc611544565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d099061386a565b60405180910390fd5b611d1a610ff4565b600a611d269190613c7f565b81611d319190613cca565b600a8190555050565b611d42611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611d60611544565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613fe5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90614051565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614207565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209b9190613429565b60405180910390a3505050565b600081116120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614299565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561218f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121e457600960009054906101000a900460ff166121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614305565b60405180910390fd5b5b6000806121ef613006565b601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122905750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123435750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156123425750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b5b156123515760009150612472565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612400576010600201546010600101546010600001546123c291906138b9565b6123cc91906138b9565b9250601060405180606001604052908160008201548152602001600182015481526020016002820154815250509050612456565b600d60020154600d60010154600d6000015461241c91906138b9565b61242691906138b9565b9250600d604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b61271083856124659190613cca565b61246f9190614354565b91505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146124d2576124d1838261279e565b5b6124e8868684876124e39190613b18565b61296d565b60008311156124fd576124fc86308461296d565b5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b906143f7565b60405180910390fd5b61258082600083612bea565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90614489565b60405180910390fd5b81816126129190613b18565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546126669190613b18565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cb9190613429565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008203156129695760006127b230611241565b9050600a548110612967576001600a5411156127ce57600a5490505b60006002846127dd9190613cca565b90506000818460400151846127f29190613cca565b6127fc9190614354565b90506000818461280c9190613b18565b9050600047905061281c82612bef565b6000814761282a9190613b18565b9050600087604001518661283e9190613b18565b826128499190614354565b9050600088604001518261285d9190613cca565b90506000811115612873576128728682612e32565b5b600089600001516002846128879190613cca565b6128919190613cca565b905060008111156128e8576128e781600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f1290919063ffffffff16565b5b60008a602001516002856128fc9190613cca565b6129069190613cca565b9050600081111561295d5761295c81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f1290919063ffffffff16565b5b5050505050505050505b505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d39061451b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145ad565b60405180910390fd5b612a56838383612bea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad39061463f565b60405180910390fd5b8181612ae89190613b18565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7891906138b9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bdc9190613429565b60405180910390a350505050565b505050565b6000600267ffffffffffffffff811115612c0c57612c0b61324f565b5b604051908082528060200260200182016040528015612c3a5781602001602082028036833780820191505090505b5090503081600081518110612c5257612c51613a57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190614674565b81600181518110612d3157612d30613a57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d9830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611edf565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dfc95949392919061479a565b600060405180830381600087803b158015612e1657600080fd5b505af1158015612e2a573d6000803e3d6000fd5b505050505050565b612e5f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611edf565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612ec8969594939291906147f4565b60606040518083038185885af1158015612ee6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f0b919061486a565b5050505050565b80471015612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90614909565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612f7b9061495a565b60006040518083038185875af1925050503d8060008114612fb8576040519150601f19603f3d011682016040523d82523d6000602084013e612fbd565b606091505b5050905080613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff8906149e1565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613061578082015181840152602081019050613046565b60008484015250505050565b6000601f19601f8301169050919050565b600061308982613027565b6130938185613032565b93506130a3818560208601613043565b6130ac8161306d565b840191505092915050565b600060208201905081810360008301526130d1818461307e565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613100816130ed565b811461310b57600080fd5b50565b60008135905061311d816130f7565b92915050565b60008060006060848603121561313c5761313b6130e3565b5b600061314a8682870161310e565b935050602061315b8682870161310e565b925050604061316c8682870161310e565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131a182613176565b9050919050565b6131b181613196565b81146131bc57600080fd5b50565b6000813590506131ce816131a8565b92915050565b600080604083850312156131eb576131ea6130e3565b5b60006131f9858286016131bf565b925050602061320a8582860161310e565b9150509250929050565b60008115159050919050565b61322981613214565b82525050565b60006020820190506132446000830184613220565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132878261306d565b810181811067ffffffffffffffff821117156132a6576132a561324f565b5b80604052505050565b60006132b96130d9565b90506132c5828261327e565b919050565b600067ffffffffffffffff8211156132e5576132e461324f565b5b602082029050602081019050919050565b600080fd5b600061330e613309846132ca565b6132af565b90508083825260208201905060208402830185811115613331576133306132f6565b5b835b8181101561335a578061334688826131bf565b845260208401935050602081019050613333565b5050509392505050565b600082601f8301126133795761337861324a565b5b81356133898482602086016132fb565b91505092915050565b61339b81613214565b81146133a657600080fd5b50565b6000813590506133b881613392565b92915050565b600080604083850312156133d5576133d46130e3565b5b600083013567ffffffffffffffff8111156133f3576133f26130e8565b5b6133ff85828601613364565b9250506020613410858286016133a9565b9150509250929050565b613423816130ed565b82525050565b600060208201905061343e600083018461341a565b92915050565b60008060006060848603121561345d5761345c6130e3565b5b600061346b868287016131bf565b935050602061347c868287016131bf565b925050604061348d8682870161310e565b9150509250925092565b600060ff82169050919050565b6134ad81613497565b82525050565b60006020820190506134c860008301846134a4565b92915050565b600080604083850312156134e5576134e46130e3565b5b60006134f3858286016131bf565b9250506020613504858286016133a9565b9150509250929050565b600060208284031215613524576135236130e3565b5b60006135328482850161310e565b91505092915050565b600060208284031215613551576135506130e3565b5b600061355f848285016131bf565b91505092915050565b61357181613196565b82525050565b600060208201905061358c6000830184613568565b92915050565b60006060820190506135a7600083018661341a565b6135b4602083018561341a565b6135c1604083018461341a565b949350505050565b600067ffffffffffffffff8211156135e4576135e361324f565b5b602082029050602081019050919050565b6000613608613603846135c9565b6132af565b9050808382526020820190506020840283018581111561362b5761362a6132f6565b5b835b818110156136545780613640888261310e565b84526020840193505060208101905061362d565b5050509392505050565b600082601f8301126136735761367261324a565b5b81356136838482602086016135f5565b91505092915050565b600080604083850312156136a3576136a26130e3565b5b600083013567ffffffffffffffff8111156136c1576136c06130e8565b5b6136cd85828601613364565b925050602083013567ffffffffffffffff8111156136ee576136ed6130e8565b5b6136fa8582860161365e565b9150509250929050565b6000806040838503121561371b5761371a6130e3565b5b6000613729858286016131bf565b925050602061373a858286016131bf565b9150509250929050565b6000819050919050565b600061376961376461375f84613176565b613744565b613176565b9050919050565b600061377b8261374e565b9050919050565b600061378d82613770565b9050919050565b61379d81613782565b82525050565b60006020820190506137b86000830184613794565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380557607f821691505b602082108103613818576138176137be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613854602083613032565b915061385f8261381e565b602082019050919050565b6000602082019050818103600083015261388381613847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c4826130ed565b91506138cf836130ed565b92508282019050808211156138e7576138e661388a565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613923601d83613032565b915061392e826138ed565b602082019050919050565b6000602082019050818103600083015261395281613916565b9050919050565b7f4f6e6c7920726564756374696f6e7320616c6c6f776564000000000000000000600082015250565b600061398f601783613032565b915061399a82613959565b602082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f43616e6e6f742065786365656420352520616674657220726564756374696f6e60008201527f20746f2035250000000000000000000000000000000000000000000000000000602082015250565b6000613a21602683613032565b9150613a2c826139c5565b604082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ae2602883613032565b9150613aed82613a86565b604082019050919050565b60006020820190508181036000830152613b1181613ad5565b9050919050565b6000613b23826130ed565b9150613b2e836130ed565b9250828203905081811115613b4657613b4561388a565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613ba357808604811115613b7f57613b7e61388a565b5b6001851615613b8e5780820291505b8081029050613b9c85613b4c565b9450613b63565b94509492505050565b600082613bbc5760019050613c78565b81613bca5760009050613c78565b8160018114613be05760028114613bea57613c19565b6001915050613c78565b60ff841115613bfc57613bfb61388a565b5b8360020a915084821115613c1357613c1261388a565b5b50613c78565b5060208310610133831016604e8410600b8410161715613c4e5782820a905083811115613c4957613c4861388a565b5b613c78565b613c5b8484846001613b59565b92509050818404811115613c7257613c7161388a565b5b81810290505b9392505050565b6000613c8a826130ed565b9150613c9583613497565b9250613cc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bac565b905092915050565b6000613cd5826130ed565b9150613ce0836130ed565b9250828202613cee816130ed565b91508282048414831517613d0557613d0461388a565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613d42601a83613032565b9150613d4d82613d0c565b602082019050919050565b60006020820190508181036000830152613d7181613d35565b9050919050565b6000604082019050613d8d6000830185613568565b613d9a602083018461341a565b9392505050565b600081519050613db081613392565b92915050565b600060208284031215613dcc57613dcb6130e3565b5b6000613dda84828501613da1565b91505092915050565b7f4172726179206c656e677468206d69736d617463680000000000000000000000600082015250565b6000613e19601583613032565b9150613e2482613de3565b602082019050919050565b60006020820190508181036000830152613e4881613e0c565b9050919050565b7f546f74616c20616d6f756e74206578636565647320696e697469616c2061697260008201527f64726f7020616c6c6f636174696f6e0000000000000000000000000000000000602082015250565b6000613eab602f83613032565b9150613eb682613e4f565b604082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f3d602583613032565b9150613f4882613ee1565b604082019050919050565b60006020820190508181036000830152613f6c81613f30565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fcf602283613032565b9150613fda82613f73565b604082019050919050565b60006020820190508181036000830152613ffe81613fc2565b9050919050565b7f46656520416464726573732063616e6e6f742062652043410000000000000000600082015250565b600061403b601883613032565b915061404682614005565b602082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140cd602683613032565b91506140d882614071565b604082019050919050565b600060208201905081810360008301526140fc816140c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061415f602483613032565b915061416a82614103565b604082019050919050565b6000602082019050818103600083015261418e81614152565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141f1602283613032565b91506141fc82614195565b604082019050919050565b60006020820190508181036000830152614220816141e4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614283602983613032565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006142ef601383613032565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435f826130ed565b915061436a836130ed565b92508261437a57614379614325565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006143e1602183613032565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614473602283613032565b915061447e82614417565b604082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614505602583613032565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614597602383613032565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614629602683613032565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b60008151905061466e816131a8565b92915050565b60006020828403121561468a576146896130e3565b5b60006146988482850161465f565b91505092915050565b6000819050919050565b60006146c66146c16146bc846146a1565b613744565b6130ed565b9050919050565b6146d6816146ab565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61471181613196565b82525050565b60006147238383614708565b60208301905092915050565b6000602082019050919050565b6000614747826146dc565b61475181856146e7565b935061475c836146f8565b8060005b8381101561478d5781516147748882614717565b975061477f8361472f565b925050600181019050614760565b5085935050505092915050565b600060a0820190506147af600083018861341a565b6147bc60208301876146cd565b81810360408301526147ce818661473c565b90506147dd6060830185613568565b6147ea608083018461341a565b9695505050505050565b600060c0820190506148096000830189613568565b614816602083018861341a565b61482360408301876146cd565b61483060608301866146cd565b61483d6080830185613568565b61484a60a083018461341a565b979650505050505050565b600081519050614864816130f7565b92915050565b600080600060608486031215614883576148826130e3565b5b600061489186828701614855565b93505060206148a286828701614855565b92505060406148b386828701614855565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006148f3601d83613032565b91506148fe826148bd565b602082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b600081905092915050565b50565b6000614944600083614929565b915061494f82614934565b600082019050919050565b600061496582614937565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006149cb603a83613032565b91506149d68261496f565b604082019050919050565b600060208201905081810360008301526149fa816149be565b905091905056fea26469706673582212203ae5d23dc39a66c63d51238ef3fcdb8a367552c97108833c6d0fd0e7e27a0f6f64736f6c634300081b00330000000000000000000000004ba12175e4bba78944d44f545ba8410a10c4b103000000000000000000000000b9d8272a392918d78585a57ce3f6343eddaebb7b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000074275696c6441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054275696c64000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021e5760003560e01c80638a8c523c11610123578063aacebbe3116100ab578063f2fde38b1161006f578063f2fde38b146107d0578063f66895a3146107f9578063f887ea4014610826578063fbb63ac314610851578063fc1704411461087a57610225565b8063aacebbe3146106d7578063bcd5dd9814610700578063c5d32bb21461072b578063da48567c14610768578063dd62ed3e1461079357610225565b806395d89b41116100f257806395d89b41146105de578063a3fce65e14610609578063a457c2d714610632578063a8aa1b311461066f578063a9059cbb1461069a57610225565b80638a8c523c146105485780638cd4426d1461055f5780638da5cb5b146105885780638ea5220f146105b357610225565b8063355496ca116101a657806370a082311161017557806370a0823114610471578063715018a6146104ae57806375f0a874146104c557806385141a77146104f0578063864701a51461051b57610225565b8063355496ca146103b757806339509351146103e057806342966c681461041d5780634ada218b1461044657610225565b806318160ddd116101ed57806318160ddd146102e45780631870517a1461030f57806320800a001461033857806323b872dd1461034f578063313ce5671461038c57610225565b806306fdde031461022a5780630873321414610255578063095ea7b31461027e5780630e375a5c146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108a3565b60405161024c91906130b7565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613123565b610935565b005b34801561028a57600080fd5b506102a560048036038101906102a091906131d4565b610b12565b6040516102b2919061322f565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906133be565b610b30565b005b3480156102f057600080fd5b506102f9610c3b565b6040516103069190613429565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613123565b610c45565b005b34801561034457600080fd5b5061034d610e22565b005b34801561035b57600080fd5b5061037660048036038101906103719190613444565b610ef4565b604051610383919061322f565b60405180910390f35b34801561039857600080fd5b506103a1610ff4565b6040516103ae91906134b3565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d991906134ce565b610ffd565b005b3480156103ec57600080fd5b50610407600480360381019061040291906131d4565b6110d4565b604051610414919061322f565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f919061350e565b611180565b005b34801561045257600080fd5b5061045b61122e565b604051610468919061322f565b60405180910390f35b34801561047d57600080fd5b506104986004803603810190610493919061353b565b611241565b6040516104a59190613429565b60405180910390f35b3480156104ba57600080fd5b506104c3611289565b005b3480156104d157600080fd5b506104da611311565b6040516104e79190613577565b60405180910390f35b3480156104fc57600080fd5b50610505611337565b6040516105129190613577565b60405180910390f35b34801561052757600080fd5b5061053061133d565b60405161053f93929190613592565b60405180910390f35b34801561055457600080fd5b5061055d611355565b005b34801561056b57600080fd5b50610586600480360381019061058191906131d4565b61143e565b005b34801561059457600080fd5b5061059d611544565b6040516105aa9190613577565b60405180910390f35b3480156105bf57600080fd5b506105c861156e565b6040516105d59190613577565b60405180910390f35b3480156105ea57600080fd5b506105f3611594565b60405161060091906130b7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b919061368c565b611626565b005b34801561063e57600080fd5b50610659600480360381019061065491906131d4565b6117e0565b604051610666919061322f565b60405180910390f35b34801561067b57600080fd5b506106846118d4565b6040516106919190613577565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906131d4565b6118fa565b6040516106ce919061322f565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f9919061353b565b611911565b005b34801561070c57600080fd5b50610715611aae565b6040516107229190613429565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d919061353b565b611ab4565b60405161075f919061322f565b60405180910390f35b34801561077457600080fd5b5061077d611ad4565b60405161078a9190613429565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613704565b611ada565b6040516107c79190613429565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061353b565b611b61565b005b34801561080557600080fd5b5061080e611c58565b60405161081d93929190613592565b60405180910390f35b34801561083257600080fd5b5061083b611c70565b60405161084891906137a3565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061350e565b611c96565b005b34801561088657600080fd5b506108a1600480360381019061089c919061353b565b611d3a565b005b6060600380546108b2906137ed565b80601f01602080910402602001604051908101604052809291908181526020018280546108de906137ed565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b61093d611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661095b611544565b73ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061386a565b60405180910390fd5b60008183856109c091906138b9565b6109ca91906138b9565b9050610bb8811115610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890613939565b60405180910390fd5b6005811115610a89576010600001548411158015610a3457506010600101548311155b8015610a4557506010600201548211155b610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b906139a5565b60405180910390fd5b610ace565b6005811115610acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac490613a37565b60405180910390fd5b5b604051806060016040528085815260200184815260200183815250601060008201518160000155602082015181600101556040820151816002015590505050505050565b6000610b26610b1f611ed7565b8484611edf565b6001905092915050565b610b38611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610b56611544565b73ffffffffffffffffffffffffffffffffffffffff1614610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba39061386a565b60405180910390fd5b60005b8251811015610c36578160136000858481518110610bd057610bcf613a57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610baf565b505050565b6000600254905090565b610c4d611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610c6b611544565b73ffffffffffffffffffffffffffffffffffffffff1614610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061386a565b60405180910390fd5b6000818385610cd091906138b9565b610cda91906138b9565b9050610bb8811115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613939565b60405180910390fd5b6005811115610d9957600d600001548411158015610d445750600d600101548311155b8015610d555750600d600201548211155b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906139a5565b60405180910390fd5b610dde565b6005811115610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613a37565b60405180910390fd5b5b604051806060016040528085815260200184815260200183815250600d60008201518160000155602082015181600101556040820151816002015590505050505050565b610e2a611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610e48611544565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061386a565b60405180910390fd5b6000479050610eab611544565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ef0573d6000803e3d6000fd5b5050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f40611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613af8565b60405180910390fd5b610fdd85610fcc611ed7565b8584610fd89190613b18565b611edf565b610fe88585856120a8565b60019150509392505050565b60006012905090565b611005611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611023611544565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110709061386a565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111766110e1611ed7565b8484600160006110ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461117191906138b9565b611edf565b6001905092915050565b611188611ed7565b73ffffffffffffffffffffffffffffffffffffffff166111a6611544565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f39061386a565b60405180910390fd5b61122b611207611ed7565b61120f610ff4565b600a61121b9190613c7f565b836112269190613cca565b612505565b50565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611291611ed7565b73ffffffffffffffffffffffffffffffffffffffff166112af611544565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc9061386a565b60405180910390fd5b61130f60006126d8565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600d8060000154908060010154908060020154905083565b61135d611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661137b611544565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c89061386a565b60405180910390fd5b600960009054906101000a900460ff1615611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613d58565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611446611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611464611544565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b19061386a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114de611544565b836040518363ffffffff1660e01b81526004016114fc929190613d78565b6020604051808303816000875af115801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613db6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115a3906137ed565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf906137ed565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b5050505050905090565b61162e611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661164c611544565b73ffffffffffffffffffffffffffffffffffffffff16146116a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116999061386a565b60405180910390fd5b80518251146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613e2f565b60405180910390fd5b6000805b82518110156117285782818151811061170657611705613a57565b5b60200260200101518261171991906138b9565b915080806001019150506116ea565b5060085481111561176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590613ec1565b60405180910390fd5b8060085461177c9190613b18565b60088190555060005b83518110156117da576117cd308583815181106117a5576117a4613a57565b5b60200260200101518584815181106117c0576117bf613a57565b5b60200260200101516120a8565b8080600101915050611785565b50505050565b600080600160006117ef611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613f53565b60405180910390fd5b6118c96118b7611ed7565b8585846118c49190613b18565b611edf565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119073384846120a8565b6001905092915050565b611919611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611937611544565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119849061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613fe5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6190614051565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b69611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611b87611544565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd49061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906140e3565b60405180910390fd5b611c55816126d8565b50565b60108060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c9e611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611cbc611544565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d099061386a565b60405180910390fd5b611d1a610ff4565b600a611d269190613c7f565b81611d319190613cca565b600a8190555050565b611d42611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611d60611544565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061386a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613fe5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90614051565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614207565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209b9190613429565b60405180910390a3505050565b600081116120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614299565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561218f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121e457600960009054906101000a900460ff166121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614305565b60405180910390fd5b5b6000806121ef613006565b601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122905750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123435750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156123425750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b5b156123515760009150612472565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612400576010600201546010600101546010600001546123c291906138b9565b6123cc91906138b9565b9250601060405180606001604052908160008201548152602001600182015481526020016002820154815250509050612456565b600d60020154600d60010154600d6000015461241c91906138b9565b61242691906138b9565b9250600d604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b61271083856124659190613cca565b61246f9190614354565b91505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146124d2576124d1838261279e565b5b6124e8868684876124e39190613b18565b61296d565b60008311156124fd576124fc86308461296d565b5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b906143f7565b60405180910390fd5b61258082600083612bea565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90614489565b60405180910390fd5b81816126129190613b18565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546126669190613b18565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cb9190613429565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008203156129695760006127b230611241565b9050600a548110612967576001600a5411156127ce57600a5490505b60006002846127dd9190613cca565b90506000818460400151846127f29190613cca565b6127fc9190614354565b90506000818461280c9190613b18565b9050600047905061281c82612bef565b6000814761282a9190613b18565b9050600087604001518661283e9190613b18565b826128499190614354565b9050600088604001518261285d9190613cca565b90506000811115612873576128728682612e32565b5b600089600001516002846128879190613cca565b6128919190613cca565b905060008111156128e8576128e781600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f1290919063ffffffff16565b5b60008a602001516002856128fc9190613cca565b6129069190613cca565b9050600081111561295d5761295c81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f1290919063ffffffff16565b5b5050505050505050505b505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d39061451b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145ad565b60405180910390fd5b612a56838383612bea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad39061463f565b60405180910390fd5b8181612ae89190613b18565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7891906138b9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bdc9190613429565b60405180910390a350505050565b505050565b6000600267ffffffffffffffff811115612c0c57612c0b61324f565b5b604051908082528060200260200182016040528015612c3a5781602001602082028036833780820191505090505b5090503081600081518110612c5257612c51613a57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190614674565b81600181518110612d3157612d30613a57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d9830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611edf565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dfc95949392919061479a565b600060405180830381600087803b158015612e1657600080fd5b505af1158015612e2a573d6000803e3d6000fd5b505050505050565b612e5f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611edf565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612ec8969594939291906147f4565b60606040518083038185885af1158015612ee6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f0b919061486a565b5050505050565b80471015612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90614909565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612f7b9061495a565b60006040518083038185875af1925050503d8060008114612fb8576040519150601f19603f3d011682016040523d82523d6000602084013e612fbd565b606091505b5050905080613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff8906149e1565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613061578082015181840152602081019050613046565b60008484015250505050565b6000601f19601f8301169050919050565b600061308982613027565b6130938185613032565b93506130a3818560208601613043565b6130ac8161306d565b840191505092915050565b600060208201905081810360008301526130d1818461307e565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613100816130ed565b811461310b57600080fd5b50565b60008135905061311d816130f7565b92915050565b60008060006060848603121561313c5761313b6130e3565b5b600061314a8682870161310e565b935050602061315b8682870161310e565b925050604061316c8682870161310e565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131a182613176565b9050919050565b6131b181613196565b81146131bc57600080fd5b50565b6000813590506131ce816131a8565b92915050565b600080604083850312156131eb576131ea6130e3565b5b60006131f9858286016131bf565b925050602061320a8582860161310e565b9150509250929050565b60008115159050919050565b61322981613214565b82525050565b60006020820190506132446000830184613220565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132878261306d565b810181811067ffffffffffffffff821117156132a6576132a561324f565b5b80604052505050565b60006132b96130d9565b90506132c5828261327e565b919050565b600067ffffffffffffffff8211156132e5576132e461324f565b5b602082029050602081019050919050565b600080fd5b600061330e613309846132ca565b6132af565b90508083825260208201905060208402830185811115613331576133306132f6565b5b835b8181101561335a578061334688826131bf565b845260208401935050602081019050613333565b5050509392505050565b600082601f8301126133795761337861324a565b5b81356133898482602086016132fb565b91505092915050565b61339b81613214565b81146133a657600080fd5b50565b6000813590506133b881613392565b92915050565b600080604083850312156133d5576133d46130e3565b5b600083013567ffffffffffffffff8111156133f3576133f26130e8565b5b6133ff85828601613364565b9250506020613410858286016133a9565b9150509250929050565b613423816130ed565b82525050565b600060208201905061343e600083018461341a565b92915050565b60008060006060848603121561345d5761345c6130e3565b5b600061346b868287016131bf565b935050602061347c868287016131bf565b925050604061348d8682870161310e565b9150509250925092565b600060ff82169050919050565b6134ad81613497565b82525050565b60006020820190506134c860008301846134a4565b92915050565b600080604083850312156134e5576134e46130e3565b5b60006134f3858286016131bf565b9250506020613504858286016133a9565b9150509250929050565b600060208284031215613524576135236130e3565b5b60006135328482850161310e565b91505092915050565b600060208284031215613551576135506130e3565b5b600061355f848285016131bf565b91505092915050565b61357181613196565b82525050565b600060208201905061358c6000830184613568565b92915050565b60006060820190506135a7600083018661341a565b6135b4602083018561341a565b6135c1604083018461341a565b949350505050565b600067ffffffffffffffff8211156135e4576135e361324f565b5b602082029050602081019050919050565b6000613608613603846135c9565b6132af565b9050808382526020820190506020840283018581111561362b5761362a6132f6565b5b835b818110156136545780613640888261310e565b84526020840193505060208101905061362d565b5050509392505050565b600082601f8301126136735761367261324a565b5b81356136838482602086016135f5565b91505092915050565b600080604083850312156136a3576136a26130e3565b5b600083013567ffffffffffffffff8111156136c1576136c06130e8565b5b6136cd85828601613364565b925050602083013567ffffffffffffffff8111156136ee576136ed6130e8565b5b6136fa8582860161365e565b9150509250929050565b6000806040838503121561371b5761371a6130e3565b5b6000613729858286016131bf565b925050602061373a858286016131bf565b9150509250929050565b6000819050919050565b600061376961376461375f84613176565b613744565b613176565b9050919050565b600061377b8261374e565b9050919050565b600061378d82613770565b9050919050565b61379d81613782565b82525050565b60006020820190506137b86000830184613794565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380557607f821691505b602082108103613818576138176137be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613854602083613032565b915061385f8261381e565b602082019050919050565b6000602082019050818103600083015261388381613847565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c4826130ed565b91506138cf836130ed565b92508282019050808211156138e7576138e661388a565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613923601d83613032565b915061392e826138ed565b602082019050919050565b6000602082019050818103600083015261395281613916565b9050919050565b7f4f6e6c7920726564756374696f6e7320616c6c6f776564000000000000000000600082015250565b600061398f601783613032565b915061399a82613959565b602082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f43616e6e6f742065786365656420352520616674657220726564756374696f6e60008201527f20746f2035250000000000000000000000000000000000000000000000000000602082015250565b6000613a21602683613032565b9150613a2c826139c5565b604082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ae2602883613032565b9150613aed82613a86565b604082019050919050565b60006020820190508181036000830152613b1181613ad5565b9050919050565b6000613b23826130ed565b9150613b2e836130ed565b9250828203905081811115613b4657613b4561388a565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613ba357808604811115613b7f57613b7e61388a565b5b6001851615613b8e5780820291505b8081029050613b9c85613b4c565b9450613b63565b94509492505050565b600082613bbc5760019050613c78565b81613bca5760009050613c78565b8160018114613be05760028114613bea57613c19565b6001915050613c78565b60ff841115613bfc57613bfb61388a565b5b8360020a915084821115613c1357613c1261388a565b5b50613c78565b5060208310610133831016604e8410600b8410161715613c4e5782820a905083811115613c4957613c4861388a565b5b613c78565b613c5b8484846001613b59565b92509050818404811115613c7257613c7161388a565b5b81810290505b9392505050565b6000613c8a826130ed565b9150613c9583613497565b9250613cc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bac565b905092915050565b6000613cd5826130ed565b9150613ce0836130ed565b9250828202613cee816130ed565b91508282048414831517613d0557613d0461388a565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613d42601a83613032565b9150613d4d82613d0c565b602082019050919050565b60006020820190508181036000830152613d7181613d35565b9050919050565b6000604082019050613d8d6000830185613568565b613d9a602083018461341a565b9392505050565b600081519050613db081613392565b92915050565b600060208284031215613dcc57613dcb6130e3565b5b6000613dda84828501613da1565b91505092915050565b7f4172726179206c656e677468206d69736d617463680000000000000000000000600082015250565b6000613e19601583613032565b9150613e2482613de3565b602082019050919050565b60006020820190508181036000830152613e4881613e0c565b9050919050565b7f546f74616c20616d6f756e74206578636565647320696e697469616c2061697260008201527f64726f7020616c6c6f636174696f6e0000000000000000000000000000000000602082015250565b6000613eab602f83613032565b9150613eb682613e4f565b604082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f3d602583613032565b9150613f4882613ee1565b604082019050919050565b60006020820190508181036000830152613f6c81613f30565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fcf602283613032565b9150613fda82613f73565b604082019050919050565b60006020820190508181036000830152613ffe81613fc2565b9050919050565b7f46656520416464726573732063616e6e6f742062652043410000000000000000600082015250565b600061403b601883613032565b915061404682614005565b602082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140cd602683613032565b91506140d882614071565b604082019050919050565b600060208201905081810360008301526140fc816140c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061415f602483613032565b915061416a82614103565b604082019050919050565b6000602082019050818103600083015261418e81614152565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141f1602283613032565b91506141fc82614195565b604082019050919050565b60006020820190508181036000830152614220816141e4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614283602983613032565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006142ef601383613032565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435f826130ed565b915061436a836130ed565b92508261437a57614379614325565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006143e1602183613032565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614473602283613032565b915061447e82614417565b604082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614505602583613032565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614597602383613032565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614629602683613032565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b60008151905061466e816131a8565b92915050565b60006020828403121561468a576146896130e3565b5b60006146988482850161465f565b91505092915050565b6000819050919050565b60006146c66146c16146bc846146a1565b613744565b6130ed565b9050919050565b6146d6816146ab565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61471181613196565b82525050565b60006147238383614708565b60208301905092915050565b6000602082019050919050565b6000614747826146dc565b61475181856146e7565b935061475c836146f8565b8060005b8381101561478d5781516147748882614717565b975061477f8361472f565b925050600181019050614760565b5085935050505092915050565b600060a0820190506147af600083018861341a565b6147bc60208301876146cd565b81810360408301526147ce818661473c565b90506147dd6060830185613568565b6147ea608083018461341a565b9695505050505050565b600060c0820190506148096000830189613568565b614816602083018861341a565b61482360408301876146cd565b61483060608301866146cd565b61483d6080830185613568565b61484a60a083018461341a565b979650505050505050565b600081519050614864816130f7565b92915050565b600080600060608486031215614883576148826130e3565b5b600061489186828701614855565b93505060206148a286828701614855565b92505060406148b386828701614855565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006148f3601d83613032565b91506148fe826148bd565b602082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b600081905092915050565b50565b6000614944600083614929565b915061494f82614934565b600082019050919050565b600061496582614937565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006149cb603a83613032565b91506149d68261496f565b604082019050919050565b600060208201905081810360008301526149fa816149be565b905091905056fea26469706673582212203ae5d23dc39a66c63d51238ef3fcdb8a367552c97108833c6d0fd0e7e27a0f6f64736f6c634300081b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004ba12175e4bba78944d44f545ba8410a10c4b103000000000000000000000000b9d8272a392918d78585a57ce3f6343eddaebb7b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000074275696c6441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054275696c64000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x4BA12175E4bBA78944D44F545Ba8410A10C4B103
Arg [1] : _devWallet (address): 0xb9D8272a392918D78585A57cE3F6343EddaEbB7B
Arg [2] : name (string): BuildAI
Arg [3] : symbol (string): Build
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ba12175e4bba78944d44f545ba8410a10c4b103
Arg [1] : 000000000000000000000000b9d8272a392918d78585a57ce3f6343eddaebb7b
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 4275696c64414900000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4275696c64000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.