ERC-20
DAO
Overview
Max Total Supply
1,000,000,000 AXGT
Holders
21,529 ( 0.269%)
Market
Price
$0.39 @ 0.000107 ETH (-0.04%)
Onchain Market Cap
$393,341,000.00
Circulating Supply Market Cap
$75,451,594.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AXGT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2023-10-24 */ /** *Submitted for verification at Etherscan.io on 2023-09-25 */ // SPDX-License-Identifier: MIT /* ░█████╗░██╗░░██╗░██████╗░████████╗ ██╔══██╗╚██╗██╔╝██╔════╝░╚══██╔══╝ ███████║░╚███╔╝░██║░░██╗░░░░██║░░░ ██╔══██║░██╔██╗░██║░░╚██╗░░░██║░░░ ██║░░██║██╔╝╚██╗╚██████╔╝░░░██║░░░ ╚═╝░░╚═╝╚═╝░░╚═╝░╚═════╝░░░░╚═╝░░░ */ pragma solidity 0.8.7; contract ReentrancyGuard { bool internal locked = false; modifier nonReentrant() { require(!locked, "Reentrant call"); locked = true; _; locked = false; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ 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; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ 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); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ 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); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract AXGT is ERC20, Ownable, ReentrancyGuard { IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 private constant TOKEN_DECIMALS = 10**18; uint8 private constant percentageOfMaximumTokensToAccumate = 10; bool private swapping; uint256 public swapTokensAtAmount = 10 ** 5 * TOKEN_DECIMALS; uint256 public balanceLimit = 2 * 10 ** 7 * TOKEN_DECIMALS; address public adminWallet = 0x44fF56eF2f0654cF95200cB53c0873bbB669222d; address public fundWallet = 0x2322F9c0C2F09677CB0892699a5936ED1A937B56; uint16 public liquidityFee = 133; uint16 public adminFee = 133; uint16 public fundFee = 133; mapping (address => bool) public isExcluded; mapping (address => bool) public isLimitExcluded; event TransferFailed(address _recipient, uint256 _amount); event SetFee(uint16 liquidityFee, uint16 adminFee, uint16 fundFee); event SetSwapAtAmount(uint256 amount); event SetLimit(uint256 limit); constructor() ERC20("AxonDAO Governance Token", "AXGT") { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _UniswapV2Pair = IUniswapV2Factory(_UniswapV2Router.factory()) .createPair(address(this), _UniswapV2Router.WETH()); uniswapV2Router = _UniswapV2Router; uniswapV2Pair = _UniswapV2Pair; isExcluded[owner()] = true; isExcluded[address(this)] = true; isExcluded[adminWallet] = true; isExcluded[fundWallet] = true; isLimitExcluded[owner()] = true; isLimitExcluded[address(this)] = true; isLimitExcluded[adminWallet] = true; isLimitExcluded[fundWallet] = true; isLimitExcluded[_UniswapV2Pair] = true; _mint(owner(), 10 ** 9 * TOKEN_DECIMALS); } receive() external payable { } function setUniswapV2Router(address _uniswapV2Router) external onlyOwner { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(_uniswapV2Router); IUniswapV2Factory factory = IUniswapV2Factory(_UniswapV2Router.factory()); // Check if pair already exists address existingPair = factory.getPair(address(this), _UniswapV2Router.WETH()); address _UniswapV2Pair; if (existingPair == address(0)) { // If pair does not exist, create it _UniswapV2Pair = factory.createPair(address(this), _UniswapV2Router.WETH()); } else { // If pair exists, use existing pair address _UniswapV2Pair = existingPair; } require(_UniswapV2Pair != address(0), "Pair address set to zero"); uniswapV2Router = _UniswapV2Router; uniswapV2Pair = _UniswapV2Pair; isLimitExcluded[_UniswapV2Pair] = true; } function _burnToken (uint256 _amount) external onlyOwner{ _burn(owner(), _amount); } function _transfer(address from, address to, uint256 amount) internal override { if(amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && !swapping && from != uniswapV2Pair && from != owner() && to != owner() ) { swapping = true; swapAndLiquify(contractTokenBalance); sendDividends(); swapping = false; } if(!swapping){ bool takeFee = false; if(!isExcluded[from] && (from == uniswapV2Pair || to == uniswapV2Pair)){ takeFee = true; } if (takeFee){ uint256 fees = amount * (liquidityFee + adminFee + fundFee) / 10000; amount = amount - fees; super._transfer(from, address(this), fees); } } if (!isLimitExcluded[to]){ require((balanceOf(to) + amount) <= balanceLimit, "maxlimit"); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private { uint256 tokens = (contractTokenBalance * liquidityFee) / (liquidityFee + fundFee + adminFee); uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; uint256 halfPlusDividents = contractTokenBalance-otherHalf; swapTokensForEth(halfPlusDividents); uint256 newBalance = address(this).balance - initialBalance; addLiquidity(otherHalf, (newBalance*half)/halfPlusDividents); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp + 200 ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp + 200 ); } function sendDividends() private nonReentrant { uint256 ethBalance = address(this).balance; uint256 adminETH = (ethBalance * adminFee) / (adminFee + fundFee); uint256 fundETH = ethBalance - adminETH; bool successAdmin = payable(adminWallet).send(adminETH); bool successFund = payable(fundWallet).send(fundETH); if (!successAdmin) { emit TransferFailed(adminWallet, adminETH); } if (!successFund) { emit TransferFailed(fundWallet, fundETH); } } function setSwapAtAmount (uint256 amount) external onlyOwner { require(amount <= (percentageOfMaximumTokensToAccumate * totalSupply()) / 100, "Amount greater than max accumulated percentage"); require(swapTokensAtAmount != amount, "Same value provided"); swapTokensAtAmount = amount; emit SetSwapAtAmount(amount); } function setAdminWallet (address _address) external onlyOwner { require(_address != address(0) && adminWallet != _address, "Invalid or same address provided"); isExcluded[adminWallet] = false; adminWallet = _address; isExcluded[adminWallet] = true; } function setFundWAllet (address _address) external onlyOwner { require(_address != address(0) && fundWallet != _address, "Invalid or same address provided"); isExcluded[fundWallet] = false; fundWallet = _address; isExcluded[fundWallet] = true; } //should never be mixed with the direct transferOwnership unless owner doesn't want to be excluded function changeOwner (address _address) external onlyOwner { require(_address != address(0) && owner() != _address, "Invalid or same address provided"); isExcluded[owner()] = false; transferOwnership(_address); isExcluded[_address] = true; } function setExcludeWallet (address _address, bool _value) external onlyOwner{ require(isExcluded[_address] != _value, "Same exclusion value provided"); isExcluded[_address] = _value; } function setExcludeLimitWallet (address _address, bool _value) external onlyOwner{ require(isLimitExcluded[_address] != _value, "Same limit exclusion value provided"); isLimitExcluded[_address] = _value; } function setLimit (uint256 _limit) external onlyOwner { require(_limit > 10 ** 6 * TOKEN_DECIMALS && balanceLimit != _limit, "Limit is too small or same value provided"); balanceLimit = _limit; emit SetLimit(_limit); } function setFee (uint16 _newLPFee, uint16 _newadminFee, uint16 _newfundFee) external onlyOwner{ require (0 < _newLPFee + _newadminFee + _newfundFee && _newLPFee + _newadminFee + _newfundFee< 2500, "need to be strictly positive and smaller than 25%"); liquidityFee = _newLPFee; adminFee = _newadminFee; fundFee = _newfundFee; emit SetFee(liquidityFee, adminFee, fundFee); } }
Contract Security Audit
- "Cyberscope" - November 30, 2023- Security Audit Report
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"adminFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"fundFee","type":"uint16"}],"name":"SetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetSwapAtAmount","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferFailed","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"_burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_address","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeLimitWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newLPFee","type":"uint16"},{"internalType":"uint16","name":"_newadminFee","type":"uint16"},{"internalType":"uint16","name":"_newfundFee","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setFundWAllet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Router","type":"address"}],"name":"setUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600560146101000a81548160ff021916908315150217905550670de0b6b3a7640000620186a062000038919062000ca7565b600855670de0b6b3a76400006301312d0062000055919062000ca7565b6009557344ff56ef2f0654cf95200cb53c0873bbb669222d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732322f9c0c2f09677cb0892699a5936ed1a937b56600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506085600b60146101000a81548161ffff021916908361ffff1602179055506085600b60166101000a81548161ffff021916908361ffff1602179055506085600b60186101000a81548161ffff021916908361ffff1602179055503480156200016957600080fd5b506040518060400160405280601881526020017f41786f6e44414f20476f7665726e616e636520546f6b656e00000000000000008152506040518060400160405280600481526020017f41584754000000000000000000000000000000000000000000000000000000008152508160039080519060200190620001ee92919062000a8b565b5080600490805190602001906200020792919062000a8b565b50505060006200021c620008ef60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031d57600080fd5b505afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000b52565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bb57600080fd5b505afa158015620003d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f6919062000b52565b6040518363ffffffff1660e01b81526004016200041592919062000bcd565b602060405180830381600087803b1580156200043057600080fd5b505af115801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062000b52565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c600062000505620008f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620006b8620008f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008e7620008c1620008f760201b60201c565b670de0b6b3a7640000633b9aca00620008db919062000ca7565b6200092160201b60201c565b505062000e22565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098b9062000bfa565b60405180910390fd5b620009a86000838362000a8660201b60201c565b8060026000828254620009bc919062000c4a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a13919062000c4a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7a919062000c1c565b60405180910390a35050565b505050565b82805462000a999062000d46565b90600052602060002090601f01602090048101928262000abd576000855562000b09565b82601f1062000ad857805160ff191683800117855562000b09565b8280016001018555821562000b09579182015b8281111562000b0857825182559160200191906001019062000aeb565b5b50905062000b18919062000b1c565b5090565b5b8082111562000b3757600081600090555060010162000b1d565b5090565b60008151905062000b4c8162000e08565b92915050565b60006020828403121562000b6b5762000b6a62000dda565b5b600062000b7b8482850162000b3b565b91505092915050565b62000b8f8162000d08565b82525050565b600062000ba4601f8362000c39565b915062000bb18262000ddf565b602082019050919050565b62000bc78162000d3c565b82525050565b600060408201905062000be4600083018562000b84565b62000bf3602083018462000b84565b9392505050565b6000602082019050818103600083015262000c158162000b95565b9050919050565b600060208201905062000c33600083018462000bbc565b92915050565b600082825260208201905092915050565b600062000c578262000d3c565b915062000c648362000d3c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c9c5762000c9b62000d7c565b5b828201905092915050565b600062000cb48262000d3c565b915062000cc18362000d3c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cfd5762000cfc62000d7c565b5b828202905092915050565b600062000d158262000d1c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d5f57607f821691505b6020821081141562000d765762000d7562000dab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000e138162000d08565b811462000e1f57600080fd5b50565b614bfb8062000e326000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063a457c2d7116100a0578063cba0e9961161006f578063cba0e99614610776578063d9e2b9f6146107b3578063dd62ed3e146107dc578063e2f4560514610819578063f2fde38b146108445761020f565b8063a457c2d7146106aa578063a6f9dae1146106e7578063a9059cbb14610710578063b374e1c61461074d5761020f565b80638da5cb5b116100e75780638da5cb5b146105d557806395d89b411461060057806397b4e10a1461062b57806398118cb414610654578063a0be06f91461067f5761020f565b806370a082311461052d578063715018a61461056a57806373ece43514610581578063762bb282146105aa5761020f565b806327ea6f2b1161019b57806336b19cd71161016a57806336b19cd714610446578063395093511461047157806349bd5a5e146104ae5780636402511e146104d9578063664a1ad6146105025761020f565b806327ea6f2b1461039e578063313ce567146103c757806333abd028146103f2578063350829331461041d5761020f565b80631419841d116101d75780631419841d146102e25780631694505e1461030b57806318160ddd1461033657806323b872dd146103615761020f565b806306fdde0314610214578063095ea7b31461023f5780630996f4ea1461027c57806309c58ac1146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086d565b6040516102369190613ea1565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613884565b6108ff565b6040516102739190613e6b565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613757565b61091d565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613757565b610bb6565b6040516102d99190613e6b565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613757565b610bd6565b005b34801561031757600080fd5b5061032061109c565b60405161032d9190613e86565b60405180910390f35b34801561034257600080fd5b5061034b6110c2565b60405161035891906141b5565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906137f1565b6110cc565b6040516103959190613e6b565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613917565b6111cd565b005b3480156103d357600080fd5b506103dc61130b565b6040516103e9919061422a565b60405180910390f35b3480156103fe57600080fd5b50610407611314565b6040516104149190614163565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613757565b611328565b005b34801561045257600080fd5b5061045b6115c1565b6040516104689190613d9d565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613884565b6115e7565b6040516104a59190613e6b565b60405180910390f35b3480156104ba57600080fd5b506104c3611693565b6040516104d09190613d9d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613917565b6116b9565b005b34801561050e57600080fd5b5061051761183b565b6040516105249190613d9d565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613757565b611861565b60405161056191906141b5565b60405180910390f35b34801561057657600080fd5b5061057f6118a9565b005b34801561058d57600080fd5b506105a860048036038101906105a391906138c4565b611a01565b005b3480156105b657600080fd5b506105bf611be3565b6040516105cc91906141b5565b60405180910390f35b3480156105e157600080fd5b506105ea611be9565b6040516105f79190613d9d565b60405180910390f35b34801561060c57600080fd5b50610615611c13565b6040516106229190613ea1565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613917565b611ca5565b005b34801561066057600080fd5b50610669611d50565b6040516106769190614163565b60405180910390f35b34801561068b57600080fd5b50610694611d64565b6040516106a19190614163565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613884565b611d78565b6040516106de9190613e6b565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613757565b611e6c565b005b34801561071c57600080fd5b5061073760048036038101906107329190613884565b612075565b6040516107449190613e6b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613844565b612093565b005b34801561078257600080fd5b5061079d60048036038101906107989190613757565b612218565b6040516107aa9190613e6b565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613844565b612238565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906137b1565b6123bd565b60405161081091906141b5565b60405180910390f35b34801561082557600080fd5b5061082e612444565b60405161083b91906141b5565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613757565b61244a565b005b60606003805461087c906144c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a8906144c5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061091361090c612611565b8484612619565b6001905092915050565b610925612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610a3f57508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590614063565b60405180910390fd5b6000600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610bde612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614023565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cba57600080fd5b505afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613784565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190613784565b6040518363ffffffff1660e01b8152600401610dae929190613db8565b60206040518083038186803b158015610dc657600080fd5b505afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190613784565b905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f47578273ffffffffffffffffffffffffffffffffffffffff1663c9c65396308673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190613784565b6040518363ffffffff1660e01b8152600401610eee929190613db8565b602060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f409190613784565b9050610f4b565b8190505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613f03565b60405180910390fd5b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006110d98484846127e4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611124612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614003565b60405180910390fd5b6111c1856111b0612611565b85846111bc91906143b3565b612619565b60019150509392505050565b6111d5612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614023565b60405180910390fd5b670de0b6b3a7640000620f424061127b9190614359565b8111801561128b57508060095414155b6112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f23565b60405180910390fd5b806009819055507f479881bf41e329f328c21c2cbb11514b05a021cd33ea4e5a576ea6bc03874fd68160405161130091906141b5565b60405180910390a150565b60006012905090565b600b60189054906101000a900461ffff1681565b611330612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561144a57508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614063565b60405180910390fd5b6000600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116896115f4612611565b848460016000611602612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168491906142d2565b612619565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614023565b60405180910390fd5b606461175a6110c2565b600a60ff166117699190614359565b6117739190614328565b8111156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613fe3565b60405180910390fd5b8060085414156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613fc3565b60405180910390fd5b806008819055507f52c7826ed27bfb18ed3130f9306befb9572f2333e36e104330587d66b2f0d6c68160405161183091906141b5565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a09612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614023565b60405180910390fd5b808284611aa5919061429a565b611aaf919061429a565b61ffff166000108015611add57506109c4818385611acd919061429a565b611ad7919061429a565b61ffff16105b611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f43565b60405180910390fd5b82600b60146101000a81548161ffff021916908361ffff16021790555081600b60166101000a81548161ffff021916908361ffff16021790555080600b60186101000a81548161ffff021916908361ffff1602179055507f749c1e19e7730253c4c79e5dd6cf9f440f959897930d2d7afbb230284ec7711c600b60149054906101000a900461ffff16600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16604051611bd69392919061417e565b60405180910390a1505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c22906144c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4e906144c5565b8015611c9b5780601f10611c7057610100808354040283529160200191611c9b565b820191906000526020600020905b815481529060010190602001808311611c7e57829003601f168201915b5050505050905090565b611cad612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390614023565b60405180910390fd5b611d4d611d47611be9565b82612bba565b50565b600b60149054906101000a900461ffff1681565b600b60169054906101000a900461ffff1681565b60008060016000611d87612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614143565b60405180910390fd5b611e61611e4f612611565b858584611e5c91906143b3565b612619565b600191505092915050565b611e74612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f7357508073ffffffffffffffffffffffffffffffffffffffff16611f5a611be9565b73ffffffffffffffffffffffffffffffffffffffff1614155b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614063565b60405180910390fd5b6000600c6000611fc0611be9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061201a8161244a565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612089612082612611565b84846127e4565b6001905092915050565b61209b612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614023565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140c3565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b612240612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614023565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906140e3565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b612452612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890613f63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613f83565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127d791906141b5565b60405180910390a3505050565b60008114156127fe576127f983836000612d8e565b612bb5565b600061280930611861565b90506000600854821015905080801561282f5750600760149054906101000a900460ff16155b80156128895750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c85750612898611be9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561290757506128d7611be9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612954576001600760146101000a81548160ff0219169083151502179055506129308261300d565b6129386130fe565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff16612afd576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a685750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b5b15612a7357600190505b8015612afb576000612710600b60189054906101000a900461ffff16600b60169054906101000a900461ffff16600b60149054906101000a900461ffff16612abb919061429a565b612ac5919061429a565b61ffff1686612ad49190614359565b612ade9190614328565b90508085612aec91906143b3565b9450612af9873083612d8e565b505b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ba75760095483612b5b86611861565b612b6591906142d2565b1115612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614123565b60405180910390fd5b5b612bb2858585612d8e565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614043565b60405180910390fd5b612c3682600083613376565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb390613ee3565b60405180910390fd5b8181612cc891906143b3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d1c91906143b3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d8191906141b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906140a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590613ec3565b60405180910390fd5b612e79838383613376565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613fa3565b60405180910390fd5b8181612f0b91906143b3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9b91906142d2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fff91906141b5565b60405180910390a350505050565b6000600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16600b60149054906101000a900461ffff1661304c919061429a565b613056919061429a565b61ffff16600b60149054906101000a900461ffff1661ffff168361307a9190614359565b6130849190614328565b905060006002826130959190614328565b9050600081836130a591906143b3565b90506000479050600082866130ba91906143b3565b90506130c58161337b565b600082476130d391906143b3565b90506130f5848387846130e69190614359565b6130f09190614328565b6135d9565b50505050505050565b600560149054906101000a900460ff161561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314590614083565b60405180910390fd5b6001600560146101000a81548160ff02191690831515021790555060004790506000600b60189054906101000a900461ffff16600b60169054906101000a900461ffff1661319c919061429a565b61ffff16600b60169054906101000a900461ffff1661ffff16836131c09190614359565b6131ca9190614328565b9050600081836131da91906143b3565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050509050816132f3577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040516132ea929190613de1565b60405180910390a15b80613354577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460405161334b929190613de1565b60405180910390a15b50505050506000600560146101000a81548160ff021916908315150217905550565b505050565b6000600267ffffffffffffffff811115613398576133976145b3565b5b6040519080825280602002602001820160405280156133c65781602001602082028036833780820191505090505b50905030816000815181106133de576133dd614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561348057600080fd5b505afa158015613494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b89190613784565b816001815181106134cc576134cb614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843060c84261358391906142d2565b6040518663ffffffff1660e01b81526004016135a39594939291906141d0565b600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b505050505050565b61360630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613652611be9565b60c84261365f91906142d2565b6040518863ffffffff1660e01b815260040161368096959493929190613e0a565b6060604051808303818588803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d29190613944565b5050505050565b6000813590506136e881614b69565b92915050565b6000815190506136fd81614b69565b92915050565b60008135905061371281614b80565b92915050565b60008135905061372781614b97565b92915050565b60008135905061373c81614bae565b92915050565b60008151905061375181614bae565b92915050565b60006020828403121561376d5761376c6145e2565b5b600061377b848285016136d9565b91505092915050565b60006020828403121561379a576137996145e2565b5b60006137a8848285016136ee565b91505092915050565b600080604083850312156137c8576137c76145e2565b5b60006137d6858286016136d9565b92505060206137e7858286016136d9565b9150509250929050565b60008060006060848603121561380a576138096145e2565b5b6000613818868287016136d9565b9350506020613829868287016136d9565b925050604061383a8682870161372d565b9150509250925092565b6000806040838503121561385b5761385a6145e2565b5b6000613869858286016136d9565b925050602061387a85828601613703565b9150509250929050565b6000806040838503121561389b5761389a6145e2565b5b60006138a9858286016136d9565b92505060206138ba8582860161372d565b9150509250929050565b6000806000606084860312156138dd576138dc6145e2565b5b60006138eb86828701613718565b93505060206138fc86828701613718565b925050604061390d86828701613718565b9150509250925092565b60006020828403121561392d5761392c6145e2565b5b600061393b8482850161372d565b91505092915050565b60008060006060848603121561395d5761395c6145e2565b5b600061396b86828701613742565b935050602061397c86828701613742565b925050604061398d86828701613742565b9150509250925092565b60006139a383836139af565b60208301905092915050565b6139b8816143e7565b82525050565b6139c7816143e7565b82525050565b60006139d882614255565b6139e28185614278565b93506139ed83614245565b8060005b83811015613a1e578151613a058882613997565b9750613a108361426b565b9250506001810190506139f1565b5085935050505092915050565b613a34816143f9565b82525050565b613a438161444a565b82525050565b613a528161445c565b82525050565b6000613a6382614260565b613a6d8185614289565b9350613a7d818560208601614492565b613a86816145e7565b840191505092915050565b6000613a9e602383614289565b9150613aa9826145f8565b604082019050919050565b6000613ac1602283614289565b9150613acc82614647565b604082019050919050565b6000613ae4601883614289565b9150613aef82614696565b602082019050919050565b6000613b07602983614289565b9150613b12826146bf565b604082019050919050565b6000613b2a603183614289565b9150613b358261470e565b604082019050919050565b6000613b4d602683614289565b9150613b588261475d565b604082019050919050565b6000613b70602283614289565b9150613b7b826147ac565b604082019050919050565b6000613b93602683614289565b9150613b9e826147fb565b604082019050919050565b6000613bb6601383614289565b9150613bc18261484a565b602082019050919050565b6000613bd9602e83614289565b9150613be482614873565b604082019050919050565b6000613bfc602883614289565b9150613c07826148c2565b604082019050919050565b6000613c1f602083614289565b9150613c2a82614911565b602082019050919050565b6000613c42602183614289565b9150613c4d8261493a565b604082019050919050565b6000613c65602083614289565b9150613c7082614989565b602082019050919050565b6000613c88600e83614289565b9150613c93826149b2565b602082019050919050565b6000613cab602583614289565b9150613cb6826149db565b604082019050919050565b6000613cce602383614289565b9150613cd982614a2a565b604082019050919050565b6000613cf1601d83614289565b9150613cfc82614a79565b602082019050919050565b6000613d14602483614289565b9150613d1f82614aa2565b604082019050919050565b6000613d37600883614289565b9150613d4282614af1565b602082019050919050565b6000613d5a602583614289565b9150613d6582614b1a565b604082019050919050565b613d7981614405565b82525050565b613d8881614433565b82525050565b613d978161443d565b82525050565b6000602082019050613db260008301846139be565b92915050565b6000604082019050613dcd60008301856139be565b613dda60208301846139be565b9392505050565b6000604082019050613df660008301856139be565b613e036020830184613d7f565b9392505050565b600060c082019050613e1f60008301896139be565b613e2c6020830188613d7f565b613e396040830187613a49565b613e466060830186613a49565b613e5360808301856139be565b613e6060a0830184613d7f565b979650505050505050565b6000602082019050613e806000830184613a2b565b92915050565b6000602082019050613e9b6000830184613a3a565b92915050565b60006020820190508181036000830152613ebb8184613a58565b905092915050565b60006020820190508181036000830152613edc81613a91565b9050919050565b60006020820190508181036000830152613efc81613ab4565b9050919050565b60006020820190508181036000830152613f1c81613ad7565b9050919050565b60006020820190508181036000830152613f3c81613afa565b9050919050565b60006020820190508181036000830152613f5c81613b1d565b9050919050565b60006020820190508181036000830152613f7c81613b40565b9050919050565b60006020820190508181036000830152613f9c81613b63565b9050919050565b60006020820190508181036000830152613fbc81613b86565b9050919050565b60006020820190508181036000830152613fdc81613ba9565b9050919050565b60006020820190508181036000830152613ffc81613bcc565b9050919050565b6000602082019050818103600083015261401c81613bef565b9050919050565b6000602082019050818103600083015261403c81613c12565b9050919050565b6000602082019050818103600083015261405c81613c35565b9050919050565b6000602082019050818103600083015261407c81613c58565b9050919050565b6000602082019050818103600083015261409c81613c7b565b9050919050565b600060208201905081810360008301526140bc81613c9e565b9050919050565b600060208201905081810360008301526140dc81613cc1565b9050919050565b600060208201905081810360008301526140fc81613ce4565b9050919050565b6000602082019050818103600083015261411c81613d07565b9050919050565b6000602082019050818103600083015261413c81613d2a565b9050919050565b6000602082019050818103600083015261415c81613d4d565b9050919050565b60006020820190506141786000830184613d70565b92915050565b60006060820190506141936000830186613d70565b6141a06020830185613d70565b6141ad6040830184613d70565b949350505050565b60006020820190506141ca6000830184613d7f565b92915050565b600060a0820190506141e56000830188613d7f565b6141f26020830187613a49565b818103604083015261420481866139cd565b905061421360608301856139be565b6142206080830184613d7f565b9695505050505050565b600060208201905061423f6000830184613d8e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142a582614405565b91506142b083614405565b92508261ffff038211156142c7576142c66144f7565b5b828201905092915050565b60006142dd82614433565b91506142e883614433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431d5761431c6144f7565b5b828201905092915050565b600061433382614433565b915061433e83614433565b92508261434e5761434d614526565b5b828204905092915050565b600061436482614433565b915061436f83614433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a8576143a76144f7565b5b828202905092915050565b60006143be82614433565b91506143c983614433565b9250828210156143dc576143db6144f7565b5b828203905092915050565b60006143f282614413565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144558261446e565b9050919050565b600061446782614433565b9050919050565b600061447982614480565b9050919050565b600061448b82614413565b9050919050565b60005b838110156144b0578082015181840152602081019050614495565b838111156144bf576000848401525b50505050565b600060028204905060018216806144dd57607f821691505b602082108114156144f1576144f0614555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061697220616464726573732073657420746f207a65726f0000000000000000600082015250565b7f4c696d697420697320746f6f20736d616c6c206f722073616d652076616c756560008201527f2070726f76696465640000000000000000000000000000000000000000000000602082015250565b7f6e65656420746f206265207374726963746c7920706f73697469766520616e6460008201527f20736d616c6c6572207468616e20323525000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616d652076616c75652070726f766964656400000000000000000000000000600082015250565b7f416d6f756e742067726561746572207468616e206d617820616363756d756c6160008201527f7465642070657263656e74616765000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206f722073616d6520616464726573732070726f7669646564600082015250565b7f5265656e7472616e742063616c6c000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206c696d6974206578636c7573696f6e2076616c75652070726f766960008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206578636c7573696f6e2076616c75652070726f7669646564000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d61786c696d6974000000000000000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b72816143e7565b8114614b7d57600080fd5b50565b614b89816143f9565b8114614b9457600080fd5b50565b614ba081614405565b8114614bab57600080fd5b50565b614bb781614433565b8114614bc257600080fd5b5056fea264697066735822122022658e99258a004215a9d5d1286f630e9c9f0af565d69c8374698cf8b782d22564736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102085760003560e01c806370a0823111610118578063a457c2d7116100a0578063cba0e9961161006f578063cba0e99614610776578063d9e2b9f6146107b3578063dd62ed3e146107dc578063e2f4560514610819578063f2fde38b146108445761020f565b8063a457c2d7146106aa578063a6f9dae1146106e7578063a9059cbb14610710578063b374e1c61461074d5761020f565b80638da5cb5b116100e75780638da5cb5b146105d557806395d89b411461060057806397b4e10a1461062b57806398118cb414610654578063a0be06f91461067f5761020f565b806370a082311461052d578063715018a61461056a57806373ece43514610581578063762bb282146105aa5761020f565b806327ea6f2b1161019b57806336b19cd71161016a57806336b19cd714610446578063395093511461047157806349bd5a5e146104ae5780636402511e146104d9578063664a1ad6146105025761020f565b806327ea6f2b1461039e578063313ce567146103c757806333abd028146103f2578063350829331461041d5761020f565b80631419841d116101d75780631419841d146102e25780631694505e1461030b57806318160ddd1461033657806323b872dd146103615761020f565b806306fdde0314610214578063095ea7b31461023f5780630996f4ea1461027c57806309c58ac1146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086d565b6040516102369190613ea1565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613884565b6108ff565b6040516102739190613e6b565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613757565b61091d565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613757565b610bb6565b6040516102d99190613e6b565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613757565b610bd6565b005b34801561031757600080fd5b5061032061109c565b60405161032d9190613e86565b60405180910390f35b34801561034257600080fd5b5061034b6110c2565b60405161035891906141b5565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906137f1565b6110cc565b6040516103959190613e6b565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613917565b6111cd565b005b3480156103d357600080fd5b506103dc61130b565b6040516103e9919061422a565b60405180910390f35b3480156103fe57600080fd5b50610407611314565b6040516104149190614163565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613757565b611328565b005b34801561045257600080fd5b5061045b6115c1565b6040516104689190613d9d565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613884565b6115e7565b6040516104a59190613e6b565b60405180910390f35b3480156104ba57600080fd5b506104c3611693565b6040516104d09190613d9d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613917565b6116b9565b005b34801561050e57600080fd5b5061051761183b565b6040516105249190613d9d565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613757565b611861565b60405161056191906141b5565b60405180910390f35b34801561057657600080fd5b5061057f6118a9565b005b34801561058d57600080fd5b506105a860048036038101906105a391906138c4565b611a01565b005b3480156105b657600080fd5b506105bf611be3565b6040516105cc91906141b5565b60405180910390f35b3480156105e157600080fd5b506105ea611be9565b6040516105f79190613d9d565b60405180910390f35b34801561060c57600080fd5b50610615611c13565b6040516106229190613ea1565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613917565b611ca5565b005b34801561066057600080fd5b50610669611d50565b6040516106769190614163565b60405180910390f35b34801561068b57600080fd5b50610694611d64565b6040516106a19190614163565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613884565b611d78565b6040516106de9190613e6b565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613757565b611e6c565b005b34801561071c57600080fd5b5061073760048036038101906107329190613884565b612075565b6040516107449190613e6b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613844565b612093565b005b34801561078257600080fd5b5061079d60048036038101906107989190613757565b612218565b6040516107aa9190613e6b565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613844565b612238565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906137b1565b6123bd565b60405161081091906141b5565b60405180910390f35b34801561082557600080fd5b5061082e612444565b60405161083b91906141b5565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613757565b61244a565b005b60606003805461087c906144c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a8906144c5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061091361090c612611565b8484612619565b6001905092915050565b610925612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610a3f57508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590614063565b60405180910390fd5b6000600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610bde612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614023565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cba57600080fd5b505afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613784565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190613784565b6040518363ffffffff1660e01b8152600401610dae929190613db8565b60206040518083038186803b158015610dc657600080fd5b505afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190613784565b905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f47578273ffffffffffffffffffffffffffffffffffffffff1663c9c65396308673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190613784565b6040518363ffffffff1660e01b8152600401610eee929190613db8565b602060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f409190613784565b9050610f4b565b8190505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613f03565b60405180910390fd5b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006110d98484846127e4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611124612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614003565b60405180910390fd5b6111c1856111b0612611565b85846111bc91906143b3565b612619565b60019150509392505050565b6111d5612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614023565b60405180910390fd5b670de0b6b3a7640000620f424061127b9190614359565b8111801561128b57508060095414155b6112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f23565b60405180910390fd5b806009819055507f479881bf41e329f328c21c2cbb11514b05a021cd33ea4e5a576ea6bc03874fd68160405161130091906141b5565b60405180910390a150565b60006012905090565b600b60189054906101000a900461ffff1681565b611330612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561144a57508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614063565b60405180910390fd5b6000600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116896115f4612611565b848460016000611602612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168491906142d2565b612619565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614023565b60405180910390fd5b606461175a6110c2565b600a60ff166117699190614359565b6117739190614328565b8111156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613fe3565b60405180910390fd5b8060085414156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613fc3565b60405180910390fd5b806008819055507f52c7826ed27bfb18ed3130f9306befb9572f2333e36e104330587d66b2f0d6c68160405161183091906141b5565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a09612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614023565b60405180910390fd5b808284611aa5919061429a565b611aaf919061429a565b61ffff166000108015611add57506109c4818385611acd919061429a565b611ad7919061429a565b61ffff16105b611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f43565b60405180910390fd5b82600b60146101000a81548161ffff021916908361ffff16021790555081600b60166101000a81548161ffff021916908361ffff16021790555080600b60186101000a81548161ffff021916908361ffff1602179055507f749c1e19e7730253c4c79e5dd6cf9f440f959897930d2d7afbb230284ec7711c600b60149054906101000a900461ffff16600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16604051611bd69392919061417e565b60405180910390a1505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c22906144c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4e906144c5565b8015611c9b5780601f10611c7057610100808354040283529160200191611c9b565b820191906000526020600020905b815481529060010190602001808311611c7e57829003601f168201915b5050505050905090565b611cad612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390614023565b60405180910390fd5b611d4d611d47611be9565b82612bba565b50565b600b60149054906101000a900461ffff1681565b600b60169054906101000a900461ffff1681565b60008060016000611d87612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614143565b60405180910390fd5b611e61611e4f612611565b858584611e5c91906143b3565b612619565b600191505092915050565b611e74612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f7357508073ffffffffffffffffffffffffffffffffffffffff16611f5a611be9565b73ffffffffffffffffffffffffffffffffffffffff1614155b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614063565b60405180910390fd5b6000600c6000611fc0611be9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061201a8161244a565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612089612082612611565b84846127e4565b6001905092915050565b61209b612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614023565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140c3565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b612240612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614023565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906140e3565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b612452612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890613f63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613f83565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127d791906141b5565b60405180910390a3505050565b60008114156127fe576127f983836000612d8e565b612bb5565b600061280930611861565b90506000600854821015905080801561282f5750600760149054906101000a900460ff16155b80156128895750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c85750612898611be9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561290757506128d7611be9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612954576001600760146101000a81548160ff0219169083151502179055506129308261300d565b6129386130fe565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff16612afd576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a685750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b5b15612a7357600190505b8015612afb576000612710600b60189054906101000a900461ffff16600b60169054906101000a900461ffff16600b60149054906101000a900461ffff16612abb919061429a565b612ac5919061429a565b61ffff1686612ad49190614359565b612ade9190614328565b90508085612aec91906143b3565b9450612af9873083612d8e565b505b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ba75760095483612b5b86611861565b612b6591906142d2565b1115612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614123565b60405180910390fd5b5b612bb2858585612d8e565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614043565b60405180910390fd5b612c3682600083613376565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb390613ee3565b60405180910390fd5b8181612cc891906143b3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d1c91906143b3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d8191906141b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906140a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590613ec3565b60405180910390fd5b612e79838383613376565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613fa3565b60405180910390fd5b8181612f0b91906143b3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9b91906142d2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fff91906141b5565b60405180910390a350505050565b6000600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16600b60149054906101000a900461ffff1661304c919061429a565b613056919061429a565b61ffff16600b60149054906101000a900461ffff1661ffff168361307a9190614359565b6130849190614328565b905060006002826130959190614328565b9050600081836130a591906143b3565b90506000479050600082866130ba91906143b3565b90506130c58161337b565b600082476130d391906143b3565b90506130f5848387846130e69190614359565b6130f09190614328565b6135d9565b50505050505050565b600560149054906101000a900460ff161561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314590614083565b60405180910390fd5b6001600560146101000a81548160ff02191690831515021790555060004790506000600b60189054906101000a900461ffff16600b60169054906101000a900461ffff1661319c919061429a565b61ffff16600b60169054906101000a900461ffff1661ffff16836131c09190614359565b6131ca9190614328565b9050600081836131da91906143b3565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050509050816132f3577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040516132ea929190613de1565b60405180910390a15b80613354577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460405161334b929190613de1565b60405180910390a15b50505050506000600560146101000a81548160ff021916908315150217905550565b505050565b6000600267ffffffffffffffff811115613398576133976145b3565b5b6040519080825280602002602001820160405280156133c65781602001602082028036833780820191505090505b50905030816000815181106133de576133dd614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561348057600080fd5b505afa158015613494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b89190613784565b816001815181106134cc576134cb614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843060c84261358391906142d2565b6040518663ffffffff1660e01b81526004016135a39594939291906141d0565b600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b505050505050565b61360630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613652611be9565b60c84261365f91906142d2565b6040518863ffffffff1660e01b815260040161368096959493929190613e0a565b6060604051808303818588803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d29190613944565b5050505050565b6000813590506136e881614b69565b92915050565b6000815190506136fd81614b69565b92915050565b60008135905061371281614b80565b92915050565b60008135905061372781614b97565b92915050565b60008135905061373c81614bae565b92915050565b60008151905061375181614bae565b92915050565b60006020828403121561376d5761376c6145e2565b5b600061377b848285016136d9565b91505092915050565b60006020828403121561379a576137996145e2565b5b60006137a8848285016136ee565b91505092915050565b600080604083850312156137c8576137c76145e2565b5b60006137d6858286016136d9565b92505060206137e7858286016136d9565b9150509250929050565b60008060006060848603121561380a576138096145e2565b5b6000613818868287016136d9565b9350506020613829868287016136d9565b925050604061383a8682870161372d565b9150509250925092565b6000806040838503121561385b5761385a6145e2565b5b6000613869858286016136d9565b925050602061387a85828601613703565b9150509250929050565b6000806040838503121561389b5761389a6145e2565b5b60006138a9858286016136d9565b92505060206138ba8582860161372d565b9150509250929050565b6000806000606084860312156138dd576138dc6145e2565b5b60006138eb86828701613718565b93505060206138fc86828701613718565b925050604061390d86828701613718565b9150509250925092565b60006020828403121561392d5761392c6145e2565b5b600061393b8482850161372d565b91505092915050565b60008060006060848603121561395d5761395c6145e2565b5b600061396b86828701613742565b935050602061397c86828701613742565b925050604061398d86828701613742565b9150509250925092565b60006139a383836139af565b60208301905092915050565b6139b8816143e7565b82525050565b6139c7816143e7565b82525050565b60006139d882614255565b6139e28185614278565b93506139ed83614245565b8060005b83811015613a1e578151613a058882613997565b9750613a108361426b565b9250506001810190506139f1565b5085935050505092915050565b613a34816143f9565b82525050565b613a438161444a565b82525050565b613a528161445c565b82525050565b6000613a6382614260565b613a6d8185614289565b9350613a7d818560208601614492565b613a86816145e7565b840191505092915050565b6000613a9e602383614289565b9150613aa9826145f8565b604082019050919050565b6000613ac1602283614289565b9150613acc82614647565b604082019050919050565b6000613ae4601883614289565b9150613aef82614696565b602082019050919050565b6000613b07602983614289565b9150613b12826146bf565b604082019050919050565b6000613b2a603183614289565b9150613b358261470e565b604082019050919050565b6000613b4d602683614289565b9150613b588261475d565b604082019050919050565b6000613b70602283614289565b9150613b7b826147ac565b604082019050919050565b6000613b93602683614289565b9150613b9e826147fb565b604082019050919050565b6000613bb6601383614289565b9150613bc18261484a565b602082019050919050565b6000613bd9602e83614289565b9150613be482614873565b604082019050919050565b6000613bfc602883614289565b9150613c07826148c2565b604082019050919050565b6000613c1f602083614289565b9150613c2a82614911565b602082019050919050565b6000613c42602183614289565b9150613c4d8261493a565b604082019050919050565b6000613c65602083614289565b9150613c7082614989565b602082019050919050565b6000613c88600e83614289565b9150613c93826149b2565b602082019050919050565b6000613cab602583614289565b9150613cb6826149db565b604082019050919050565b6000613cce602383614289565b9150613cd982614a2a565b604082019050919050565b6000613cf1601d83614289565b9150613cfc82614a79565b602082019050919050565b6000613d14602483614289565b9150613d1f82614aa2565b604082019050919050565b6000613d37600883614289565b9150613d4282614af1565b602082019050919050565b6000613d5a602583614289565b9150613d6582614b1a565b604082019050919050565b613d7981614405565b82525050565b613d8881614433565b82525050565b613d978161443d565b82525050565b6000602082019050613db260008301846139be565b92915050565b6000604082019050613dcd60008301856139be565b613dda60208301846139be565b9392505050565b6000604082019050613df660008301856139be565b613e036020830184613d7f565b9392505050565b600060c082019050613e1f60008301896139be565b613e2c6020830188613d7f565b613e396040830187613a49565b613e466060830186613a49565b613e5360808301856139be565b613e6060a0830184613d7f565b979650505050505050565b6000602082019050613e806000830184613a2b565b92915050565b6000602082019050613e9b6000830184613a3a565b92915050565b60006020820190508181036000830152613ebb8184613a58565b905092915050565b60006020820190508181036000830152613edc81613a91565b9050919050565b60006020820190508181036000830152613efc81613ab4565b9050919050565b60006020820190508181036000830152613f1c81613ad7565b9050919050565b60006020820190508181036000830152613f3c81613afa565b9050919050565b60006020820190508181036000830152613f5c81613b1d565b9050919050565b60006020820190508181036000830152613f7c81613b40565b9050919050565b60006020820190508181036000830152613f9c81613b63565b9050919050565b60006020820190508181036000830152613fbc81613b86565b9050919050565b60006020820190508181036000830152613fdc81613ba9565b9050919050565b60006020820190508181036000830152613ffc81613bcc565b9050919050565b6000602082019050818103600083015261401c81613bef565b9050919050565b6000602082019050818103600083015261403c81613c12565b9050919050565b6000602082019050818103600083015261405c81613c35565b9050919050565b6000602082019050818103600083015261407c81613c58565b9050919050565b6000602082019050818103600083015261409c81613c7b565b9050919050565b600060208201905081810360008301526140bc81613c9e565b9050919050565b600060208201905081810360008301526140dc81613cc1565b9050919050565b600060208201905081810360008301526140fc81613ce4565b9050919050565b6000602082019050818103600083015261411c81613d07565b9050919050565b6000602082019050818103600083015261413c81613d2a565b9050919050565b6000602082019050818103600083015261415c81613d4d565b9050919050565b60006020820190506141786000830184613d70565b92915050565b60006060820190506141936000830186613d70565b6141a06020830185613d70565b6141ad6040830184613d70565b949350505050565b60006020820190506141ca6000830184613d7f565b92915050565b600060a0820190506141e56000830188613d7f565b6141f26020830187613a49565b818103604083015261420481866139cd565b905061421360608301856139be565b6142206080830184613d7f565b9695505050505050565b600060208201905061423f6000830184613d8e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142a582614405565b91506142b083614405565b92508261ffff038211156142c7576142c66144f7565b5b828201905092915050565b60006142dd82614433565b91506142e883614433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431d5761431c6144f7565b5b828201905092915050565b600061433382614433565b915061433e83614433565b92508261434e5761434d614526565b5b828204905092915050565b600061436482614433565b915061436f83614433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a8576143a76144f7565b5b828202905092915050565b60006143be82614433565b91506143c983614433565b9250828210156143dc576143db6144f7565b5b828203905092915050565b60006143f282614413565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144558261446e565b9050919050565b600061446782614433565b9050919050565b600061447982614480565b9050919050565b600061448b82614413565b9050919050565b60005b838110156144b0578082015181840152602081019050614495565b838111156144bf576000848401525b50505050565b600060028204905060018216806144dd57607f821691505b602082108114156144f1576144f0614555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061697220616464726573732073657420746f207a65726f0000000000000000600082015250565b7f4c696d697420697320746f6f20736d616c6c206f722073616d652076616c756560008201527f2070726f76696465640000000000000000000000000000000000000000000000602082015250565b7f6e65656420746f206265207374726963746c7920706f73697469766520616e6460008201527f20736d616c6c6572207468616e20323525000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616d652076616c75652070726f766964656400000000000000000000000000600082015250565b7f416d6f756e742067726561746572207468616e206d617820616363756d756c6160008201527f7465642070657263656e74616765000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206f722073616d6520616464726573732070726f7669646564600082015250565b7f5265656e7472616e742063616c6c000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206c696d6974206578636c7573696f6e2076616c75652070726f766960008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206578636c7573696f6e2076616c75652070726f7669646564000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d61786c696d6974000000000000000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b72816143e7565b8114614b7d57600080fd5b50565b614b89816143f9565b8114614b9457600080fd5b50565b614ba081614405565b8114614bab57600080fd5b50565b614bb781614433565b8114614bc257600080fd5b5056fea264697066735822122022658e99258a004215a9d5d1286f630e9c9f0af565d69c8374698cf8b782d22564736f6c63430008070033
Deployed Bytecode Sourcemap
24471:8824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6805:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8972:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31462:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25232:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26430:916;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24529:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7925:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9623:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32597:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7767:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25146:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31163:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24915:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10454:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24577:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30797:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24993:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8096:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16105:148;;;;;;;;;;;;;:::i;:::-;;32867:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24850:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15895:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7024:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27356:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25072:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25111:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11172:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31856:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8436:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32361:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25182:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32146:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8674:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24783:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16259:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6805:100;6859:13;6892:5;6885:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6805:100;:::o;8972:169::-;9055:4;9072:39;9081:12;:10;:12::i;:::-;9095:7;9104:6;9072:8;:39::i;:::-;9129:4;9122:11;;8972:169;;;;:::o;31462:286::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31562:1:::1;31542:22;;:8;:22;;;;:48;;;;;31582:8;31568:22;;:10;;;;;;;;;;;:22;;;;31542:48;31534:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;31663:5;31638:10;:22;31649:10;;;;;;;;;;;31638:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31692:8;31679:10;;:21;;;;;;;;;;;;;;;;;;31736:4;31711:10;:22;31722:10;;;;;;;;;;;31711:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31462:286:::0;:::o;25232:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26430:916::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26514:35:::1;26571:16;26514:74;;26599:25;26645:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26599:73;;26726:20;26749:7;:15;;;26773:4;26780:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26749:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26726:78;;26817:22;26878:1:::0;26854:26:::1;;:12;:26;;;26850:278;;;26951:7;:18;;;26978:4;26985:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26951:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26934:75;;26850:278;;;27104:12;27087:29;;26850:278;27172:1;27146:28;;:14;:28;;;;27138:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27232:16;27214:15;;:34;;;;;;;;;;;;;;;;;;27275:14;27259:13;;:30;;;;;;;;;;;;;;;;;;27334:4;27300:15;:31;27316:14;27300:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;26503:843;;;;26430:916:::0;:::o;24529:41::-;;;;;;;;;;;;;:::o;7925:108::-;7986:7;8013:12;;8006:19;;7925:108;:::o;9623:422::-;9729:4;9746:36;9756:6;9764:9;9775:6;9746:9;:36::i;:::-;9795:24;9822:11;:19;9834:6;9822:19;;;;;;;;;;;;;;;:33;9842:12;:10;:12::i;:::-;9822:33;;;;;;;;;;;;;;;;9795:60;;9894:6;9874:16;:26;;9866:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9956:57;9965:6;9973:12;:10;:12::i;:::-;10006:6;9987:16;:25;;;;:::i;:::-;9956:8;:57::i;:::-;10033:4;10026:11;;;9623:422;;;;;:::o;32597:262::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24656:6:::1;32679:7;:24;;;;:::i;:::-;32670:6;:33;:59;;;;;32723:6;32707:12;;:22;;32670:59;32662:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32811:6;32796:12;:21;;;;32835:16;32844:6;32835:16;;;;;;:::i;:::-;;;;;;;;32597:262:::0;:::o;7767:93::-;7825:5;7850:2;7843:9;;7767:93;:::o;25146:27::-;;;;;;;;;;;;;:::o;31163:291::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31264:1:::1;31244:22;;:8;:22;;;;:49;;;;;31285:8;31270:23;;:11;;;;;;;;;;;:23;;;;31244:49;31236:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;31367:5;31341:10;:23;31352:11;;;;;;;;;;;31341:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;31397:8;31383:11;;:22;;;;;;;;;;;;;;;;;;31442:4;31416:10;:23;31427:11;;;;;;;;;;;31416:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31163:291:::0;:::o;24915:71::-;;;;;;;;;;;;;:::o;10454:215::-;10542:4;10559:80;10568:12;:10;:12::i;:::-;10582:7;10628:10;10591:11;:25;10603:12;:10;:12::i;:::-;10591:25;;;;;;;;;;;;;;;:34;10617:7;10591:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10559:8;:80::i;:::-;10657:4;10650:11;;10454:215;;;;:::o;24577:28::-;;;;;;;;;;;;;:::o;30797:358::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30943:3:::1;30926:13;:11;:13::i;:::-;24730:2;30888:51;;;;;;:::i;:::-;30887:59;;;;:::i;:::-;30877:6;:69;;30869:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31038:6;31016:18;;:28;;31008:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31100:6;31079:18;:27;;;;31124:23;31140:6;31124:23;;;;;;:::i;:::-;;;;;;;;30797:358:::0;:::o;24993:70::-;;;;;;;;;;;;;:::o;8096:127::-;8170:7;8197:9;:18;8207:7;8197:18;;;;;;;;;;;;;;;;8190:25;;8096:127;;;:::o;16105:148::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16212:1:::1;16175:40;;16196:6;;;;;;;;;;;16175:40;;;;;;;;;;;;16243:1;16226:6;;:19;;;;;;;;;;;;;;;;;;16105:148::o:0;32867:425::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33012:11:::1;32997:12;32985:9;:24;;;;:::i;:::-;:38;;;;:::i;:::-;32981:42;;:1;:42;:91;;;;;33068:4;33055:11;33040:12;33028:9;:24;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;32981:91;32972:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33152:9;33137:12;;:24;;;;;;;;;;;;;;;;;;33183:12;33172:8;;:23;;;;;;;;;;;;;;;;;;33216:11;33206:7;;:21;;;;;;;;;;;;;;;;;;33245:39;33252:12;;;;;;;;;;;33266:8;;;;;;;;;;;33276:7;;;;;;;;;;;33245:39;;;;;;;;:::i;:::-;;;;;;;;32867:425:::0;;;:::o;24850:58::-;;;;:::o;15895:79::-;15933:7;15960:6;;;;;;;;;;;15953:13;;15895:79;:::o;7024:104::-;7080:13;7113:7;7106:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7024:104;:::o;27356:98::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27423:23:::1;27429:7;:5;:7::i;:::-;27438;27423:5;:23::i;:::-;27356:98:::0;:::o;25072:32::-;;;;;;;;;;;;;:::o;25111:28::-;;;;;;;;;;;;;:::o;11172:377::-;11265:4;11282:24;11309:11;:25;11321:12;:10;:12::i;:::-;11309:25;;;;;;;;;;;;;;;:34;11335:7;11309:34;;;;;;;;;;;;;;;;11282:61;;11382:15;11362:16;:35;;11354:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11450:67;11459:12;:10;:12::i;:::-;11473:7;11501:15;11482:16;:34;;;;:::i;:::-;11450:8;:67::i;:::-;11537:4;11530:11;;;11172:377;;;;:::o;31856:282::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31954:1:::1;31934:22;;:8;:22;;;;:45;;;;;31971:8;31960:19;;:7;:5;:7::i;:::-;:19;;;;31934:45;31926:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;32049:5;32027:10;:19;32038:7;:5;:7::i;:::-;32027:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;32065;32083:8;32065:17;:27::i;:::-;32126:4;32103:10;:20;32114:8;32103:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31856:282:::0;:::o;8436:175::-;8522:4;8539:42;8549:12;:10;:12::i;:::-;8563:9;8574:6;8539:9;:42::i;:::-;8599:4;8592:11;;8436:175;;;;:::o;32361:228::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32490:6:::1;32461:35;;:15;:25;32477:8;32461:25;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;32453:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;32575:6;32547:15;:25;32563:8;32547:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32361:228:::0;;:::o;25182:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;32146:207::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32265:6:::1;32241:30;;:10;:20;32252:8;32241:20;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;32233:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32339:6;32316:10;:20;32327:8;32316:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32146:207:::0;;:::o;8674:151::-;8763:7;8790:11;:18;8802:5;8790:18;;;;;;;;;;;;;;;:27;8809:7;8790:27;;;;;;;;;;;;;;;;8783:34;;8674:151;;;;:::o;24783:60::-;;;;:::o;16259:244::-;16030:12;:10;:12::i;:::-;16020:22;;:6;;;;;;;;;;;:22;;;16012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16368:1:::1;16348:22;;:8;:22;;;;16340:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16458:8;16429:38;;16450:6;;;;;;;;;;;16429:38;;;;;;;;;;;;16487:8;16478:6;;:17;;;;;;;;;;;;;;;;;;16259:244:::0;:::o;1021:98::-;1074:7;1101:10;1094:17;;1021:98;:::o;14528:346::-;14647:1;14630:19;;:5;:19;;;;14622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14728:1;14709:21;;:7;:21;;;;14701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14812:6;14782:11;:18;14794:5;14782:18;;;;;;;;;;;;;;;:27;14801:7;14782:27;;;;;;;;;;;;;;;:36;;;;14850:7;14834:32;;14843:5;14834:32;;;14859:6;14834:32;;;;;;:::i;:::-;;;;;;;;14528:346;;;:::o;27462:1316::-;27571:1;27561:6;:11;27558:92;;;27589:28;27605:4;27611:2;27615:1;27589:15;:28::i;:::-;27632:7;;27558:92;27662:28;27693:24;27711:4;27693:9;:24::i;:::-;27662:55;;27728:12;27767:18;;27743:20;:42;;27728:57;;27813:7;:33;;;;;27838:8;;;;;;;;;;;27837:9;27813:33;:71;;;;;27871:13;;;;;;;;;;;27863:21;;:4;:21;;;;27813:71;:103;;;;;27909:7;:5;:7::i;:::-;27901:15;;:4;:15;;;;27813:103;:133;;;;;27939:7;:5;:7::i;:::-;27933:13;;:2;:13;;;;27813:133;27796:330;;;27984:4;27973:8;;:15;;;;;;;;;;;;;;;;;;28017:36;28032:20;28017:14;:36::i;:::-;28068:15;:13;:15::i;:::-;28109:5;28098:8;;:16;;;;;;;;;;;;;;;;;;27796:330;28142:8;;;;;;;;;;;28138:464;;28174:12;28215:10;:16;28226:4;28215:16;;;;;;;;;;;;;;;;;;;;;;;;;28214:17;:67;;;;;28244:13;;;;;;;;;;;28236:21;;:4;:21;;;:44;;;;28267:13;;;;;;;;;;;28261:19;;:2;:19;;;28236:44;28214:67;28211:128;;;28315:4;28305:14;;28211:128;28363:7;28359:232;;;28394:12;28456:5;28445:7;;;;;;;;;;;28434:8;;;;;;;;;;;28419:12;;;;;;;;;;;:23;;;;:::i;:::-;:33;;;;:::i;:::-;28409:44;;:6;:44;;;;:::i;:::-;:52;;;;:::i;:::-;28394:67;;28502:4;28493:6;:13;;;;:::i;:::-;28484:22;;28529:42;28545:4;28559;28566;28529:15;:42::i;:::-;28371:220;28359:232;28151:451;28138:464;28617:15;:19;28633:2;28617:19;;;;;;;;;;;;;;;;;;;;;;;;;28612:113;;28688:12;;28677:6;28661:13;28671:2;28661:9;:13::i;:::-;:22;;;;:::i;:::-;28660:40;;28652:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28612:113;28735:33;28751:4;28757:2;28761:6;28735:15;:33::i;:::-;27543:1235;;27462:1316;;;;:::o;13596:494::-;13699:1;13680:21;;:7;:21;;;;13672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13752:49;13773:7;13790:1;13794:6;13752:20;:49::i;:::-;13814:22;13839:9;:18;13849:7;13839:18;;;;;;;;;;;;;;;;13814:43;;13894:6;13876:14;:24;;13868:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13988:6;13971:14;:23;;;;:::i;:::-;13950:9;:18;13960:7;13950:18;;;;;;;;;;;;;;;:44;;;;14021:6;14005:12;;:22;;;;;;;:::i;:::-;;;;;;;;14071:1;14045:37;;14054:7;14045:37;;;14075:6;14045:37;;;;;;:::i;:::-;;;;;;;;13661:429;13596:494;;:::o;12039:604::-;12163:1;12145:20;;:6;:20;;;;12137:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12247:1;12226:23;;:9;:23;;;;12218:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12302:47;12323:6;12331:9;12342:6;12302:20;:47::i;:::-;12362:21;12386:9;:17;12396:6;12386:17;;;;;;;;;;;;;;;;12362:41;;12439:6;12422:13;:23;;12414:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12535:6;12519:13;:22;;;;:::i;:::-;12499:9;:17;12509:6;12499:17;;;;;;;;;;;;;;;:42;;;;12576:6;12552:9;:20;12562:9;12552:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12617:9;12600:35;;12609:6;12600:35;;;12628:6;12600:35;;;;;;:::i;:::-;;;;;;;;12126:517;12039:604;;;:::o;28786:576::-;28859:14;28942:8;;;;;;;;;;;28932:7;;;;;;;;;;;28917:12;;;;;;;;;;;:22;;;;:::i;:::-;:33;;;;:::i;:::-;28876:75;;28900:12;;;;;;;;;;;28877:35;;:20;:35;;;;:::i;:::-;28876:75;;;;:::i;:::-;28859:92;;28962:12;28986:1;28977:6;:10;;;;:::i;:::-;28962:25;;28998:17;29027:4;29018:6;:13;;;;:::i;:::-;28998:33;;29052:22;29077:21;29052:46;;29109:25;29158:9;29137:20;:30;;;;:::i;:::-;29109:58;;29178:35;29195:17;29178:16;:35::i;:::-;29224:18;29269:14;29245:21;:38;;;;:::i;:::-;29224:59;;29294:60;29307:9;29336:17;29330:4;29319:10;:15;;;;:::i;:::-;29318:35;;;;:::i;:::-;29294:12;:60::i;:::-;28848:514;;;;;;28786:576;:::o;30229:558::-;887:6;;;;;;;;;;;886:7;878:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;932:4;923:6;;:13;;;;;;;;;;;;;;;;;;30286:18:::1;30307:21;30286:42;;30339:16;30396:7;;;;;;;;;;;30385:8;;;;;;;;;;;:18;;;;:::i;:::-;30358:46;;30372:8;;;;;;;;;;;30359:21;;:10;:21;;;;:::i;:::-;30358:46;;;;:::i;:::-;30339:65;;30415:15;30447:8;30434:10;:21;;;;:::i;:::-;30415:40;;30466:17;30494:11;;;;;;;;;;;30486:25;;:35;30512:8;30486:35;;;;;;;;;;;;;;;;;;;;;;;30466:55;;30532:16;30559:10;;;;;;;;;;;30551:24;;:33;30576:7;30551:33;;;;;;;;;;;;;;;;;;;;;;;30532:52;;30602:12;30597:88;;30636:37;30651:11;;;;;;;;;;;30664:8;30636:37;;;;;;;:::i;:::-;;;;;;;;30597:88;30700:11;30695:85;;30733:35;30748:10;;;;;;;;;;;30760:7;30733:35;;;;;;;:::i;:::-;;;;;;;;30695:85;30275:512;;;;;968:5:::0;959:6;;:14;;;;;;;;;;;;;;;;;;30229:558::o;15477:92::-;;;;:::o;29370:477::-;29436:21;29474:1;29460:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29436:40;;29505:4;29487;29492:1;29487:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29531:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29521:4;29526:1;29521:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29564:62;29581:4;29596:15;;;;;;;;;;;29614:11;29564:8;:62::i;:::-;29637:15;;;;;;;;;;;:66;;;29718:11;29744:1;29760:4;29787;29825:3;29807:15;:21;;;;:::i;:::-;29637:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29425:422;29370:477;:::o;29855:366::-;29936:62;29953:4;29968:15;;;;;;;;;;;29986:11;29936:8;:62::i;:::-;30009:15;;;;;;;;;;;:31;;;30048:9;30081:4;30101:11;30127:1;30143;30159:7;:5;:7::i;:::-;30199:3;30181:15;:21;;;;:::i;:::-;30009:204;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29855:366;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;485:5;523:6;510:20;501:29;;539:32;565:5;539:32;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:613::-;3702:6;3710;3718;3767:2;3755:9;3746:7;3742:23;3738:32;3735:119;;;3773:79;;:::i;:::-;3735:119;3893:1;3918:52;3962:7;3953:6;3942:9;3938:22;3918:52;:::i;:::-;3908:62;;3864:116;4019:2;4045:52;4089:7;4080:6;4069:9;4065:22;4045:52;:::i;:::-;4035:62;;3990:117;4146:2;4172:52;4216:7;4207:6;4196:9;4192:22;4172:52;:::i;:::-;4162:62;;4117:117;3628:613;;;;;:::o;4247:329::-;4306:6;4355:2;4343:9;4334:7;4330:23;4326:32;4323:119;;;4361:79;;:::i;:::-;4323:119;4481:1;4506:53;4551:7;4542:6;4531:9;4527:22;4506:53;:::i;:::-;4496:63;;4452:117;4247:329;;;;:::o;4582:663::-;4670:6;4678;4686;4735:2;4723:9;4714:7;4710:23;4706:32;4703:119;;;4741:79;;:::i;:::-;4703:119;4861:1;4886:64;4942:7;4933:6;4922:9;4918:22;4886:64;:::i;:::-;4876:74;;4832:128;4999:2;5025:64;5081:7;5072:6;5061:9;5057:22;5025:64;:::i;:::-;5015:74;;4970:129;5138:2;5164:64;5220:7;5211:6;5200:9;5196:22;5164:64;:::i;:::-;5154:74;;5109:129;4582:663;;;;;:::o;5251:179::-;5320:10;5341:46;5383:3;5375:6;5341:46;:::i;:::-;5419:4;5414:3;5410:14;5396:28;;5251:179;;;;:::o;5436:108::-;5513:24;5531:5;5513:24;:::i;:::-;5508:3;5501:37;5436:108;;:::o;5550:118::-;5637:24;5655:5;5637:24;:::i;:::-;5632:3;5625:37;5550:118;;:::o;5704:732::-;5823:3;5852:54;5900:5;5852:54;:::i;:::-;5922:86;6001:6;5996:3;5922:86;:::i;:::-;5915:93;;6032:56;6082:5;6032:56;:::i;:::-;6111:7;6142:1;6127:284;6152:6;6149:1;6146:13;6127:284;;;6228:6;6222:13;6255:63;6314:3;6299:13;6255:63;:::i;:::-;6248:70;;6341:60;6394:6;6341:60;:::i;:::-;6331:70;;6187:224;6174:1;6171;6167:9;6162:14;;6127:284;;;6131:14;6427:3;6420:10;;5828:608;;;5704:732;;;;:::o;6442:109::-;6523:21;6538:5;6523:21;:::i;:::-;6518:3;6511:34;6442:109;;:::o;6557:185::-;6671:64;6729:5;6671:64;:::i;:::-;6666:3;6659:77;6557:185;;:::o;6748:147::-;6843:45;6882:5;6843:45;:::i;:::-;6838:3;6831:58;6748:147;;:::o;6901:364::-;6989:3;7017:39;7050:5;7017:39;:::i;:::-;7072:71;7136:6;7131:3;7072:71;:::i;:::-;7065:78;;7152:52;7197:6;7192:3;7185:4;7178:5;7174:16;7152:52;:::i;:::-;7229:29;7251:6;7229:29;:::i;:::-;7224:3;7220:39;7213:46;;6993:272;6901:364;;;;:::o;7271:366::-;7413:3;7434:67;7498:2;7493:3;7434:67;:::i;:::-;7427:74;;7510:93;7599:3;7510:93;:::i;:::-;7628:2;7623:3;7619:12;7612:19;;7271:366;;;:::o;7643:::-;7785:3;7806:67;7870:2;7865:3;7806:67;:::i;:::-;7799:74;;7882:93;7971:3;7882:93;:::i;:::-;8000:2;7995:3;7991:12;7984:19;;7643:366;;;:::o;8015:::-;8157:3;8178:67;8242:2;8237:3;8178:67;:::i;:::-;8171:74;;8254:93;8343:3;8254:93;:::i;:::-;8372:2;8367:3;8363:12;8356:19;;8015:366;;;:::o;8387:::-;8529:3;8550:67;8614:2;8609:3;8550:67;:::i;:::-;8543:74;;8626:93;8715:3;8626:93;:::i;:::-;8744:2;8739:3;8735:12;8728:19;;8387:366;;;:::o;8759:::-;8901:3;8922:67;8986:2;8981:3;8922:67;:::i;:::-;8915:74;;8998:93;9087:3;8998:93;:::i;:::-;9116:2;9111:3;9107:12;9100:19;;8759:366;;;:::o;9131:::-;9273:3;9294:67;9358:2;9353:3;9294:67;:::i;:::-;9287:74;;9370:93;9459:3;9370:93;:::i;:::-;9488:2;9483:3;9479:12;9472:19;;9131:366;;;:::o;9503:::-;9645:3;9666:67;9730:2;9725:3;9666:67;:::i;:::-;9659:74;;9742:93;9831:3;9742:93;:::i;:::-;9860:2;9855:3;9851:12;9844:19;;9503:366;;;:::o;9875:::-;10017:3;10038:67;10102:2;10097:3;10038:67;:::i;:::-;10031:74;;10114:93;10203:3;10114:93;:::i;:::-;10232:2;10227:3;10223:12;10216:19;;9875:366;;;:::o;10247:::-;10389:3;10410:67;10474:2;10469:3;10410:67;:::i;:::-;10403:74;;10486:93;10575:3;10486:93;:::i;:::-;10604:2;10599:3;10595:12;10588:19;;10247:366;;;:::o;10619:::-;10761:3;10782:67;10846:2;10841:3;10782:67;:::i;:::-;10775:74;;10858:93;10947:3;10858:93;:::i;:::-;10976:2;10971:3;10967:12;10960:19;;10619:366;;;:::o;10991:::-;11133:3;11154:67;11218:2;11213:3;11154:67;:::i;:::-;11147:74;;11230:93;11319:3;11230:93;:::i;:::-;11348:2;11343:3;11339:12;11332:19;;10991:366;;;:::o;11363:::-;11505:3;11526:67;11590:2;11585:3;11526:67;:::i;:::-;11519:74;;11602:93;11691:3;11602:93;:::i;:::-;11720:2;11715:3;11711:12;11704:19;;11363:366;;;:::o;11735:::-;11877:3;11898:67;11962:2;11957:3;11898:67;:::i;:::-;11891:74;;11974:93;12063:3;11974:93;:::i;:::-;12092:2;12087:3;12083:12;12076:19;;11735:366;;;:::o;12107:::-;12249:3;12270:67;12334:2;12329:3;12270:67;:::i;:::-;12263:74;;12346:93;12435:3;12346:93;:::i;:::-;12464:2;12459:3;12455:12;12448:19;;12107:366;;;:::o;12479:::-;12621:3;12642:67;12706:2;12701:3;12642:67;:::i;:::-;12635:74;;12718:93;12807:3;12718:93;:::i;:::-;12836:2;12831:3;12827:12;12820:19;;12479:366;;;:::o;12851:::-;12993:3;13014:67;13078:2;13073:3;13014:67;:::i;:::-;13007:74;;13090:93;13179:3;13090:93;:::i;:::-;13208:2;13203:3;13199:12;13192:19;;12851:366;;;:::o;13223:::-;13365:3;13386:67;13450:2;13445:3;13386:67;:::i;:::-;13379:74;;13462:93;13551:3;13462:93;:::i;:::-;13580:2;13575:3;13571:12;13564:19;;13223:366;;;:::o;13595:::-;13737:3;13758:67;13822:2;13817:3;13758:67;:::i;:::-;13751:74;;13834:93;13923:3;13834:93;:::i;:::-;13952:2;13947:3;13943:12;13936:19;;13595:366;;;:::o;13967:::-;14109:3;14130:67;14194:2;14189:3;14130:67;:::i;:::-;14123:74;;14206:93;14295:3;14206:93;:::i;:::-;14324:2;14319:3;14315:12;14308:19;;13967:366;;;:::o;14339:365::-;14481:3;14502:66;14566:1;14561:3;14502:66;:::i;:::-;14495:73;;14577:93;14666:3;14577:93;:::i;:::-;14695:2;14690:3;14686:12;14679:19;;14339:365;;;:::o;14710:366::-;14852:3;14873:67;14937:2;14932:3;14873:67;:::i;:::-;14866:74;;14949:93;15038:3;14949:93;:::i;:::-;15067:2;15062:3;15058:12;15051:19;;14710:366;;;:::o;15082:115::-;15167:23;15184:5;15167:23;:::i;:::-;15162:3;15155:36;15082:115;;:::o;15203:118::-;15290:24;15308:5;15290:24;:::i;:::-;15285:3;15278:37;15203:118;;:::o;15327:112::-;15410:22;15426:5;15410:22;:::i;:::-;15405:3;15398:35;15327:112;;:::o;15445:222::-;15538:4;15576:2;15565:9;15561:18;15553:26;;15589:71;15657:1;15646:9;15642:17;15633:6;15589:71;:::i;:::-;15445:222;;;;:::o;15673:332::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15845:71;15913:1;15902:9;15898:17;15889:6;15845:71;:::i;:::-;15926:72;15994:2;15983:9;15979:18;15970:6;15926:72;:::i;:::-;15673:332;;;;;:::o;16011:::-;16132:4;16170:2;16159:9;16155:18;16147:26;;16183:71;16251:1;16240:9;16236:17;16227:6;16183:71;:::i;:::-;16264:72;16332:2;16321:9;16317:18;16308:6;16264:72;:::i;:::-;16011:332;;;;;:::o;16349:807::-;16598:4;16636:3;16625:9;16621:19;16613:27;;16650:71;16718:1;16707:9;16703:17;16694:6;16650:71;:::i;:::-;16731:72;16799:2;16788:9;16784:18;16775:6;16731:72;:::i;:::-;16813:80;16889:2;16878:9;16874:18;16865:6;16813:80;:::i;:::-;16903;16979:2;16968:9;16964:18;16955:6;16903:80;:::i;:::-;16993:73;17061:3;17050:9;17046:19;17037:6;16993:73;:::i;:::-;17076;17144:3;17133:9;17129:19;17120:6;17076:73;:::i;:::-;16349:807;;;;;;;;;:::o;17162:210::-;17249:4;17287:2;17276:9;17272:18;17264:26;;17300:65;17362:1;17351:9;17347:17;17338:6;17300:65;:::i;:::-;17162:210;;;;:::o;17378:276::-;17498:4;17536:2;17525:9;17521:18;17513:26;;17549:98;17644:1;17633:9;17629:17;17620:6;17549:98;:::i;:::-;17378:276;;;;:::o;17660:313::-;17773:4;17811:2;17800:9;17796:18;17788:26;;17860:9;17854:4;17850:20;17846:1;17835:9;17831:17;17824:47;17888:78;17961:4;17952:6;17888:78;:::i;:::-;17880:86;;17660:313;;;;:::o;17979:419::-;18145:4;18183:2;18172:9;18168:18;18160:26;;18232:9;18226:4;18222:20;18218:1;18207:9;18203:17;18196:47;18260:131;18386:4;18260:131;:::i;:::-;18252:139;;17979:419;;;:::o;18404:::-;18570:4;18608:2;18597:9;18593:18;18585:26;;18657:9;18651:4;18647:20;18643:1;18632:9;18628:17;18621:47;18685:131;18811:4;18685:131;:::i;:::-;18677:139;;18404:419;;;:::o;18829:::-;18995:4;19033:2;19022:9;19018:18;19010:26;;19082:9;19076:4;19072:20;19068:1;19057:9;19053:17;19046:47;19110:131;19236:4;19110:131;:::i;:::-;19102:139;;18829:419;;;:::o;19254:::-;19420:4;19458:2;19447:9;19443:18;19435:26;;19507:9;19501:4;19497:20;19493:1;19482:9;19478:17;19471:47;19535:131;19661:4;19535:131;:::i;:::-;19527:139;;19254:419;;;:::o;19679:::-;19845:4;19883:2;19872:9;19868:18;19860:26;;19932:9;19926:4;19922:20;19918:1;19907:9;19903:17;19896:47;19960:131;20086:4;19960:131;:::i;:::-;19952:139;;19679:419;;;:::o;20104:::-;20270:4;20308:2;20297:9;20293:18;20285:26;;20357:9;20351:4;20347:20;20343:1;20332:9;20328:17;20321:47;20385:131;20511:4;20385:131;:::i;:::-;20377:139;;20104:419;;;:::o;20529:::-;20695:4;20733:2;20722:9;20718:18;20710:26;;20782:9;20776:4;20772:20;20768:1;20757:9;20753:17;20746:47;20810:131;20936:4;20810:131;:::i;:::-;20802:139;;20529:419;;;:::o;20954:::-;21120:4;21158:2;21147:9;21143:18;21135:26;;21207:9;21201:4;21197:20;21193:1;21182:9;21178:17;21171:47;21235:131;21361:4;21235:131;:::i;:::-;21227:139;;20954:419;;;:::o;21379:::-;21545:4;21583:2;21572:9;21568:18;21560:26;;21632:9;21626:4;21622:20;21618:1;21607:9;21603:17;21596:47;21660:131;21786:4;21660:131;:::i;:::-;21652:139;;21379:419;;;:::o;21804:::-;21970:4;22008:2;21997:9;21993:18;21985:26;;22057:9;22051:4;22047:20;22043:1;22032:9;22028:17;22021:47;22085:131;22211:4;22085:131;:::i;:::-;22077:139;;21804:419;;;:::o;22229:::-;22395:4;22433:2;22422:9;22418:18;22410:26;;22482:9;22476:4;22472:20;22468:1;22457:9;22453:17;22446:47;22510:131;22636:4;22510:131;:::i;:::-;22502:139;;22229:419;;;:::o;22654:::-;22820:4;22858:2;22847:9;22843:18;22835:26;;22907:9;22901:4;22897:20;22893:1;22882:9;22878:17;22871:47;22935:131;23061:4;22935:131;:::i;:::-;22927:139;;22654:419;;;:::o;23079:::-;23245:4;23283:2;23272:9;23268:18;23260:26;;23332:9;23326:4;23322:20;23318:1;23307:9;23303:17;23296:47;23360:131;23486:4;23360:131;:::i;:::-;23352:139;;23079:419;;;:::o;23504:::-;23670:4;23708:2;23697:9;23693:18;23685:26;;23757:9;23751:4;23747:20;23743:1;23732:9;23728:17;23721:47;23785:131;23911:4;23785:131;:::i;:::-;23777:139;;23504:419;;;:::o;23929:::-;24095:4;24133:2;24122:9;24118:18;24110:26;;24182:9;24176:4;24172:20;24168:1;24157:9;24153:17;24146:47;24210:131;24336:4;24210:131;:::i;:::-;24202:139;;23929:419;;;:::o;24354:::-;24520:4;24558:2;24547:9;24543:18;24535:26;;24607:9;24601:4;24597:20;24593:1;24582:9;24578:17;24571:47;24635:131;24761:4;24635:131;:::i;:::-;24627:139;;24354:419;;;:::o;24779:::-;24945:4;24983:2;24972:9;24968:18;24960:26;;25032:9;25026:4;25022:20;25018:1;25007:9;25003:17;24996:47;25060:131;25186:4;25060:131;:::i;:::-;25052:139;;24779:419;;;:::o;25204:::-;25370:4;25408:2;25397:9;25393:18;25385:26;;25457:9;25451:4;25447:20;25443:1;25432:9;25428:17;25421:47;25485:131;25611:4;25485:131;:::i;:::-;25477:139;;25204:419;;;:::o;25629:::-;25795:4;25833:2;25822:9;25818:18;25810:26;;25882:9;25876:4;25872:20;25868:1;25857:9;25853:17;25846:47;25910:131;26036:4;25910:131;:::i;:::-;25902:139;;25629:419;;;:::o;26054:::-;26220:4;26258:2;26247:9;26243:18;26235:26;;26307:9;26301:4;26297:20;26293:1;26282:9;26278:17;26271:47;26335:131;26461:4;26335:131;:::i;:::-;26327:139;;26054:419;;;:::o;26479:::-;26645:4;26683:2;26672:9;26668:18;26660:26;;26732:9;26726:4;26722:20;26718:1;26707:9;26703:17;26696:47;26760:131;26886:4;26760:131;:::i;:::-;26752:139;;26479:419;;;:::o;26904:218::-;26995:4;27033:2;27022:9;27018:18;27010:26;;27046:69;27112:1;27101:9;27097:17;27088:6;27046:69;:::i;:::-;26904:218;;;;:::o;27128:430::-;27271:4;27309:2;27298:9;27294:18;27286:26;;27322:69;27388:1;27377:9;27373:17;27364:6;27322:69;:::i;:::-;27401:70;27467:2;27456:9;27452:18;27443:6;27401:70;:::i;:::-;27481;27547:2;27536:9;27532:18;27523:6;27481:70;:::i;:::-;27128:430;;;;;;:::o;27564:222::-;27657:4;27695:2;27684:9;27680:18;27672:26;;27708:71;27776:1;27765:9;27761:17;27752:6;27708:71;:::i;:::-;27564:222;;;;:::o;27792:831::-;28055:4;28093:3;28082:9;28078:19;28070:27;;28107:71;28175:1;28164:9;28160:17;28151:6;28107:71;:::i;:::-;28188:80;28264:2;28253:9;28249:18;28240:6;28188:80;:::i;:::-;28315:9;28309:4;28305:20;28300:2;28289:9;28285:18;28278:48;28343:108;28446:4;28437:6;28343:108;:::i;:::-;28335:116;;28461:72;28529:2;28518:9;28514:18;28505:6;28461:72;:::i;:::-;28543:73;28611:3;28600:9;28596:19;28587:6;28543:73;:::i;:::-;27792:831;;;;;;;;:::o;28629:214::-;28718:4;28756:2;28745:9;28741:18;28733:26;;28769:67;28833:1;28822:9;28818:17;28809:6;28769:67;:::i;:::-;28629:214;;;;:::o;28930:132::-;28997:4;29020:3;29012:11;;29050:4;29045:3;29041:14;29033:22;;28930:132;;;:::o;29068:114::-;29135:6;29169:5;29163:12;29153:22;;29068:114;;;:::o;29188:99::-;29240:6;29274:5;29268:12;29258:22;;29188:99;;;:::o;29293:113::-;29363:4;29395;29390:3;29386:14;29378:22;;29293:113;;;:::o;29412:184::-;29511:11;29545:6;29540:3;29533:19;29585:4;29580:3;29576:14;29561:29;;29412:184;;;;:::o;29602:169::-;29686:11;29720:6;29715:3;29708:19;29760:4;29755:3;29751:14;29736:29;;29602:169;;;;:::o;29777:242::-;29816:3;29835:19;29852:1;29835:19;:::i;:::-;29830:24;;29868:19;29885:1;29868:19;:::i;:::-;29863:24;;29961:1;29953:6;29949:14;29946:1;29943:21;29940:47;;;29967:18;;:::i;:::-;29940:47;30011:1;30008;30004:9;29997:16;;29777:242;;;;:::o;30025:305::-;30065:3;30084:20;30102:1;30084:20;:::i;:::-;30079:25;;30118:20;30136:1;30118:20;:::i;:::-;30113:25;;30272:1;30204:66;30200:74;30197:1;30194:81;30191:107;;;30278:18;;:::i;:::-;30191:107;30322:1;30319;30315:9;30308:16;;30025:305;;;;:::o;30336:185::-;30376:1;30393:20;30411:1;30393:20;:::i;:::-;30388:25;;30427:20;30445:1;30427:20;:::i;:::-;30422:25;;30466:1;30456:35;;30471:18;;:::i;:::-;30456:35;30513:1;30510;30506:9;30501:14;;30336:185;;;;:::o;30527:348::-;30567:7;30590:20;30608:1;30590:20;:::i;:::-;30585:25;;30624:20;30642:1;30624:20;:::i;:::-;30619:25;;30812:1;30744:66;30740:74;30737:1;30734:81;30729:1;30722:9;30715:17;30711:105;30708:131;;;30819:18;;:::i;:::-;30708:131;30867:1;30864;30860:9;30849:20;;30527:348;;;;:::o;30881:191::-;30921:4;30941:20;30959:1;30941:20;:::i;:::-;30936:25;;30975:20;30993:1;30975:20;:::i;:::-;30970:25;;31014:1;31011;31008:8;31005:34;;;31019:18;;:::i;:::-;31005:34;31064:1;31061;31057:9;31049:17;;30881:191;;;;:::o;31078:96::-;31115:7;31144:24;31162:5;31144:24;:::i;:::-;31133:35;;31078:96;;;:::o;31180:90::-;31214:7;31257:5;31250:13;31243:21;31232:32;;31180:90;;;:::o;31276:89::-;31312:7;31352:6;31345:5;31341:18;31330:29;;31276:89;;;:::o;31371:126::-;31408:7;31448:42;31441:5;31437:54;31426:65;;31371:126;;;:::o;31503:77::-;31540:7;31569:5;31558:16;;31503:77;;;:::o;31586:86::-;31621:7;31661:4;31654:5;31650:16;31639:27;;31586:86;;;:::o;31678:153::-;31755:9;31788:37;31819:5;31788:37;:::i;:::-;31775:50;;31678:153;;;:::o;31837:121::-;31895:9;31928:24;31946:5;31928:24;:::i;:::-;31915:37;;31837:121;;;:::o;31964:126::-;32014:9;32047:37;32078:5;32047:37;:::i;:::-;32034:50;;31964:126;;;:::o;32096:113::-;32146:9;32179:24;32197:5;32179:24;:::i;:::-;32166:37;;32096:113;;;:::o;32215:307::-;32283:1;32293:113;32307:6;32304:1;32301:13;32293:113;;;32392:1;32387:3;32383:11;32377:18;32373:1;32368:3;32364:11;32357:39;32329:2;32326:1;32322:10;32317:15;;32293:113;;;32424:6;32421:1;32418:13;32415:101;;;32504:1;32495:6;32490:3;32486:16;32479:27;32415:101;32264:258;32215:307;;;:::o;32528:320::-;32572:6;32609:1;32603:4;32599:12;32589:22;;32656:1;32650:4;32646:12;32677:18;32667:81;;32733:4;32725:6;32721:17;32711:27;;32667:81;32795:2;32787:6;32784:14;32764:18;32761:38;32758:84;;;32814:18;;:::i;:::-;32758:84;32579:269;32528:320;;;:::o;32854:180::-;32902:77;32899:1;32892:88;32999:4;32996:1;32989:15;33023:4;33020:1;33013:15;33040:180;33088:77;33085:1;33078:88;33185:4;33182:1;33175:15;33209:4;33206:1;33199:15;33226:180;33274:77;33271:1;33264:88;33371:4;33368:1;33361:15;33395:4;33392:1;33385:15;33412:180;33460:77;33457:1;33450:88;33557:4;33554:1;33547:15;33581:4;33578:1;33571:15;33598:180;33646:77;33643:1;33636:88;33743:4;33740:1;33733:15;33767:4;33764:1;33757:15;33907:117;34016:1;34013;34006:12;34030:102;34071:6;34122:2;34118:7;34113:2;34106:5;34102:14;34098:28;34088:38;;34030:102;;;:::o;34138:222::-;34278:34;34274:1;34266:6;34262:14;34255:58;34347:5;34342:2;34334:6;34330:15;34323:30;34138:222;:::o;34366:221::-;34506:34;34502:1;34494:6;34490:14;34483:58;34575:4;34570:2;34562:6;34558:15;34551:29;34366:221;:::o;34593:174::-;34733:26;34729:1;34721:6;34717:14;34710:50;34593:174;:::o;34773:228::-;34913:34;34909:1;34901:6;34897:14;34890:58;34982:11;34977:2;34969:6;34965:15;34958:36;34773:228;:::o;35007:236::-;35147:34;35143:1;35135:6;35131:14;35124:58;35216:19;35211:2;35203:6;35199:15;35192:44;35007:236;:::o;35249:225::-;35389:34;35385:1;35377:6;35373:14;35366:58;35458:8;35453:2;35445:6;35441:15;35434:33;35249:225;:::o;35480:221::-;35620:34;35616:1;35608:6;35604:14;35597:58;35689:4;35684:2;35676:6;35672:15;35665:29;35480:221;:::o;35707:225::-;35847:34;35843:1;35835:6;35831:14;35824:58;35916:8;35911:2;35903:6;35899:15;35892:33;35707:225;:::o;35938:169::-;36078:21;36074:1;36066:6;36062:14;36055:45;35938:169;:::o;36113:233::-;36253:34;36249:1;36241:6;36237:14;36230:58;36322:16;36317:2;36309:6;36305:15;36298:41;36113:233;:::o;36352:227::-;36492:34;36488:1;36480:6;36476:14;36469:58;36561:10;36556:2;36548:6;36544:15;36537:35;36352:227;:::o;36585:182::-;36725:34;36721:1;36713:6;36709:14;36702:58;36585:182;:::o;36773:220::-;36913:34;36909:1;36901:6;36897:14;36890:58;36982:3;36977:2;36969:6;36965:15;36958:28;36773:220;:::o;36999:182::-;37139:34;37135:1;37127:6;37123:14;37116:58;36999:182;:::o;37187:164::-;37327:16;37323:1;37315:6;37311:14;37304:40;37187:164;:::o;37357:224::-;37497:34;37493:1;37485:6;37481:14;37474:58;37566:7;37561:2;37553:6;37549:15;37542:32;37357:224;:::o;37587:222::-;37727:34;37723:1;37715:6;37711:14;37704:58;37796:5;37791:2;37783:6;37779:15;37772:30;37587:222;:::o;37815:179::-;37955:31;37951:1;37943:6;37939:14;37932:55;37815:179;:::o;38000:223::-;38140:34;38136:1;38128:6;38124:14;38117:58;38209:6;38204:2;38196:6;38192:15;38185:31;38000:223;:::o;38229:158::-;38369:10;38365:1;38357:6;38353:14;38346:34;38229:158;:::o;38393:224::-;38533:34;38529:1;38521:6;38517:14;38510:58;38602:7;38597:2;38589:6;38585:15;38578:32;38393:224;:::o;38623:122::-;38696:24;38714:5;38696:24;:::i;:::-;38689:5;38686:35;38676:63;;38735:1;38732;38725:12;38676:63;38623:122;:::o;38751:116::-;38821:21;38836:5;38821:21;:::i;:::-;38814:5;38811:32;38801:60;;38857:1;38854;38847:12;38801:60;38751:116;:::o;38873:120::-;38945:23;38962:5;38945:23;:::i;:::-;38938:5;38935:34;38925:62;;38983:1;38980;38973:12;38925:62;38873:120;:::o;38999:122::-;39072:24;39090:5;39072:24;:::i;:::-;39065:5;39062:35;39052:63;;39111:1;39108;39101:12;39052:63;38999:122;:::o
Swarm Source
ipfs://22658e99258a004215a9d5d1286f630e9c9f0af565d69c8374698cf8b782d225
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.