Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 BAPE
Holders
92
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
2,342,933,547,557.346913323 BAPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BAPE
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-03 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/BabyApe.sol pragma solidity ^0.8.0; interface IBURNER { function burnEmUp() external payable; } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IUniswapV2Router02 router; IERC20 public RewardToken; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 30 minutes; uint256 public minDistribution = 1 * (10 ** 18); uint256 public currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router, address _reflectionToken, address token) { router = IUniswapV2Router02(_router); RewardToken = IERC20(_reflectionToken); _token = token; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken { minPeriod = newMinPeriod; minDistribution = newMinDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = RewardToken.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(RewardToken); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) public view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); RewardToken.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { require(shouldDistribute(msg.sender), "Too soon. Need to wait!"); distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } contract BAPE is Context, IERC20, IERC20Metadata { using SafeMath for uint256; IDividendDistributor public dividendDistributor; uint256 public distributorGas = 50000; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address public hldAdmin; bool public restrictWhales = true; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isDividendExempt; uint256 public launchedAt; address public lpWallet = DEAD; uint256 public reflectionFee; uint256 public lpFee; uint256 public devFee; uint256 public reflectionFeeOnSell; uint256 public lpFeeOnSell; uint256 public devFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address public factory; address public tokenOwner; address payable public devWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = true; mapping (address => bool) private bots; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; bool public tradingActive = false; bool private restrictBots = true; uint256 public tradingActiveBlock = 0; event EnabledTrading(bool tradingActive); event TransferForeignToken(address token, uint256 amount); constructor(uint256 initialSupply, address reflectionToken, address routerAddress, address initialHldAdmin) { _name = "Big Ape"; _symbol = "BAPE"; _totalSupply += initialSupply; _balances[msg.sender] += initialSupply; _maxTxAmount = initialSupply * 2 / 400; _walletMax = initialSupply * 4 / 200; swapThreshold = initialSupply * 5 / 4000; router = IUniswapV2Router02(routerAddress); pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = type(uint256).max; dividendDistributor = new DividendDistributor(routerAddress, reflectionToken, address(this)); factory = msg.sender; isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isTxLimitExempt[msg.sender] = true; isTxLimitExempt[pair] = true; isTxLimitExempt[factory] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[ZERO] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; reflectionFee = 6; lpFee = 0; devFee = 4; reflectionFeeOnSell = 6; lpFeeOnSell = 0; devFeeOnSell = 4; totalFee = devFee.add(lpFee).add(reflectionFee); totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell); tokenOwner = msg.sender; devWallet = payable(msg.sender); hldAdmin = initialHldAdmin; } modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyHldAdmin() { require(hldAdmin == _msgSender(), "Ownable: caller is not the hldAdmin"); _; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } //hldAdmin functions function updateHldAdmin(address newAdmin) public virtual onlyHldAdmin { hldAdmin = newAdmin; } function setBots(address[] memory bots_) external onlyHldAdmin { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } //Owner functions function changeFees(uint256 initialReflectionFee, uint256 initialReflectionFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell) external onlyOwner { reflectionFee = initialReflectionFee; lpFee = initialLpFee; devFee = initialDevFee; reflectionFeeOnSell = initialReflectionFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; totalFee = devFee.add(lpFee).add(reflectionFee); totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell); require(totalFee <= 15, "Too high fee"); require(totalFeeIfSelling <= 30, "Too high fee"); } function removeHldAdmin() public virtual onlyOwner { hldAdmin = address(0); } function changeTxLimit(uint256 newLimit) external onlyOwner { _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } function multiTransfer(address[] calldata addresses, uint256 tokens) external onlyOwner { require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); uint256 SCCC = tokens* 10**decimals() * addresses.length; require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _transfer(msg.sender,addresses[i],(tokens* 10**decimals())); } } function changeRestrictWhales(bool newValue) external onlyOwner { restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } function enableTrading(bool _status) external onlyOwner { require(!tradingActive, "Cannot re enable trading"); tradingActive = _status; emit EnabledTrading(tradingActive); if (tradingActive && tradingActiveBlock == 0) { tradingActiveBlock = block.number; } } function updateRestrictBots(bool _status) external onlyOwner { restrictBots = _status; } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setLpWallet(address newLpWallet) external onlyOwner { lpWallet = newLpWallet; } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner { dividendDistributor.setDistributionCriteria(newMinPeriod, newMinDistribution); } function delBot(address notbot) external onlyOwner { bots[notbot] = false; } function changeDistributorGas(uint256 _distributorGas) external onlyOwner { distributorGas = _distributorGas; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } /** * @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 9; } /** * @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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @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) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][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) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) { require(!bots[sender] && !bots[recipient]); if(!tradingActive){ require(sender == hldAdmin, "Trading is enabled"); } if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } if(restrictBots && tradingActiveBlock>0 && (tradingActiveBlock + 0) > block.number){ } else{ require(amount <= _maxTxAmount || isTxLimitExempt[sender], "tx"); if(!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient].add(amount) <= _walletMax, "wallet"); } } if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); // Dividend tracker if(!isDividendExempt[sender]) { try dividendDistributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} } if (distributorGas > 0) { try dividendDistributor.process(distributorGas) {} catch {} } emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } /** @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: * * - `account` cannot be the zero address. */ /** * @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 Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; //restrictbots if(restrictBots && tradingActiveBlock>0 && (tradingActiveBlock + 3) > block.number){ feeApplicable=90; } uint256 feeAmount = amount.mul(feeApplicable).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify; uint256 devBalance; uint256 amountEthLiquidity; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountToLiquify = tokensToLiquify.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2); } else { amountToLiquify = tokensToLiquify.mul(lpFee).div(totalFee).div(2); } uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { devBalance = amountETH.mul(devFeeOnSell).div(totalFeeIfSelling); amountEthLiquidity = amountETH.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2); } else { devBalance = amountETH.mul(devFee).div(totalFee); amountEthLiquidity = amountETH.mul(lpFee).div(totalFee).div(2); } uint256 amountEthReflection = amountETH.sub(devBalance).sub(amountEthLiquidity); if(amountETH > 0){ devWallet.transfer(devBalance); } try dividendDistributor.deposit{value: amountEthReflection}() {} catch {} if(amountToLiquify > 0){ router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, lpWallet, block.timestamp ); } } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require(_token != address(this), "Can't withdraw native tokens"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck or someone sends to the address function withdrawStuckETH() external onlyOwner { bool success; (success,) = address(msg.sender).call{value: address(this).balance}(""); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialHldAdmin","type":"address"}],"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":false,"internalType":"bool","name":"tradingActive","type":"bool"}],"name":"EnabledTrading","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"changeDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialReflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldAdmin","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":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLpWallet","type":"address"}],"name":"setLpWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"updateHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateRestrictBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261c35060015561dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff021916908315150217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60156101000a81548160ff0219169083151502179055506001601b60166101000a81548160ff0219169083151502179055506000602060006101000a81548160ff0219169083151502179055506001602060016101000a81548160ff02191690831515021790555060006021553480156200018b57600080fd5b50604051620089fa380380620089fa8339818101604052810190620001b1919062000ed3565b6040518060400160405280600781526020017f426967204170650000000000000000000000000000000000000000000000000081525060059080519060200190620001fe92919062000d70565b506040518060400160405280600481526020017f4241504500000000000000000000000000000000000000000000000000000000815250600690805190602001906200024c92919062000d70565b50836004600082825462000261919062000f74565b9250508190555083600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b9919062000f74565b92505081905550610190600285620002d2919062000fd1565b620002de919062001061565b601d8190555060c8600485620002f5919062000fd1565b62000301919062001061565b601e81905550610fa060058562000319919062000fd1565b62000325919062001061565b601f8190555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d557600080fd5b505afa158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062001099565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049457600080fd5b505afa158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062001099565b306040518363ffffffff1660e01b8152600401620004ef929190620010dc565b602060405180830381600087803b1580156200050a57600080fd5b505af11580156200051f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000545919062001099565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818330604051620006599062000e01565b620006679392919062001109565b604051809103906000f08015801562000684573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006600f819055506000601081905550600460118190555060066012819055506000601381905550600460148190555062000c46600f5462000c3260105460115462000d5860201b62002bb11790919060201c565b62000d5860201b62002bb11790919060201c565b60158190555062000c8560125462000c7160135460145462000d5860201b62002bb11790919060201c565b62000d5860201b62002bb11790919060201c565b60168190555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620011ab565b6000818362000d68919062000f74565b905092915050565b82805462000d7e9062001175565b90600052602060002090601f01602090048101928262000da2576000855562000dee565b82601f1062000dbd57805160ff191683800117855562000dee565b8280016001018555821562000dee579182015b8281111562000ded57825182559160200191906001019062000dd0565b5b50905062000dfd919062000e0f565b5090565b611ee08062006b1a83390190565b5b8082111562000e2a57600081600090555060010162000e10565b5090565b600080fd5b6000819050919050565b62000e488162000e33565b811462000e5457600080fd5b50565b60008151905062000e688162000e3d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e9b8262000e6e565b9050919050565b62000ead8162000e8e565b811462000eb957600080fd5b50565b60008151905062000ecd8162000ea2565b92915050565b6000806000806080858703121562000ef05762000eef62000e2e565b5b600062000f008782880162000e57565b945050602062000f138782880162000ebc565b935050604062000f268782880162000ebc565b925050606062000f398782880162000ebc565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f818262000e33565b915062000f8e8362000e33565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fc65762000fc562000f45565b5b828201905092915050565b600062000fde8262000e33565b915062000feb8362000e33565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001027576200102662000f45565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200106e8262000e33565b91506200107b8362000e33565b9250826200108e576200108d62001032565b5b828204905092915050565b600060208284031215620010b257620010b162000e2e565b5b6000620010c28482850162000ebc565b91505092915050565b620010d68162000e8e565b82525050565b6000604082019050620010f36000830185620010cb565b620011026020830184620010cb565b9392505050565b6000606082019050620011206000830186620010cb565b6200112f6020830185620010cb565b6200113e6040830184620010cb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200118e57607f821691505b60208210811415620011a557620011a462001146565b5b50919050565b61595f80620011bb6000396000f3fe6080604052600436106103b15760003560e01c80638366e79a116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f275f64b1161006f578063f275f64b14610e0d578063f5648a4f14610e36578063f887ea4014610e4d578063fabe628314610e78576103b8565b8063dd62ed3e14610d51578063e66b1d1e14610d8e578063ede1588f14610db7578063ee40166e14610de2576103b8565b8063cb29813c116100dc578063cb29813c14610ca9578063cc6badb314610cd2578063d4fb9a0114610cfd578063d920334e14610d28576103b8565b8063bbc0c74214610bfd578063bf56b37114610c28578063c45a015514610c53578063ca987b0e14610c7e576103b8565b8063a3a2e89e11610185578063a9059cbb11610154578063a9059cbb14610b43578063b515566a14610b80578063bad3ea6a14610ba9578063bb542ef014610bd4576103b8565b8063a3a2e89e14610a87578063a3e6761014610ab0578063a457c2d714610adb578063a8aa1b3114610b18576103b8565b80638ea5220f116101c15780638ea5220f146109dd5780639502c42614610a0857806395d89b4114610a33578063a16a317914610a5e576103b8565b80638366e79a1461093857806383ad7994146109755780638b42507f146109a0576103b8565b80633f4218e0116102d757806366b5d8821161026a5780637c0ff205116102395780637c0ff2051461088e5780637d1db4a5146108b95780637db1342c146108e4578063807c2d9c1461090d576103b8565b806366b5d882146107e45780636827e764146107fb578063704ce43e1461082657806370a0823114610851576103b8565b8063468c7ee2116102a6578063468c7ee21461073a5780634a74bb021461076357806360e719621461078e5780636303516c146107b9576103b8565b80633f4218e01461066c5780634355855a146106a957806343d49dda146106e657806344de2e4c1461070f576103b8565b806323b872dd1161034f5780632d48e8961161031e5780632d48e896146105b2578063313ce567146105db57806339509351146106065780633dab526914610643576103b8565b806323b872dd146104f8578063259aa50414610535578063273123b71461055e5780632b112e4914610587576103b8565b806316d9962b1161038b57806316d9962b1461045057806318160ddd146104795780631df4ccfc146104a45780631f53ac02146104cf576103b8565b80630445b667146103bd57806306fdde03146103e8578063095ea7b314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ea1565b6040516103df9190614273565b60405180910390f35b3480156103f457600080fd5b506103fd610ea7565b60405161040a9190614327565b60405180910390f35b34801561041f57600080fd5b5061043a600480360381019061043591906143e7565b610f39565b6040516104479190614442565b60405180910390f35b34801561045c57600080fd5b506104776004803603810190610472919061445d565b610f5c565b005b34801561048557600080fd5b5061048e610ffd565b60405161049b9190614273565b60405180910390f35b3480156104b057600080fd5b506104b9611007565b6040516104c69190614273565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906144c8565b61100d565b005b34801561050457600080fd5b5061051f600480360381019061051a91906144f5565b6110e8565b60405161052c9190614442565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614574565b611118565b005b34801561056a57600080fd5b50610585600480360381019061058091906145a1565b6111cc565b005b34801561059357600080fd5b5061059c6112be565b6040516105a99190614273565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d491906145ce565b611340565b005b3480156105e757600080fd5b506105f0611468565b6040516105fd919061462a565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906143e7565b611471565b60405161063a9190614442565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614645565b61151b565b005b34801561067857600080fd5b50610693600480360381019061068e91906145a1565b6115d7565b6040516106a09190614442565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb91906145a1565b6115f7565b6040516106dd9190614442565b60405180910390f35b3480156106f257600080fd5b5061070d600480360381019061070891906145a1565b611617565b005b34801561071b57600080fd5b506107246116f2565b6040516107319190614442565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906145a1565b611705565b005b34801561076f57600080fd5b506107786117e0565b6040516107859190614442565b60405180910390f35b34801561079a57600080fd5b506107a36117f3565b6040516107b09190614273565b60405180910390f35b3480156107c557600080fd5b506107ce6117f9565b6040516107db9190614694565b60405180910390f35b3480156107f057600080fd5b506107f961181f565b005b34801561080757600080fd5b506108106118fa565b60405161081d9190614273565b60405180910390f35b34801561083257600080fd5b5061083b611900565b6040516108489190614273565b60405180910390f35b34801561085d57600080fd5b50610878600480360381019061087391906145a1565b611906565b6040516108859190614273565b60405180910390f35b34801561089a57600080fd5b506108a361194f565b6040516108b09190614273565b60405180910390f35b3480156108c557600080fd5b506108ce611955565b6040516108db9190614273565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061445d565b61195b565b005b34801561091957600080fd5b506109226119fc565b60405161092f9190614273565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906146af565b611a02565b60405161096c9190614442565b60405180910390f35b34801561098157600080fd5b5061098a611cd6565b6040516109979190614273565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c291906145a1565b611cdc565b6040516109d49190614442565b60405180910390f35b3480156109e957600080fd5b506109f2611cfc565b6040516109ff91906146fe565b60405180910390f35b348015610a1457600080fd5b50610a1d611d22565b604051610a2a9190614273565b60405180910390f35b348015610a3f57600080fd5b50610a48611d28565b604051610a559190614327565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a80919061477e565b611dba565b005b348015610a9357600080fd5b50610aae6004803603810190610aa991906147de565b611f8d565b005b348015610abc57600080fd5b50610ac561207f565b604051610ad29190614694565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd91906143e7565b6120a5565b604051610b0f9190614442565b60405180910390f35b348015610b2457600080fd5b50610b2d61218f565b604051610b3a9190614694565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b6591906143e7565b6121b5565b604051610b779190614442565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba2919061495c565b6121d4565b005b348015610bb557600080fd5b50610bbe612300565b604051610bcb9190614a04565b60405180910390f35b348015610be057600080fd5b50610bfb6004803603810190610bf691906144c8565b612324565b005b348015610c0957600080fd5b50610c126123ff565b604051610c1f9190614442565b60405180910390f35b348015610c3457600080fd5b50610c3d612412565b604051610c4a9190614273565b60405180910390f35b348015610c5f57600080fd5b50610c68612418565b604051610c759190614694565b60405180910390f35b348015610c8a57600080fd5b50610c9361243e565b604051610ca09190614273565b60405180910390f35b348015610cb557600080fd5b50610cd06004803603810190610ccb9190614a1f565b612444565b005b348015610cde57600080fd5b50610ce76125fb565b604051610cf49190614273565b60405180910390f35b348015610d0957600080fd5b50610d12612601565b604051610d1f9190614442565b60405180910390f35b348015610d3457600080fd5b50610d4f6004803603810190610d4a919061445d565b612614565b005b348015610d5d57600080fd5b50610d786004803603810190610d7391906146af565b6126b5565b604051610d859190614273565b60405180910390f35b348015610d9a57600080fd5b50610db56004803603810190610db09190614574565b61273c565b005b348015610dc357600080fd5b50610dcc6127f0565b604051610dd99190614694565b60405180910390f35b348015610dee57600080fd5b50610df7612816565b604051610e049190614273565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614574565b61281c565b005b348015610e4257600080fd5b50610e4b612991565b005b348015610e5957600080fd5b50610e62612a99565b604051610e6f9190614acd565b60405180910390f35b348015610e8457600080fd5b50610e9f6004803603810190610e9a91906147de565b612abf565b005b601f5481565b606060058054610eb690614b17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee290614b17565b8015610f2f5780601f10610f0457610100808354040283529160200191610f2f565b820191906000526020600020905b815481529060010190602001808311610f1257829003601f168201915b5050505050905090565b600080610f44612bc7565b9050610f51818585612bcf565b600191505092915050565b610f64612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90614b95565b60405180910390fd5b8060018190555050565b6000600454905090565b60155481565b611015612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614b95565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806110f3612bc7565b9050611100858285612d9a565b61110b858585612e26565b5060019150509392505050565b611120612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614b95565b60405180910390fd5b80602060016101000a81548160ff02191690831515021790555050565b6111d4612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614b95565b60405180910390fd5b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061133b6112ee600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611906565b61132d61131c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611906565b6004546137cb90919063ffffffff16565b6137cb90919063ffffffff16565b905090565b611348612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90614b95565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611432929190614bb5565b600060405180830381600087803b15801561144c57600080fd5b505af1158015611460573d6000803e3d6000fd5b505050505050565b60006009905090565b60008061147c612bc7565b9050611510818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150b9190614c0d565b612bcf565b600191505092915050565b611523612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614b95565b60405180910390fd5b81601b60156101000a81548160ff02191690831515021790555080601f819055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b61161f612bc7565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614cd5565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960149054906101000a900460ff1681565b61170d612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614b95565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60159054906101000a900460ff1681565b60015481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611827612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614b95565b60405180910390fd5b6000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60105481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60135481565b601d5481565b611963612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614b95565b60405180910390fd5b80601e8190555050565b601e5481565b6000611a0c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614d41565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614dad565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bb59190614694565b60206040518083038186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190614de2565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611c42929190614e0f565b602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190614e4d565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611cc7929190614e0f565b60405180910390a15092915050565b600f5481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b606060068054611d3790614b17565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6390614b17565b8015611db05780601f10611d8557610100808354040283529160200191611db0565b820191906000526020600020905b815481529060010190602001808311611d9357829003601f168201915b5050505050905090565b611dc2612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614b95565b60405180910390fd5b6107d18383905010611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614eec565b60405180910390fd5b600083839050611ea6611468565b600a611eb2919061503f565b83611ebd919061508a565b611ec7919061508a565b905080611ed333611906565b1015611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90615130565b60405180910390fd5b60005b84849050811015611f8657611f7233868684818110611f3957611f38615150565b5b9050602002016020810190611f4e91906145a1565b611f56611468565b600a611f62919061503f565b86611f6d919061508a565b612e26565b508080611f7e9061517f565b915050611f17565b5050505050565b611f95612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90614b95565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806120b0612bc7565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d9061523a565b60405180910390fd5b6121838286868403612bcf565b60019250505092915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006121c96121c2612bc7565b8484612e26565b506001905092915050565b6121dc612bc7565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614cd5565b60405180910390fd5b60005b81518110156122fc576001601c60008484815181106122905761228f615150565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122f49061517f565b91505061226e565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61232c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614b95565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602060009054906101000a900460ff1681565b600d5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61244c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290614b95565b60405180910390fd5b85600f819055508360108190555081601181905550846012819055508260138190555080601481905550612530600f54612522601054601154612bb190919063ffffffff16565b612bb190919063ffffffff16565b601581905550612561601254612553601354601454612bb190919063ffffffff16565b612bb190919063ffffffff16565b601681905550600f60155411156125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a4906152a6565b60405180910390fd5b601e60165411156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea906152a6565b60405180910390fd5b505050505050565b60125481565b601b60169054906101000a900460ff1681565b61261c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a290614b95565b60405180910390fd5b80601d8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612744612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614b95565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b612824612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614b95565b60405180910390fd5b602060009054906101000a900460ff1615612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90615312565b60405180910390fd5b80602060006101000a81548160ff0219169083151502179055507fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe52089602060009054906101000a900460ff1660405161295b9190614442565b60405180910390a1602060009054906101000a900460ff16801561298157506000602154145b1561298e57436021819055505b50565b612999612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614b95565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612a4e90615363565b60006040518083038185875af1925050503d8060008114612a8b576040519150601f19603f3d011682016040523d82523d6000602084013e612a90565b606091505b50508091505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ac7612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614b95565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183612bbf9190614c0d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c36906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca69061547c565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d8d9190614273565b60405180910390a3505050565b6000612da684846126b5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612e205781811015612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e09906154e8565b60405180910390fd5b612e1f8484848403612bcf565b5b50505050565b6000601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ecc5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ed557600080fd5b602060009054906101000a900460ff16612f7a57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7090615554565b60405180910390fd5b5b601b60149054906101000a900460ff1615612fa157612f9a8484846137e1565b90506137c4565b602060019054906101000a900460ff168015612fbf57506000602154115b8015612fd85750436000602154612fd69190614c0d565b115b15612fe25761317e565b601d548211158061303c5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61307b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613072906155c0565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130e15750600960149054906101000a900460ff165b1561317d57601e5461313b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b111561317c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131739061562c565b60405180910390fd5b5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131e95750601b60149054906101000a900460ff16155b80156132015750601b60159054906101000a900460ff165b801561324e5750601f54600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561325c5761325b6139b4565b5b6132e5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff09092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133ce5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6133d857826133e4565b6133e3858585614045565b5b905061343881600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359c5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613566929190614e0f565b600060405180830381600087803b15801561358057600080fd5b505af1925050508015613591575060015b61359a5761359b565b5b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136bd5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613687929190614e0f565b600060405180830381600087803b1580156136a157600080fd5b505af19250505080156136b2575060015b6136bb576136bc565b5b5b600060015411156137595760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b81526004016137239190614273565b600060405180830381600087803b15801561373d57600080fd5b505af192505050801561374e575060015b61375757613758565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b69190614273565b60405180910390a360019150505b9392505050565b600081836137d9919061564c565b905092915050565b600061386c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff09092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390182600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139a19190614273565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806000600260155411613a6557613a5e6002613a50601654613a426013548961422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b9250613aa4565b613aa16002613a93601554613a856010548961422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b92505b6000613ab984866137cb90919063ffffffff16565b90506000600267ffffffffffffffff811115613ad857613ad761481e565b5b604051908082528060200260200182016040528015613b065781602001602082028036833780820191505090505b5090503081600081518110613b1e57613b1d615150565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613bc057600080fd5b505afa158015613bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf89190615695565b81600181518110613c0c57613c0b615150565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613caa9594939291906157bb565b600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b505050506000479050600260155411613d5957613d14601654613d066014548461422e90919063ffffffff16565b61424490919063ffffffff16565b9450613d526002613d44601654613d366013548661422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b9350613dc3565b613d82601554613d746011548461422e90919063ffffffff16565b61424490919063ffffffff16565b9450613dc06002613db2601554613da46010548661422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b93505b6000613dea85613ddc88856137cb90919063ffffffff16565b6137cb90919063ffffffff16565b90506000821115613e5f57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015613e5d573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ec757600080fd5b505af193505050508015613ed9575060015b613ee257613ee3565b5b6000871115613fcb57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308a600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613f7596959493929190615815565b6060604051808303818588803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fc79190615876565b5050505b50505050505050506000601b60146101000a81548160ff021916908315150217905550565b6000838311158290614038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402f9190614327565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140a5576015546140a9565b6016545b9050602060019054906101000a900460ff1680156140c957506000602154115b80156140e257504360036021546140e09190614c0d565b115b156140ec57605a90505b60006141146064614106848761422e90919063ffffffff16565b61424490919063ffffffff16565b905061416881600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142089190614273565b60405180910390a361422381856137cb90919063ffffffff16565b925050509392505050565b6000818361423c919061508a565b905092915050565b6000818361425291906158f8565b905092915050565b6000819050919050565b61426d8161425a565b82525050565b60006020820190506142886000830184614264565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142c85780820151818401526020810190506142ad565b838111156142d7576000848401525b50505050565b6000601f19601f8301169050919050565b60006142f98261428e565b6143038185614299565b93506143138185602086016142aa565b61431c816142dd565b840191505092915050565b6000602082019050818103600083015261434181846142ee565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143888261435d565b9050919050565b6143988161437d565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b6143c48161425a565b81146143cf57600080fd5b50565b6000813590506143e1816143bb565b92915050565b600080604083850312156143fe576143fd614353565b5b600061440c858286016143a6565b925050602061441d858286016143d2565b9150509250929050565b60008115159050919050565b61443c81614427565b82525050565b60006020820190506144576000830184614433565b92915050565b60006020828403121561447357614472614353565b5b6000614481848285016143d2565b91505092915050565b60006144958261435d565b9050919050565b6144a58161448a565b81146144b057600080fd5b50565b6000813590506144c28161449c565b92915050565b6000602082840312156144de576144dd614353565b5b60006144ec848285016144b3565b91505092915050565b60008060006060848603121561450e5761450d614353565b5b600061451c868287016143a6565b935050602061452d868287016143a6565b925050604061453e868287016143d2565b9150509250925092565b61455181614427565b811461455c57600080fd5b50565b60008135905061456e81614548565b92915050565b60006020828403121561458a57614589614353565b5b60006145988482850161455f565b91505092915050565b6000602082840312156145b7576145b6614353565b5b60006145c5848285016143a6565b91505092915050565b600080604083850312156145e5576145e4614353565b5b60006145f3858286016143d2565b9250506020614604858286016143d2565b9150509250929050565b600060ff82169050919050565b6146248161460e565b82525050565b600060208201905061463f600083018461461b565b92915050565b6000806040838503121561465c5761465b614353565b5b600061466a8582860161455f565b925050602061467b858286016143d2565b9150509250929050565b61468e8161437d565b82525050565b60006020820190506146a96000830184614685565b92915050565b600080604083850312156146c6576146c5614353565b5b60006146d4858286016143a6565b92505060206146e5858286016143a6565b9150509250929050565b6146f88161448a565b82525050565b600060208201905061471360008301846146ef565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261473e5761473d614719565b5b8235905067ffffffffffffffff81111561475b5761475a61471e565b5b60208301915083602082028301111561477757614776614723565b5b9250929050565b60008060006040848603121561479757614796614353565b5b600084013567ffffffffffffffff8111156147b5576147b4614358565b5b6147c186828701614728565b935093505060206147d4868287016143d2565b9150509250925092565b600080604083850312156147f5576147f4614353565b5b6000614803858286016143a6565b92505060206148148582860161455f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614856826142dd565b810181811067ffffffffffffffff821117156148755761487461481e565b5b80604052505050565b6000614888614349565b9050614894828261484d565b919050565b600067ffffffffffffffff8211156148b4576148b361481e565b5b602082029050602081019050919050565b60006148d86148d384614899565b61487e565b905080838252602082019050602084028301858111156148fb576148fa614723565b5b835b81811015614924578061491088826143a6565b8452602084019350506020810190506148fd565b5050509392505050565b600082601f83011261494357614942614719565b5b81356149538482602086016148c5565b91505092915050565b60006020828403121561497257614971614353565b5b600082013567ffffffffffffffff8111156149905761498f614358565b5b61499c8482850161492e565b91505092915050565b6000819050919050565b60006149ca6149c56149c08461435d565b6149a5565b61435d565b9050919050565b60006149dc826149af565b9050919050565b60006149ee826149d1565b9050919050565b6149fe816149e3565b82525050565b6000602082019050614a1960008301846149f5565b92915050565b60008060008060008060c08789031215614a3c57614a3b614353565b5b6000614a4a89828a016143d2565b9650506020614a5b89828a016143d2565b9550506040614a6c89828a016143d2565b9450506060614a7d89828a016143d2565b9350506080614a8e89828a016143d2565b92505060a0614a9f89828a016143d2565b9150509295509295509295565b6000614ab7826149d1565b9050919050565b614ac781614aac565b82525050565b6000602082019050614ae26000830184614abe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b2f57607f821691505b60208210811415614b4357614b42614ae8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7f602083614299565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b6000604082019050614bca6000830185614264565b614bd76020830184614264565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c188261425a565b9150614c238361425a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c5857614c57614bde565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602383614299565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614d2b601a83614299565b9150614d3682614cf5565b602082019050919050565b60006020820190508181036000830152614d5a81614d1e565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000614d97601c83614299565b9150614da282614d61565b602082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b600081519050614ddc816143bb565b92915050565b600060208284031215614df857614df7614353565b5b6000614e0684828501614dcd565b91505092915050565b6000604082019050614e246000830185614685565b614e316020830184614264565b9392505050565b600081519050614e4781614548565b92915050565b600060208284031215614e6357614e62614353565b5b6000614e7184828501614e38565b91505092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b6000614ed6602e83614299565b9150614ee182614e7a565b604082019050919050565b60006020820190508181036000830152614f0581614ec9565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614f6357808604811115614f3f57614f3e614bde565b5b6001851615614f4e5780820291505b8081029050614f5c85614f0c565b9450614f23565b94509492505050565b600082614f7c5760019050615038565b81614f8a5760009050615038565b8160018114614fa05760028114614faa57614fd9565b6001915050615038565b60ff841115614fbc57614fbb614bde565b5b8360020a915084821115614fd357614fd2614bde565b5b50615038565b5060208310610133831016604e8410600b841016171561500e5782820a90508381111561500957615008614bde565b5b615038565b61501b8484846001614f19565b9250905081840481111561503257615031614bde565b5b81810290505b9392505050565b600061504a8261425a565b91506150558361460e565b92506150827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614f6c565b905092915050565b60006150958261425a565b91506150a08361425a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d9576150d8614bde565b5b828202905092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b600061511a601b83614299565b9150615125826150e4565b602082019050919050565b600060208201905081810360008301526151498161510d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061518a8261425a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151bd576151bc614bde565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615224602583614299565b915061522f826151c8565b604082019050919050565b6000602082019050818103600083015261525381615217565b9050919050565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b6000615290600c83614299565b915061529b8261525a565b602082019050919050565b600060208201905081810360008301526152bf81615283565b9050919050565b7f43616e6e6f7420726520656e61626c652074726164696e670000000000000000600082015250565b60006152fc601883614299565b9150615307826152c6565b602082019050919050565b6000602082019050818103600083015261532b816152ef565b9050919050565b600081905092915050565b50565b600061534d600083615332565b91506153588261533d565b600082019050919050565b600061536e82615340565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153d4602483614299565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615466602283614299565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006154d2601d83614299565b91506154dd8261549c565b602082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b7f54726164696e6720697320656e61626c65640000000000000000000000000000600082015250565b600061553e601283614299565b915061554982615508565b602082019050919050565b6000602082019050818103600083015261556d81615531565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006155aa600283614299565b91506155b582615574565b602082019050919050565b600060208201905081810360008301526155d98161559d565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000615616600683614299565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b60006156578261425a565b91506156628361425a565b92508282101561567557615674614bde565b5b828203905092915050565b60008151905061568f8161438f565b92915050565b6000602082840312156156ab576156aa614353565b5b60006156b984828501615680565b91505092915050565b6000819050919050565b60006156e76156e26156dd846156c2565b6149a5565b61425a565b9050919050565b6156f7816156cc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157328161437d565b82525050565b60006157448383615729565b60208301905092915050565b6000602082019050919050565b6000615768826156fd565b6157728185615708565b935061577d83615719565b8060005b838110156157ae5781516157958882615738565b97506157a083615750565b925050600181019050615781565b5085935050505092915050565b600060a0820190506157d06000830188614264565b6157dd60208301876156ee565b81810360408301526157ef818661575d565b90506157fe6060830185614685565b61580b6080830184614264565b9695505050505050565b600060c08201905061582a6000830189614685565b6158376020830188614264565b61584460408301876156ee565b61585160608301866156ee565b61585e6080830185614685565b61586b60a0830184614264565b979650505050505050565b60008060006060848603121561588f5761588e614353565b5b600061589d86828701614dcd565b93505060206158ae86828701614dcd565b92505060406158bf86828701614dcd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159038261425a565b915061590e8361425a565b92508261591e5761591d6158c9565b5b82820490509291505056fea264697066735822122061511d36be500f427e3660f48c28bdb98c546ca1fe838ad3aec852db82ea625864736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c55670de0b6b3a7640000600d553480156200003657600080fd5b5060405162001ee038038062001ee083398181016040528101906200005c919062000191565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620001ed565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000159826200012c565b9050919050565b6200016b816200014c565b81146200017757600080fd5b50565b6000815190506200018b8162000160565b92915050565b600080600060608486031215620001ad57620001ac62000127565b5b6000620001bd868287016200017a565b9350506020620001d0868287016200017a565b9250506040620001e3868287016200017a565b9150509250925092565b611ce380620001fd6000396000f3fe6080604052600436106100fe5760003560e01c8063997664d711610095578063efca2eed11610064578063efca2eed1461031a578063f0fc6bca14610345578063f1e9f1e51461035c578063ffb2c47914610387578063ffd49c84146103b0576100fe565b8063997664d71461027b578063ce7c2ac2146102a6578063d0e30db0146102e5578063e2d2e219146102ef576100fe565b80632d48e896116100d15780632d48e896146101bf5780633a98ef39146101e85780634fab0ae8146102135780638c21cd521461023e576100fe565b806311ce023d1461010357806314b6ca961461012e57806326987b601461015757806328fd319814610182575b600080fd5b34801561010f57600080fd5b506101186103db565b6040516101259190611507565b60405180910390f35b34801561013a57600080fd5b50610155600480360381019061015091906115b1565b6103e1565b005b34801561016357600080fd5b5061016c6106a0565b6040516101799190611507565b60405180910390f35b34801561018e57600080fd5b506101a960048036038101906101a491906115f1565b6106a6565b6040516101b69190611507565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e1919061161e565b6107c0565b005b3480156101f457600080fd5b506101fd61082a565b60405161020a9190611507565b60405180910390f35b34801561021f57600080fd5b50610228610830565b6040516102359190611507565b60405180910390f35b34801561024a57600080fd5b50610265600480360381019061026091906115f1565b610836565b6040516102729190611679565b60405180910390f35b34801561028757600080fd5b506102906108a3565b60405161029d9190611507565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c891906115f1565b6108a9565b6040516102dc93929190611694565b60405180910390f35b6102ed6108d3565b005b3480156102fb57600080fd5b50610304610d40565b6040516103119190611507565b60405180910390f35b34801561032657600080fd5b5061032f610d46565b60405161033c9190611507565b60405180910390f35b34801561035157600080fd5b5061035a610d4c565b005b34801561036857600080fd5b50610371610d9f565b60405161037e919061172a565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190611745565b610dc5565b005b3480156103bc57600080fd5b506103c5610f01565b6040516103d29190611507565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043957600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561048e5761048d82610f07565b5b6000811180156104e057506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104f3576104ee826111ae565b610555565b60008114801561054557506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15610554576105538261125d565b5b5b6105be816105b0600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461146490919063ffffffff16565b61147a90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610656600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600e5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106fb57600090506107bb565b6000610748600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107a3576000925050506107bb565b6107b6818361146490919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081857600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461088691906117a1565b10801561089c5750600d5461089a836106a6565b115b9050919050565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092b57600080fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109889190611806565b60206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190611836565b90506000600267ffffffffffffffff8111156109f7576109f6611863565b5b604051908082528060200260200182016040528015610a255781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9057600080fd5b505afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac891906118a7565b81600081518110610adc57610adb6118d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b4d57610b4c6118d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610bea94939291906119fc565b6000604051808303818588803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50505050506000610cdb83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c7d9190611806565b60206040518083038186803b158015610c9557600080fd5b505afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611836565b61146490919063ffffffff16565b9050610cf28160085461147a90919063ffffffff16565b600881905550610d35610d24600754610d1684600b546114c290919063ffffffff16565b6114d890919063ffffffff16565b600a5461147a90919063ffffffff16565b600a81905550505050565b600a5481565b60095481565b610d5533610836565b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90611aa5565b60405180910390fd5b610d9d33610f07565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060038054905090506000811415610dde5750610efe565b60008060005a90505b8482108015610df557508383105b15610ef95783600e5410610e0c576000600e819055505b610e556003600e5481548110610e2557610e246118d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610836565b15610ea457610ea36003600e5481548110610e7357610e726118d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f07565b5b610ec9610eba5a8361146490919063ffffffff16565b8361147a90919063ffffffff16565b91505a9050600e6000815480929190610ee190611ac5565b91905055508280610ef190611ac5565b935050610de7565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610f57576111ab565b6000610f62826106a6565b905060008111156111a957610f828160095461147a90919063ffffffff16565b600981905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610fe5929190611b0e565b602060405180830381600087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190611b63565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110d181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461147a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611162600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506112719190611b90565b81548110611282576112816118d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611300576112ff6118d4565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506113a09190611b90565b815481106113b1576113b06118d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061142c5761142b611bc4565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836114729190611b90565b905092915050565b6000818361148891906117a1565b905092915050565b60006114bb600b546114ad600a54856114c290919063ffffffff16565b6114d890919063ffffffff16565b9050919050565b600081836114d09190611bf3565b905092915050565b600081836114e69190611c7c565b905092915050565b6000819050919050565b611501816114ee565b82525050565b600060208201905061151c60008301846114f8565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061155282611527565b9050919050565b61156281611547565b811461156d57600080fd5b50565b60008135905061157f81611559565b92915050565b61158e816114ee565b811461159957600080fd5b50565b6000813590506115ab81611585565b92915050565b600080604083850312156115c8576115c7611522565b5b60006115d685828601611570565b92505060206115e78582860161159c565b9150509250929050565b60006020828403121561160757611606611522565b5b600061161584828501611570565b91505092915050565b6000806040838503121561163557611634611522565b5b60006116438582860161159c565b92505060206116548582860161159c565b9150509250929050565b60008115159050919050565b6116738161165e565b82525050565b600060208201905061168e600083018461166a565b92915050565b60006060820190506116a960008301866114f8565b6116b660208301856114f8565b6116c360408301846114f8565b949350505050565b6000819050919050565b60006116f06116eb6116e684611527565b6116cb565b611527565b9050919050565b6000611702826116d5565b9050919050565b6000611714826116f7565b9050919050565b61172481611709565b82525050565b600060208201905061173f600083018461171b565b92915050565b60006020828403121561175b5761175a611522565b5b60006117698482850161159c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117ac826114ee565b91506117b7836114ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117ec576117eb611772565b5b828201905092915050565b61180081611547565b82525050565b600060208201905061181b60008301846117f7565b92915050565b60008151905061183081611585565b92915050565b60006020828403121561184c5761184b611522565b5b600061185a84828501611821565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506118a181611559565b92915050565b6000602082840312156118bd576118bc611522565b5b60006118cb84828501611892565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061192861192361191e84611903565b6116cb565b6114ee565b9050919050565b6119388161190d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61197381611547565b82525050565b6000611985838361196a565b60208301905092915050565b6000602082019050919050565b60006119a98261193e565b6119b38185611949565b93506119be8361195a565b8060005b838110156119ef5781516119d68882611979565b97506119e183611991565b9250506001810190506119c2565b5085935050505092915050565b6000608082019050611a11600083018761192f565b8181036020830152611a23818661199e565b9050611a3260408301856117f7565b611a3f60608301846114f8565b95945050505050565b600082825260208201905092915050565b7f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000600082015250565b6000611a8f601783611a48565b9150611a9a82611a59565b602082019050919050565b60006020820190508181036000830152611abe81611a82565b9050919050565b6000611ad0826114ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b0357611b02611772565b5b600182019050919050565b6000604082019050611b2360008301856117f7565b611b3060208301846114f8565b9392505050565b611b408161165e565b8114611b4b57600080fd5b50565b600081519050611b5d81611b37565b92915050565b600060208284031215611b7957611b78611522565b5b6000611b8784828501611b4e565b91505092915050565b6000611b9b826114ee565b9150611ba6836114ee565b925082821015611bb957611bb8611772565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611bfe826114ee565b9150611c09836114ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4257611c41611772565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611c87826114ee565b9150611c92836114ee565b925082611ca257611ca1611c4d565b5b82820490509291505056fea26469706673582212207df4c6e475c2c8833421ed4f85f6c997725a58dbb4ceb06e23420e78f93f69ed64736f6c6343000809003300000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000055f3ba0930fe0365fcb34f2070f3cdaaaf08ee30
Deployed Bytecode
0x6080604052600436106103b15760003560e01c80638366e79a116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f275f64b1161006f578063f275f64b14610e0d578063f5648a4f14610e36578063f887ea4014610e4d578063fabe628314610e78576103b8565b8063dd62ed3e14610d51578063e66b1d1e14610d8e578063ede1588f14610db7578063ee40166e14610de2576103b8565b8063cb29813c116100dc578063cb29813c14610ca9578063cc6badb314610cd2578063d4fb9a0114610cfd578063d920334e14610d28576103b8565b8063bbc0c74214610bfd578063bf56b37114610c28578063c45a015514610c53578063ca987b0e14610c7e576103b8565b8063a3a2e89e11610185578063a9059cbb11610154578063a9059cbb14610b43578063b515566a14610b80578063bad3ea6a14610ba9578063bb542ef014610bd4576103b8565b8063a3a2e89e14610a87578063a3e6761014610ab0578063a457c2d714610adb578063a8aa1b3114610b18576103b8565b80638ea5220f116101c15780638ea5220f146109dd5780639502c42614610a0857806395d89b4114610a33578063a16a317914610a5e576103b8565b80638366e79a1461093857806383ad7994146109755780638b42507f146109a0576103b8565b80633f4218e0116102d757806366b5d8821161026a5780637c0ff205116102395780637c0ff2051461088e5780637d1db4a5146108b95780637db1342c146108e4578063807c2d9c1461090d576103b8565b806366b5d882146107e45780636827e764146107fb578063704ce43e1461082657806370a0823114610851576103b8565b8063468c7ee2116102a6578063468c7ee21461073a5780634a74bb021461076357806360e719621461078e5780636303516c146107b9576103b8565b80633f4218e01461066c5780634355855a146106a957806343d49dda146106e657806344de2e4c1461070f576103b8565b806323b872dd1161034f5780632d48e8961161031e5780632d48e896146105b2578063313ce567146105db57806339509351146106065780633dab526914610643576103b8565b806323b872dd146104f8578063259aa50414610535578063273123b71461055e5780632b112e4914610587576103b8565b806316d9962b1161038b57806316d9962b1461045057806318160ddd146104795780631df4ccfc146104a45780631f53ac02146104cf576103b8565b80630445b667146103bd57806306fdde03146103e8578063095ea7b314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ea1565b6040516103df9190614273565b60405180910390f35b3480156103f457600080fd5b506103fd610ea7565b60405161040a9190614327565b60405180910390f35b34801561041f57600080fd5b5061043a600480360381019061043591906143e7565b610f39565b6040516104479190614442565b60405180910390f35b34801561045c57600080fd5b506104776004803603810190610472919061445d565b610f5c565b005b34801561048557600080fd5b5061048e610ffd565b60405161049b9190614273565b60405180910390f35b3480156104b057600080fd5b506104b9611007565b6040516104c69190614273565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906144c8565b61100d565b005b34801561050457600080fd5b5061051f600480360381019061051a91906144f5565b6110e8565b60405161052c9190614442565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614574565b611118565b005b34801561056a57600080fd5b50610585600480360381019061058091906145a1565b6111cc565b005b34801561059357600080fd5b5061059c6112be565b6040516105a99190614273565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d491906145ce565b611340565b005b3480156105e757600080fd5b506105f0611468565b6040516105fd919061462a565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906143e7565b611471565b60405161063a9190614442565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614645565b61151b565b005b34801561067857600080fd5b50610693600480360381019061068e91906145a1565b6115d7565b6040516106a09190614442565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb91906145a1565b6115f7565b6040516106dd9190614442565b60405180910390f35b3480156106f257600080fd5b5061070d600480360381019061070891906145a1565b611617565b005b34801561071b57600080fd5b506107246116f2565b6040516107319190614442565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906145a1565b611705565b005b34801561076f57600080fd5b506107786117e0565b6040516107859190614442565b60405180910390f35b34801561079a57600080fd5b506107a36117f3565b6040516107b09190614273565b60405180910390f35b3480156107c557600080fd5b506107ce6117f9565b6040516107db9190614694565b60405180910390f35b3480156107f057600080fd5b506107f961181f565b005b34801561080757600080fd5b506108106118fa565b60405161081d9190614273565b60405180910390f35b34801561083257600080fd5b5061083b611900565b6040516108489190614273565b60405180910390f35b34801561085d57600080fd5b50610878600480360381019061087391906145a1565b611906565b6040516108859190614273565b60405180910390f35b34801561089a57600080fd5b506108a361194f565b6040516108b09190614273565b60405180910390f35b3480156108c557600080fd5b506108ce611955565b6040516108db9190614273565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061445d565b61195b565b005b34801561091957600080fd5b506109226119fc565b60405161092f9190614273565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906146af565b611a02565b60405161096c9190614442565b60405180910390f35b34801561098157600080fd5b5061098a611cd6565b6040516109979190614273565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c291906145a1565b611cdc565b6040516109d49190614442565b60405180910390f35b3480156109e957600080fd5b506109f2611cfc565b6040516109ff91906146fe565b60405180910390f35b348015610a1457600080fd5b50610a1d611d22565b604051610a2a9190614273565b60405180910390f35b348015610a3f57600080fd5b50610a48611d28565b604051610a559190614327565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a80919061477e565b611dba565b005b348015610a9357600080fd5b50610aae6004803603810190610aa991906147de565b611f8d565b005b348015610abc57600080fd5b50610ac561207f565b604051610ad29190614694565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd91906143e7565b6120a5565b604051610b0f9190614442565b60405180910390f35b348015610b2457600080fd5b50610b2d61218f565b604051610b3a9190614694565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b6591906143e7565b6121b5565b604051610b779190614442565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba2919061495c565b6121d4565b005b348015610bb557600080fd5b50610bbe612300565b604051610bcb9190614a04565b60405180910390f35b348015610be057600080fd5b50610bfb6004803603810190610bf691906144c8565b612324565b005b348015610c0957600080fd5b50610c126123ff565b604051610c1f9190614442565b60405180910390f35b348015610c3457600080fd5b50610c3d612412565b604051610c4a9190614273565b60405180910390f35b348015610c5f57600080fd5b50610c68612418565b604051610c759190614694565b60405180910390f35b348015610c8a57600080fd5b50610c9361243e565b604051610ca09190614273565b60405180910390f35b348015610cb557600080fd5b50610cd06004803603810190610ccb9190614a1f565b612444565b005b348015610cde57600080fd5b50610ce76125fb565b604051610cf49190614273565b60405180910390f35b348015610d0957600080fd5b50610d12612601565b604051610d1f9190614442565b60405180910390f35b348015610d3457600080fd5b50610d4f6004803603810190610d4a919061445d565b612614565b005b348015610d5d57600080fd5b50610d786004803603810190610d7391906146af565b6126b5565b604051610d859190614273565b60405180910390f35b348015610d9a57600080fd5b50610db56004803603810190610db09190614574565b61273c565b005b348015610dc357600080fd5b50610dcc6127f0565b604051610dd99190614694565b60405180910390f35b348015610dee57600080fd5b50610df7612816565b604051610e049190614273565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614574565b61281c565b005b348015610e4257600080fd5b50610e4b612991565b005b348015610e5957600080fd5b50610e62612a99565b604051610e6f9190614acd565b60405180910390f35b348015610e8457600080fd5b50610e9f6004803603810190610e9a91906147de565b612abf565b005b601f5481565b606060058054610eb690614b17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee290614b17565b8015610f2f5780601f10610f0457610100808354040283529160200191610f2f565b820191906000526020600020905b815481529060010190602001808311610f1257829003601f168201915b5050505050905090565b600080610f44612bc7565b9050610f51818585612bcf565b600191505092915050565b610f64612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90614b95565b60405180910390fd5b8060018190555050565b6000600454905090565b60155481565b611015612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614b95565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806110f3612bc7565b9050611100858285612d9a565b61110b858585612e26565b5060019150509392505050565b611120612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614b95565b60405180910390fd5b80602060016101000a81548160ff02191690831515021790555050565b6111d4612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614b95565b60405180910390fd5b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061133b6112ee600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611906565b61132d61131c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611906565b6004546137cb90919063ffffffff16565b6137cb90919063ffffffff16565b905090565b611348612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90614b95565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611432929190614bb5565b600060405180830381600087803b15801561144c57600080fd5b505af1158015611460573d6000803e3d6000fd5b505050505050565b60006009905090565b60008061147c612bc7565b9050611510818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150b9190614c0d565b612bcf565b600191505092915050565b611523612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614b95565b60405180910390fd5b81601b60156101000a81548160ff02191690831515021790555080601f819055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b61161f612bc7565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614cd5565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960149054906101000a900460ff1681565b61170d612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614b95565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60159054906101000a900460ff1681565b60015481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611827612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614b95565b60405180910390fd5b6000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60105481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60135481565b601d5481565b611963612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614b95565b60405180910390fd5b80601e8190555050565b601e5481565b6000611a0c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614d41565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614dad565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bb59190614694565b60206040518083038186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190614de2565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611c42929190614e0f565b602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190614e4d565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611cc7929190614e0f565b60405180910390a15092915050565b600f5481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b606060068054611d3790614b17565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6390614b17565b8015611db05780601f10611d8557610100808354040283529160200191611db0565b820191906000526020600020905b815481529060010190602001808311611d9357829003601f168201915b5050505050905090565b611dc2612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614b95565b60405180910390fd5b6107d18383905010611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614eec565b60405180910390fd5b600083839050611ea6611468565b600a611eb2919061503f565b83611ebd919061508a565b611ec7919061508a565b905080611ed333611906565b1015611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90615130565b60405180910390fd5b60005b84849050811015611f8657611f7233868684818110611f3957611f38615150565b5b9050602002016020810190611f4e91906145a1565b611f56611468565b600a611f62919061503f565b86611f6d919061508a565b612e26565b508080611f7e9061517f565b915050611f17565b5050505050565b611f95612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90614b95565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806120b0612bc7565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d9061523a565b60405180910390fd5b6121838286868403612bcf565b60019250505092915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006121c96121c2612bc7565b8484612e26565b506001905092915050565b6121dc612bc7565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614cd5565b60405180910390fd5b60005b81518110156122fc576001601c60008484815181106122905761228f615150565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122f49061517f565b91505061226e565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61232c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614b95565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602060009054906101000a900460ff1681565b600d5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61244c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290614b95565b60405180910390fd5b85600f819055508360108190555081601181905550846012819055508260138190555080601481905550612530600f54612522601054601154612bb190919063ffffffff16565b612bb190919063ffffffff16565b601581905550612561601254612553601354601454612bb190919063ffffffff16565b612bb190919063ffffffff16565b601681905550600f60155411156125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a4906152a6565b60405180910390fd5b601e60165411156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea906152a6565b60405180910390fd5b505050505050565b60125481565b601b60169054906101000a900460ff1681565b61261c612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a290614b95565b60405180910390fd5b80601d8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612744612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614b95565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b612824612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614b95565b60405180910390fd5b602060009054906101000a900460ff1615612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90615312565b60405180910390fd5b80602060006101000a81548160ff0219169083151502179055507fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe52089602060009054906101000a900460ff1660405161295b9190614442565b60405180910390a1602060009054906101000a900460ff16801561298157506000602154145b1561298e57436021819055505b50565b612999612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614b95565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612a4e90615363565b60006040518083038185875af1925050503d8060008114612a8b576040519150601f19603f3d011682016040523d82523d6000602084013e612a90565b606091505b50508091505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ac7612bc7565b73ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614b95565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183612bbf9190614c0d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c36906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca69061547c565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d8d9190614273565b60405180910390a3505050565b6000612da684846126b5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612e205781811015612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e09906154e8565b60405180910390fd5b612e1f8484848403612bcf565b5b50505050565b6000601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ecc5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ed557600080fd5b602060009054906101000a900460ff16612f7a57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7090615554565b60405180910390fd5b5b601b60149054906101000a900460ff1615612fa157612f9a8484846137e1565b90506137c4565b602060019054906101000a900460ff168015612fbf57506000602154115b8015612fd85750436000602154612fd69190614c0d565b115b15612fe25761317e565b601d548211158061303c5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61307b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613072906155c0565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130e15750600960149054906101000a900460ff165b1561317d57601e5461313b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b111561317c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131739061562c565b60405180910390fd5b5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131e95750601b60149054906101000a900460ff16155b80156132015750601b60159054906101000a900460ff165b801561324e5750601f54600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561325c5761325b6139b4565b5b6132e5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff09092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133ce5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6133d857826133e4565b6133e3858585614045565b5b905061343881600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359c5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613566929190614e0f565b600060405180830381600087803b15801561358057600080fd5b505af1925050508015613591575060015b61359a5761359b565b5b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136bd5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613687929190614e0f565b600060405180830381600087803b1580156136a157600080fd5b505af19250505080156136b2575060015b6136bb576136bc565b5b5b600060015411156137595760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b81526004016137239190614273565b600060405180830381600087803b15801561373d57600080fd5b505af192505050801561374e575060015b61375757613758565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b69190614273565b60405180910390a360019150505b9392505050565b600081836137d9919061564c565b905092915050565b600061386c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff09092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390182600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139a19190614273565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806000600260155411613a6557613a5e6002613a50601654613a426013548961422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b9250613aa4565b613aa16002613a93601554613a856010548961422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b92505b6000613ab984866137cb90919063ffffffff16565b90506000600267ffffffffffffffff811115613ad857613ad761481e565b5b604051908082528060200260200182016040528015613b065781602001602082028036833780820191505090505b5090503081600081518110613b1e57613b1d615150565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613bc057600080fd5b505afa158015613bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf89190615695565b81600181518110613c0c57613c0b615150565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613caa9594939291906157bb565b600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b505050506000479050600260155411613d5957613d14601654613d066014548461422e90919063ffffffff16565b61424490919063ffffffff16565b9450613d526002613d44601654613d366013548661422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b9350613dc3565b613d82601554613d746011548461422e90919063ffffffff16565b61424490919063ffffffff16565b9450613dc06002613db2601554613da46010548661422e90919063ffffffff16565b61424490919063ffffffff16565b61424490919063ffffffff16565b93505b6000613dea85613ddc88856137cb90919063ffffffff16565b6137cb90919063ffffffff16565b90506000821115613e5f57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015613e5d573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ec757600080fd5b505af193505050508015613ed9575060015b613ee257613ee3565b5b6000871115613fcb57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308a600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613f7596959493929190615815565b6060604051808303818588803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fc79190615876565b5050505b50505050505050506000601b60146101000a81548160ff021916908315150217905550565b6000838311158290614038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402f9190614327565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140a5576015546140a9565b6016545b9050602060019054906101000a900460ff1680156140c957506000602154115b80156140e257504360036021546140e09190614c0d565b115b156140ec57605a90505b60006141146064614106848761422e90919063ffffffff16565b61424490919063ffffffff16565b905061416881600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bb190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142089190614273565b60405180910390a361422381856137cb90919063ffffffff16565b925050509392505050565b6000818361423c919061508a565b905092915050565b6000818361425291906158f8565b905092915050565b6000819050919050565b61426d8161425a565b82525050565b60006020820190506142886000830184614264565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142c85780820151818401526020810190506142ad565b838111156142d7576000848401525b50505050565b6000601f19601f8301169050919050565b60006142f98261428e565b6143038185614299565b93506143138185602086016142aa565b61431c816142dd565b840191505092915050565b6000602082019050818103600083015261434181846142ee565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143888261435d565b9050919050565b6143988161437d565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b6143c48161425a565b81146143cf57600080fd5b50565b6000813590506143e1816143bb565b92915050565b600080604083850312156143fe576143fd614353565b5b600061440c858286016143a6565b925050602061441d858286016143d2565b9150509250929050565b60008115159050919050565b61443c81614427565b82525050565b60006020820190506144576000830184614433565b92915050565b60006020828403121561447357614472614353565b5b6000614481848285016143d2565b91505092915050565b60006144958261435d565b9050919050565b6144a58161448a565b81146144b057600080fd5b50565b6000813590506144c28161449c565b92915050565b6000602082840312156144de576144dd614353565b5b60006144ec848285016144b3565b91505092915050565b60008060006060848603121561450e5761450d614353565b5b600061451c868287016143a6565b935050602061452d868287016143a6565b925050604061453e868287016143d2565b9150509250925092565b61455181614427565b811461455c57600080fd5b50565b60008135905061456e81614548565b92915050565b60006020828403121561458a57614589614353565b5b60006145988482850161455f565b91505092915050565b6000602082840312156145b7576145b6614353565b5b60006145c5848285016143a6565b91505092915050565b600080604083850312156145e5576145e4614353565b5b60006145f3858286016143d2565b9250506020614604858286016143d2565b9150509250929050565b600060ff82169050919050565b6146248161460e565b82525050565b600060208201905061463f600083018461461b565b92915050565b6000806040838503121561465c5761465b614353565b5b600061466a8582860161455f565b925050602061467b858286016143d2565b9150509250929050565b61468e8161437d565b82525050565b60006020820190506146a96000830184614685565b92915050565b600080604083850312156146c6576146c5614353565b5b60006146d4858286016143a6565b92505060206146e5858286016143a6565b9150509250929050565b6146f88161448a565b82525050565b600060208201905061471360008301846146ef565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261473e5761473d614719565b5b8235905067ffffffffffffffff81111561475b5761475a61471e565b5b60208301915083602082028301111561477757614776614723565b5b9250929050565b60008060006040848603121561479757614796614353565b5b600084013567ffffffffffffffff8111156147b5576147b4614358565b5b6147c186828701614728565b935093505060206147d4868287016143d2565b9150509250925092565b600080604083850312156147f5576147f4614353565b5b6000614803858286016143a6565b92505060206148148582860161455f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614856826142dd565b810181811067ffffffffffffffff821117156148755761487461481e565b5b80604052505050565b6000614888614349565b9050614894828261484d565b919050565b600067ffffffffffffffff8211156148b4576148b361481e565b5b602082029050602081019050919050565b60006148d86148d384614899565b61487e565b905080838252602082019050602084028301858111156148fb576148fa614723565b5b835b81811015614924578061491088826143a6565b8452602084019350506020810190506148fd565b5050509392505050565b600082601f83011261494357614942614719565b5b81356149538482602086016148c5565b91505092915050565b60006020828403121561497257614971614353565b5b600082013567ffffffffffffffff8111156149905761498f614358565b5b61499c8482850161492e565b91505092915050565b6000819050919050565b60006149ca6149c56149c08461435d565b6149a5565b61435d565b9050919050565b60006149dc826149af565b9050919050565b60006149ee826149d1565b9050919050565b6149fe816149e3565b82525050565b6000602082019050614a1960008301846149f5565b92915050565b60008060008060008060c08789031215614a3c57614a3b614353565b5b6000614a4a89828a016143d2565b9650506020614a5b89828a016143d2565b9550506040614a6c89828a016143d2565b9450506060614a7d89828a016143d2565b9350506080614a8e89828a016143d2565b92505060a0614a9f89828a016143d2565b9150509295509295509295565b6000614ab7826149d1565b9050919050565b614ac781614aac565b82525050565b6000602082019050614ae26000830184614abe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b2f57607f821691505b60208210811415614b4357614b42614ae8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b7f602083614299565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b6000604082019050614bca6000830185614264565b614bd76020830184614264565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c188261425a565b9150614c238361425a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c5857614c57614bde565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602383614299565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614d2b601a83614299565b9150614d3682614cf5565b602082019050919050565b60006020820190508181036000830152614d5a81614d1e565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000614d97601c83614299565b9150614da282614d61565b602082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b600081519050614ddc816143bb565b92915050565b600060208284031215614df857614df7614353565b5b6000614e0684828501614dcd565b91505092915050565b6000604082019050614e246000830185614685565b614e316020830184614264565b9392505050565b600081519050614e4781614548565b92915050565b600060208284031215614e6357614e62614353565b5b6000614e7184828501614e38565b91505092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b6000614ed6602e83614299565b9150614ee182614e7a565b604082019050919050565b60006020820190508181036000830152614f0581614ec9565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614f6357808604811115614f3f57614f3e614bde565b5b6001851615614f4e5780820291505b8081029050614f5c85614f0c565b9450614f23565b94509492505050565b600082614f7c5760019050615038565b81614f8a5760009050615038565b8160018114614fa05760028114614faa57614fd9565b6001915050615038565b60ff841115614fbc57614fbb614bde565b5b8360020a915084821115614fd357614fd2614bde565b5b50615038565b5060208310610133831016604e8410600b841016171561500e5782820a90508381111561500957615008614bde565b5b615038565b61501b8484846001614f19565b9250905081840481111561503257615031614bde565b5b81810290505b9392505050565b600061504a8261425a565b91506150558361460e565b92506150827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614f6c565b905092915050565b60006150958261425a565b91506150a08361425a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d9576150d8614bde565b5b828202905092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b600061511a601b83614299565b9150615125826150e4565b602082019050919050565b600060208201905081810360008301526151498161510d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061518a8261425a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151bd576151bc614bde565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615224602583614299565b915061522f826151c8565b604082019050919050565b6000602082019050818103600083015261525381615217565b9050919050565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b6000615290600c83614299565b915061529b8261525a565b602082019050919050565b600060208201905081810360008301526152bf81615283565b9050919050565b7f43616e6e6f7420726520656e61626c652074726164696e670000000000000000600082015250565b60006152fc601883614299565b9150615307826152c6565b602082019050919050565b6000602082019050818103600083015261532b816152ef565b9050919050565b600081905092915050565b50565b600061534d600083615332565b91506153588261533d565b600082019050919050565b600061536e82615340565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153d4602483614299565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615466602283614299565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006154d2601d83614299565b91506154dd8261549c565b602082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b7f54726164696e6720697320656e61626c65640000000000000000000000000000600082015250565b600061553e601283614299565b915061554982615508565b602082019050919050565b6000602082019050818103600083015261556d81615531565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006155aa600283614299565b91506155b582615574565b602082019050919050565b600060208201905081810360008301526155d98161559d565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000615616600683614299565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b60006156578261425a565b91506156628361425a565b92508282101561567557615674614bde565b5b828203905092915050565b60008151905061568f8161438f565b92915050565b6000602082840312156156ab576156aa614353565b5b60006156b984828501615680565b91505092915050565b6000819050919050565b60006156e76156e26156dd846156c2565b6149a5565b61425a565b9050919050565b6156f7816156cc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157328161437d565b82525050565b60006157448383615729565b60208301905092915050565b6000602082019050919050565b6000615768826156fd565b6157728185615708565b935061577d83615719565b8060005b838110156157ae5781516157958882615738565b97506157a083615750565b925050600181019050615781565b5085935050505092915050565b600060a0820190506157d06000830188614264565b6157dd60208301876156ee565b81810360408301526157ef818661575d565b90506157fe6060830185614685565b61580b6080830184614264565b9695505050505050565b600060c08201905061582a6000830189614685565b6158376020830188614264565b61584460408301876156ee565b61585160608301866156ee565b61585e6080830185614685565b61586b60a0830184614264565b979650505050505050565b60008060006060848603121561588f5761588e614353565b5b600061589d86828701614dcd565b93505060206158ae86828701614dcd565b92505060406158bf86828701614dcd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159038261425a565b915061590e8361425a565b92508261591e5761591d6158c9565b5b82820490509291505056fea264697066735822122061511d36be500f427e3660f48c28bdb98c546ca1fe838ad3aec852db82ea625864736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000055f3ba0930fe0365fcb34f2070f3cdaaaf08ee30
-----Decoded View---------------
Arg [0] : initialSupply (uint256): 1000000000000000000000000
Arg [1] : reflectionToken (address): 0x4d224452801ACEd8B2F0aebE155379bb5D594381
Arg [2] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : initialHldAdmin (address): 0x55F3Ba0930FE0365fCb34f2070f3cdAaaf08EE30
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [1] : 0000000000000000000000004d224452801aced8b2f0aebe155379bb5d594381
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 00000000000000000000000055f3ba0930fe0365fcb34f2070f3cdaaaf08ee30
Deployed Bytecode Sourcemap
21480:20157:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23006:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29370:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31688:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29014:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30489:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22535:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28116:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32479:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28005:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28916:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29158:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28702:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30332:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33183:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28495:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22098:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22204:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25384:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22056:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28247:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22801:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21625:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22294:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:91;;;;;;;;;;;;;:::i;:::-;;22395:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22368:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30660:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22466:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22940:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26664:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22974:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40906:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22333:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22149:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22732:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22499:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29589:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26777:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27401:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22700:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33926:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22645:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30993:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25505:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21571:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28361:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23041:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22262:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22671:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22565:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25705:742;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22425:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22848:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26554:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31217:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27269:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22024:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23120:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27676:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41432:160;;;;;;;;;;;;;:::i;:::-;;22606:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27531:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23006:28;;;;:::o;29370:100::-;29424:13;29457:5;29450:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29370:100;:::o;31688:201::-;31771:4;31788:13;31804:12;:10;:12::i;:::-;31788:28;;31827:32;31836:5;31843:7;31852:6;31827:8;:32::i;:::-;31877:4;31870:11;;;31688:201;;;;:::o;29014:125::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29116:15:::1;29099:14;:32;;;;29014:125:::0;:::o;30489:108::-;30550:7;30577:12;;30570:19;;30489:108;:::o;22535:23::-;;;;:::o;28116:123::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28218:12:::1;28198:9;;:33;;;;;;;;;;;;;;;;;;28116:123:::0;:::o;32479:295::-;32610:4;32627:15;32645:12;:10;:12::i;:::-;32627:30;;32668:38;32684:4;32690:7;32699:6;32668:15;:38::i;:::-;32717:27;32727:4;32733:2;32737:6;32717:9;:27::i;:::-;;32762:4;32755:11;;;32479:295;;;;;:::o;28005:101::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28091:7:::1;28076:12;;:22;;;;;;;;;;;;;;;;;;28005:101:::0;:::o;28916:90::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28993:5:::1;28978:4;:12;28983:6;28978:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;28916:90:::0;:::o;29158:142::-;29211:7;29238:54;29276:15;29286:4;;;;;;;;;;;29276:9;:15::i;:::-;29238:33;29255:15;29265:4;;;;;;;;;;;29255:9;:15::i;:::-;29238:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;29231:61;;29158:142;:::o;28702:206::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:19:::1;::::0;::::1;;;;;;;;:43;;;28859:12;28873:18;28815:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28702:206:::0;;:::o;30332:92::-;30390:5;30415:1;30408:8;;30332:92;:::o;33183:240::-;33271:4;33288:13;33304:12;:10;:12::i;:::-;33288:28;;33327:66;33336:5;33343:7;33382:10;33352:11;:18;33364:5;33352:18;;;;;;;;;;;;;;;:27;33371:7;33352:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;33327:8;:66::i;:::-;33411:4;33404:11;;;33183:240;;;;:::o;28495:199::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28629:14:::1;28604:21;;:39;;;;;;;;;;;;;;;;;;28670:16;28654:13;:32;;;;28495:199:::0;;:::o;22098:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;22204:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;25384:113::-;25147:12;:10;:12::i;:::-;25135:24;;:8;;;;;;;;;;;:24;;;25127:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25481:8:::1;25470;;:19;;;;;;;;;;;;;;;;;;25384:113:::0;:::o;22056:33::-;;;;;;;;;;;;;:::o;28247:102::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28330:11:::1;28319:8;;:22;;;;;;;;;;;;;;;;;;28247:102:::0;:::o;22801:40::-;;;;;;;;;;;;;:::o;21625:37::-;;;;:::o;22294:30::-;;;;;;;;;;;;;:::o;26455:91::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26536:1:::1;26517:8;;:21;;;;;;;;;;;;;;;;;;26455:91::o:0;22395:21::-;;;;:::o;22368:20::-;;;;:::o;30660:127::-;30734:7;30761:9;:18;30771:7;30761:18;;;;;;;;;;;;;;;;30754:25;;30660:127;;;:::o;22466:26::-;;;;:::o;22940:27::-;;;;:::o;26664:105::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26753:8:::1;26739:10;:22;;;;26664:105:::0;:::o;22974:25::-;;;;:::o;40906:456::-;40993:10;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41042:1:::1;41024:20;;:6;:20;;;;41016:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41112:4;41094:23;;:6;:23;;;;41086:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41161:24;41195:6;41188:24;;;41221:4;41188:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41161:66;;41253:6;41246:23;;;41270:3;41275:16;41246:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41238:54;;41308:46;41329:6;41337:16;41308:46;;;;;;;:::i;:::-;;;;;;;;41005:357;40906:456:::0;;;;:::o;22333:28::-;;;;:::o;22149:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22732:32::-;;;;;;;;;;;;;:::o;22499:27::-;;;;:::o;29589:104::-;29645:13;29678:7;29671:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29589:104;:::o;26777:484::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26905:4:::1;26886:9;;:16;;:23;26878:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26973:12;27013:9;;:16;;27000:10;:8;:10::i;:::-;26996:2;:14;;;;:::i;:::-;26988:6;:22;;;;:::i;:::-;:41;;;;:::i;:::-;26973:56;;27075:4;27050:21;27060:10;27050:9;:21::i;:::-;:29;;27042:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27128:6;27124:130;27142:9;;:16;;27138:1;:20;27124:130;;;27179:59;27189:10;27200:9;;27210:1;27200:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27226:10;:8;:10::i;:::-;27222:2;:14;;;;:::i;:::-;27214:6;:22;;;;:::i;:::-;27179:9;:59::i;:::-;;27160:3;;;;;:::i;:::-;;;;27124:130;;;;26865:396;26777:484:::0;;;:::o;27401:122::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27509:6:::1;27487:11;:19;27499:6;27487:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27401:122:::0;;:::o;22700:25::-;;;;;;;;;;;;;:::o;33926:438::-;34019:4;34036:13;34052:12;:10;:12::i;:::-;34036:28;;34075:24;34102:11;:18;34114:5;34102:18;;;;;;;;;;;;;;;:27;34121:7;34102:27;;;;;;;;;;;;;;;;34075:54;;34168:15;34148:16;:35;;34140:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34261:60;34270:5;34277:7;34305:15;34286:16;:34;34261:8;:60::i;:::-;34352:4;34345:11;;;;33926:438;;;;:::o;22645:19::-;;;;;;;;;;;;;:::o;30993:161::-;31072:4;31089:35;31099:12;:10;:12::i;:::-;31113:2;31117:6;31089:9;:35::i;:::-;;31142:4;31135:11;;30993:161;;;;:::o;25505:169::-;25147:12;:10;:12::i;:::-;25135:24;;:8;;;;;;;;;;;:24;;;25127:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25584:6:::1;25579:88;25600:5;:12;25596:1;:16;25579:88;;;25651:4;25634;:14;25639:5;25645:1;25639:8;;;;;;;;:::i;:::-;;;;;;;;25634:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25614:3;;;;;:::i;:::-;;;;25579:88;;;;25505:169:::0;:::o;21571:47::-;;;;;;;;;;;;:::o;28361:121::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28460:14:::1;28447:10;;:27;;;;;;;;;;;;;;;;;;28361:121:::0;:::o;23041:33::-;;;;;;;;;;;;;:::o;22262:25::-;;;;:::o;22671:22::-;;;;;;;;;;;;;:::o;22565:32::-;;;;:::o;25705:742::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25950:20:::1;25934:13;:36;;;;25989:12;25981:5;:20;;;;26021:13;26012:6;:22;;;;26069:26;26047:19;:48;;;;26120:18;26106:11;:32;;;;26164:19;26149:12;:34;;;;26207:36;26229:13;;26207:17;26218:5;;26207:6;;:10;;:17;;;;:::i;:::-;:21;;:36;;;;:::i;:::-;26196:8;:47;;;;26274:54;26308:19;;26274:29;26291:11;;26274:12;;:16;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;26254:17;:74;;;;26361:2;26349:8;;:14;;26341:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;26420:2;26399:17;;:23;;26391:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25705:742:::0;;;;;;:::o;22425:34::-;;;;:::o;22848:32::-;;;;;;;;;;;;;:::o;26554:102::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26640:8:::1;26625:12;:23;;;;26554:102:::0;:::o;31217:151::-;31306:7;31333:11;:18;31345:5;31333:18;;;;;;;;;;;;;;;:27;31352:7;31333:27;;;;;;;;;;;;;;;;31326:34;;31217:151;;;;:::o;27269:120::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27373:8:::1;27356:14;;:25;;;;;;;;;;;;;;;;;;27269:120:::0;:::o;22024:23::-;;;;;;;;;;;;;:::o;23120:37::-;;;;:::o;27676:321::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:13:::1;;;;;;;;;;;27751:14;27743:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;27821:7;27805:13;;:23;;;;;;;;;;;;;;;;;;27844:29;27859:13;;;;;;;;;;;27844:29;;;;;;:::i;:::-;;;;;;;;27888:13;;;;;;;;;;;:40;;;;;27927:1;27905:18;;:23;27888:40;27884:106;;;27966:12;27945:18;:33;;;;27884:106;27676:321:::0;:::o;41432:160::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41490:12:::1;41534:10;41526:24;;41558:21;41526:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41513:71;;;;;41479:113;41432:160::o:0;22606:32::-;;;;;;;;;;;;;:::o;27531:136::-;25281:12;:10;:12::i;:::-;25267:26;;:10;;;;;;;;;;;:26;;;25259:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27653:6:::1;27627:15;:23;27643:6;27627:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27531:136:::0;;:::o;7415:98::-;7473:7;7504:1;7500;:5;;;;:::i;:::-;7493:12;;7415:98;;;;:::o;4339:::-;4392:7;4419:10;4412:17;;4339:98;:::o;37165:380::-;37318:1;37301:19;;:5;:19;;;;37293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1;37380:21;;:7;:21;;;;37372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37483:6;37453:11;:18;37465:5;37453:18;;;;;;;;;;;;;;;:27;37472:7;37453:27;;;;;;;;;;;;;;;:36;;;;37521:7;37505:32;;37514:5;37505:32;;;37530:6;37505:32;;;;;;:::i;:::-;;;;;;;;37165:380;;;:::o;37832:453::-;37967:24;37994:25;38004:5;38011:7;37994:9;:25::i;:::-;37967:52;;38054:17;38034:16;:37;38030:248;;38116:6;38096:16;:26;;38088:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38200:51;38209:5;38216:7;38244:6;38225:16;:25;38200:8;:51::i;:::-;38030:248;37956:329;37832:453;;;:::o;34374:1722::-;34462:4;34498;:12;34503:6;34498:12;;;;;;;;;;;;;;;;;;;;;;;;;34497:13;:33;;;;;34515:4;:15;34520:9;34515:15;;;;;;;;;;;;;;;;;;;;;;;;;34514:16;34497:33;34489:42;;;;;;34552:13;;;;;;;;;;;34548:96;;34601:8;;;;;;;;;;;34591:18;;:6;:18;;;34583:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;34548:96;34659:16;;;;;;;;;;;34656:73;;;34685:41;34700:6;34708:9;34719:6;34685:14;:41::i;:::-;34678:48;;;;34656:73;34744:12;;;;;;;;;;;:36;;;;;34779:1;34760:18;;:20;34744:36;:79;;;;;34811:12;34806:1;34785:18;;:22;;;;:::i;:::-;34784:39;34744:79;34741:389;;;;;;34895:12;;34885:6;:22;;:49;;;;34911:15;:23;34927:6;34911:23;;;;;;;;;;;;;;;;;;;;;;;;;34885:49;34877:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34960:15;:26;34976:9;34960:26;;;;;;;;;;;;;;;;;;;;;;;;;34959:27;:45;;;;;34990:14;;;;;;;;;;;34959:45;34956:163;;;35082:10;;35046:32;35071:6;35046:9;:20;35056:9;35046:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;35038:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34956:163;34741:389;35159:4;;;;;;;;;;;35145:18;;:10;:18;;;;:39;;;;;35168:16;;;;;;;;;;;35167:17;35145:39;:64;;;;;35188:21;;;;;;;;;;;35145:64;:109;;;;;35241:13;;35213:9;:24;35231:4;35213:24;;;;;;;;;;;;;;;;:41;;35145:109;35142:128;;;35257:10;:8;:10::i;:::-;35142:128;35302:53;35324:6;35302:53;;;;;;;;;;;;;;;;;:9;:17;35312:6;35302:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;35282:9;:17;35292:6;35282:17;;;;;;;;;;;;;;;:73;;;;35376:19;35399:11;:19;35411:6;35399:19;;;;;;;;;;;;;;;;;;;;;;;;;35398:20;:47;;;;;35423:11;:22;35435:9;35423:22;;;;;;;;;;;;;;;;;;;;;;;;;35422:23;35398:47;:93;;35485:6;35398:93;;;35448:34;35456:6;35464:9;35475:6;35448:7;:34::i;:::-;35398:93;35376:115;;35535:37;35560:11;35535:9;:20;35545:9;35535:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;35512:9;:20;35522:9;35512:20;;;;;;;;;;;;;;;:60;;;;35616:16;:24;35633:6;35616:24;;;;;;;;;;;;;;;;;;;;;;;;;35612:127;;35661:19;;;;;;;;;;:28;;;35690:6;35698:9;:17;35708:6;35698:17;;;;;;;;;;;;;;;;35661:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35657:71;;;;;;35612:127;35755:16;:27;35772:9;35755:27;;;;;;;;;;;;;;;;;;;;;;;;;35751:137;;35803:19;;;;;;;;;;:28;;;35832:9;35843;:20;35853:9;35843:20;;;;;;;;;;;;;;;;35803:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35799:77;;;;;;35751:137;35921:1;35904:14;;:18;35900:109;;;35943:19;;;;;;;;;;:27;;;35971:14;;35943:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35939:59;;;;;;35900:109;36043:9;36026:40;;36035:6;36026:40;;;36054:11;36026:40;;;;;;:::i;:::-;;;;;;;;36084:4;36077:11;;;34374:1722;;;;;;:::o;7796:98::-;7854:7;7885:1;7881;:5;;;;:::i;:::-;7874:12;;7796:98;;;;:::o;36108:330::-;36201:4;36238:53;36260:6;36238:53;;;;;;;;;;;;;;;;;:9;:17;36248:6;36238:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;36218:9;:17;36228:6;36218:17;;;;;;;;;;;;;;;:73;;;;36325:32;36350:6;36325:9;:20;36335:9;36325:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;36302:9;:20;36312:9;36302:20;;;;;;;;;;;;;;;:55;;;;36390:9;36373:35;;36382:6;36373:35;;;36401:6;36373:35;;;;;;:::i;:::-;;;;;;;;36426:4;36419:11;;36108:330;;;;;:::o;38908:1989::-;25025:4;25006:16;;:23;;;;;;;;;;;;;;;;;;38966::::1;38992:9;:24;39010:4;38992:24;;;;;;;;;;;;;;;;38966:50;;39029:23;39063:18:::0;39092:26:::1;39202:1;39190:8;;:13;39186:241;;39238:62;39298:1;39238:55;39275:17;;39238:32;39258:11;;39238:15;:19;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;:59;;:62;;;;:::i;:::-;39220:80;;39186:241;;;39351:47;39396:1;39351:40;39382:8;;39351:26;39371:5;;39351:15;:19;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;:44;;:47;;;;:::i;:::-;39333:65;;39186:241;39439:20;39462:36;39482:15;39462;:19;;:36;;;;:::i;:::-;39439:59;;39511:21;39549:1;39535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39511:40;;39580:4;39562;39567:1;39562:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;39606:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39596:4;39601:1;39596:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;39632:6;;;;;;;;;;;:57;;;39704:12;39731:1;39747:4;39774;39794:15;39632:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39833:17;39853:21;39833:41;;39950:1;39938:8;;:13;39934:373;;39981:50;40013:17;;39981:27;39995:12;;39981:9;:13;;:27;;;;:::i;:::-;:31;;:50;;;;:::i;:::-;39968:63;;40067:56;40121:1;40067:49;40098:17;;40067:26;40081:11;;40067:9;:13;;:26;;;;:::i;:::-;:30;;:49;;;;:::i;:::-;:53;;:56;;;;:::i;:::-;40046:77;;39934:373;;;40171:35;40197:8;;40171:21;40185:6;;40171:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;40158:48;;40242:41;40281:1;40242:34;40267:8;;40242:20;40256:5;;40242:9;:13;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;40221:62;;39934:373;40319:27;40349:49;40379:18;40349:25;40363:10;40349:9;:13;;:25;;;;:::i;:::-;:29;;:49;;;;:::i;:::-;40319:79;;40426:1;40414:9;:13;40411:81;;;40450:9;;;;;;;;;;;:18;;:30;40469:10;40450:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40411:81;40516:19;::::0;::::1;;;;;;;;:27;;;40551:19;40516:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;40512:73;;;;;;40618:1;40600:15;:19;40597:281;;;40635:6;;;;;;;;;;;:22;;;40665:18;40711:4;40735:15;40769:1;40789::::0;40809:8:::1;;;;;;;;;;;40836:15;40635:231;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40597:281;38949:1948;;;;;;;;25071:5:::0;25052:16;;:24;;;;;;;;;;;;;;;;;;38908:1989::o;9694:240::-;9814:7;9872:1;9867;:6;;9875:12;9859:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9914:1;9910;:5;9903:12;;9694:240;;;;;:::o;38293:603::-;38379:7;38409:21;38441:9;38433:17;;:4;;;;;;;;;;;:17;;;:48;;38473:8;;38433:48;;;38453:17;;38433:48;38409:72;;38521:12;;;;;;;;;;;:36;;;;;38556:1;38537:18;;:20;38521:36;:79;;;;;38588:12;38583:1;38562:18;;:22;;;;:::i;:::-;38561:39;38521:79;38518:126;;;38630:2;38616:16;;38518:126;38656:17;38676:34;38706:3;38676:25;38687:13;38676:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38656:54;;38750:39;38779:9;38750;:24;38768:4;38750:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;38723:9;:24;38741:4;38723:24;;;;;;;;;;;;;;;:66;;;;38830:4;38805:42;;38814:6;38805:42;;;38837:9;38805:42;;;;;;:::i;:::-;;;;;;;;38867:21;38878:9;38867:6;:10;;:21;;;;:::i;:::-;38860:28;;;;38293:603;;;;;:::o;8153:98::-;8211:7;8242:1;8238;:5;;;;:::i;:::-;8231:12;;8153:98;;;;:::o;8552:::-;8610:7;8641:1;8637;:5;;;;:::i;:::-;8630:12;;8552:98;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:104::-;4226:7;4255:24;4273:5;4255:24;:::i;:::-;4244:35;;4181:104;;;:::o;4291:138::-;4372:32;4398:5;4372:32;:::i;:::-;4365:5;4362:43;4352:71;;4419:1;4416;4409:12;4352:71;4291:138;:::o;4435:155::-;4489:5;4527:6;4514:20;4505:29;;4543:41;4578:5;4543:41;:::i;:::-;4435:155;;;;:::o;4596:345::-;4663:6;4712:2;4700:9;4691:7;4687:23;4683:32;4680:119;;;4718:79;;:::i;:::-;4680:119;4838:1;4863:61;4916:7;4907:6;4896:9;4892:22;4863:61;:::i;:::-;4853:71;;4809:125;4596:345;;;;:::o;4947:619::-;5024:6;5032;5040;5089:2;5077:9;5068:7;5064:23;5060:32;5057:119;;;5095:79;;:::i;:::-;5057:119;5215:1;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5186:117;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;5470:2;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5441:118;4947:619;;;;;:::o;5572:116::-;5642:21;5657:5;5642:21;:::i;:::-;5635:5;5632:32;5622:60;;5678:1;5675;5668:12;5622:60;5572:116;:::o;5694:133::-;5737:5;5775:6;5762:20;5753:29;;5791:30;5815:5;5791:30;:::i;:::-;5694:133;;;;:::o;5833:323::-;5889:6;5938:2;5926:9;5917:7;5913:23;5909:32;5906:119;;;5944:79;;:::i;:::-;5906:119;6064:1;6089:50;6131:7;6122:6;6111:9;6107:22;6089:50;:::i;:::-;6079:60;;6035:114;5833:323;;;;:::o;6162:329::-;6221:6;6270:2;6258:9;6249:7;6245:23;6241:32;6238:119;;;6276:79;;:::i;:::-;6238:119;6396:1;6421:53;6466:7;6457:6;6446:9;6442:22;6421:53;:::i;:::-;6411:63;;6367:117;6162:329;;;;:::o;6497:474::-;6565:6;6573;6622:2;6610:9;6601:7;6597:23;6593:32;6590:119;;;6628:79;;:::i;:::-;6590:119;6748:1;6773:53;6818:7;6809:6;6798:9;6794:22;6773:53;:::i;:::-;6763:63;;6719:117;6875:2;6901:53;6946:7;6937:6;6926:9;6922:22;6901:53;:::i;:::-;6891:63;;6846:118;6497:474;;;;;:::o;6977:86::-;7012:7;7052:4;7045:5;7041:16;7030:27;;6977:86;;;:::o;7069:112::-;7152:22;7168:5;7152:22;:::i;:::-;7147:3;7140:35;7069:112;;:::o;7187:214::-;7276:4;7314:2;7303:9;7299:18;7291:26;;7327:67;7391:1;7380:9;7376:17;7367:6;7327:67;:::i;:::-;7187:214;;;;:::o;7407:468::-;7472:6;7480;7529:2;7517:9;7508:7;7504:23;7500:32;7497:119;;;7535:79;;:::i;:::-;7497:119;7655:1;7680:50;7722:7;7713:6;7702:9;7698:22;7680:50;:::i;:::-;7670:60;;7626:114;7779:2;7805:53;7850:7;7841:6;7830:9;7826:22;7805:53;:::i;:::-;7795:63;;7750:118;7407:468;;;;;:::o;7881:118::-;7968:24;7986:5;7968:24;:::i;:::-;7963:3;7956:37;7881:118;;:::o;8005:222::-;8098:4;8136:2;8125:9;8121:18;8113:26;;8149:71;8217:1;8206:9;8202:17;8193:6;8149:71;:::i;:::-;8005:222;;;;:::o;8233:474::-;8301:6;8309;8358:2;8346:9;8337:7;8333:23;8329:32;8326:119;;;8364:79;;:::i;:::-;8326:119;8484:1;8509:53;8554:7;8545:6;8534:9;8530:22;8509:53;:::i;:::-;8499:63;;8455:117;8611:2;8637:53;8682:7;8673:6;8662:9;8658:22;8637:53;:::i;:::-;8627:63;;8582:118;8233:474;;;;;:::o;8713:142::-;8816:32;8842:5;8816:32;:::i;:::-;8811:3;8804:45;8713:142;;:::o;8861:254::-;8970:4;9008:2;8997:9;8993:18;8985:26;;9021:87;9105:1;9094:9;9090:17;9081:6;9021:87;:::i;:::-;8861:254;;;;:::o;9121:117::-;9230:1;9227;9220:12;9244:117;9353:1;9350;9343:12;9367:117;9476:1;9473;9466:12;9507:568;9580:8;9590:6;9640:3;9633:4;9625:6;9621:17;9617:27;9607:122;;9648:79;;:::i;:::-;9607:122;9761:6;9748:20;9738:30;;9791:18;9783:6;9780:30;9777:117;;;9813:79;;:::i;:::-;9777:117;9927:4;9919:6;9915:17;9903:29;;9981:3;9973:4;9965:6;9961:17;9951:8;9947:32;9944:41;9941:128;;;9988:79;;:::i;:::-;9941:128;9507:568;;;;;:::o;10081:704::-;10176:6;10184;10192;10241:2;10229:9;10220:7;10216:23;10212:32;10209:119;;;10247:79;;:::i;:::-;10209:119;10395:1;10384:9;10380:17;10367:31;10425:18;10417:6;10414:30;10411:117;;;10447:79;;:::i;:::-;10411:117;10560:80;10632:7;10623:6;10612:9;10608:22;10560:80;:::i;:::-;10542:98;;;;10338:312;10689:2;10715:53;10760:7;10751:6;10740:9;10736:22;10715:53;:::i;:::-;10705:63;;10660:118;10081:704;;;;;:::o;10791:468::-;10856:6;10864;10913:2;10901:9;10892:7;10888:23;10884:32;10881:119;;;10919:79;;:::i;:::-;10881:119;11039:1;11064:53;11109:7;11100:6;11089:9;11085:22;11064:53;:::i;:::-;11054:63;;11010:117;11166:2;11192:50;11234:7;11225:6;11214:9;11210:22;11192:50;:::i;:::-;11182:60;;11137:115;10791:468;;;;;:::o;11265:180::-;11313:77;11310:1;11303:88;11410:4;11407:1;11400:15;11434:4;11431:1;11424:15;11451:281;11534:27;11556:4;11534:27;:::i;:::-;11526:6;11522:40;11664:6;11652:10;11649:22;11628:18;11616:10;11613:34;11610:62;11607:88;;;11675:18;;:::i;:::-;11607:88;11715:10;11711:2;11704:22;11494:238;11451:281;;:::o;11738:129::-;11772:6;11799:20;;:::i;:::-;11789:30;;11828:33;11856:4;11848:6;11828:33;:::i;:::-;11738:129;;;:::o;11873:311::-;11950:4;12040:18;12032:6;12029:30;12026:56;;;12062:18;;:::i;:::-;12026:56;12112:4;12104:6;12100:17;12092:25;;12172:4;12166;12162:15;12154:23;;11873:311;;;:::o;12207:710::-;12303:5;12328:81;12344:64;12401:6;12344:64;:::i;:::-;12328:81;:::i;:::-;12319:90;;12429:5;12458:6;12451:5;12444:21;12492:4;12485:5;12481:16;12474:23;;12545:4;12537:6;12533:17;12525:6;12521:30;12574:3;12566:6;12563:15;12560:122;;;12593:79;;:::i;:::-;12560:122;12708:6;12691:220;12725:6;12720:3;12717:15;12691:220;;;12800:3;12829:37;12862:3;12850:10;12829:37;:::i;:::-;12824:3;12817:50;12896:4;12891:3;12887:14;12880:21;;12767:144;12751:4;12746:3;12742:14;12735:21;;12691:220;;;12695:21;12309:608;;12207:710;;;;;:::o;12940:370::-;13011:5;13060:3;13053:4;13045:6;13041:17;13037:27;13027:122;;13068:79;;:::i;:::-;13027:122;13185:6;13172:20;13210:94;13300:3;13292:6;13285:4;13277:6;13273:17;13210:94;:::i;:::-;13201:103;;13017:293;12940:370;;;;:::o;13316:539::-;13400:6;13449:2;13437:9;13428:7;13424:23;13420:32;13417:119;;;13455:79;;:::i;:::-;13417:119;13603:1;13592:9;13588:17;13575:31;13633:18;13625:6;13622:30;13619:117;;;13655:79;;:::i;:::-;13619:117;13760:78;13830:7;13821:6;13810:9;13806:22;13760:78;:::i;:::-;13750:88;;13546:302;13316:539;;;;:::o;13861:60::-;13889:3;13910:5;13903:12;;13861:60;;;:::o;13927:142::-;13977:9;14010:53;14028:34;14037:24;14055:5;14037:24;:::i;:::-;14028:34;:::i;:::-;14010:53;:::i;:::-;13997:66;;13927:142;;;:::o;14075:126::-;14125:9;14158:37;14189:5;14158:37;:::i;:::-;14145:50;;14075:126;;;:::o;14207:154::-;14285:9;14318:37;14349:5;14318:37;:::i;:::-;14305:50;;14207:154;;;:::o;14367:187::-;14482:65;14541:5;14482:65;:::i;:::-;14477:3;14470:78;14367:187;;:::o;14560:278::-;14681:4;14719:2;14708:9;14704:18;14696:26;;14732:99;14828:1;14817:9;14813:17;14804:6;14732:99;:::i;:::-;14560:278;;;;:::o;14844:1057::-;14948:6;14956;14964;14972;14980;14988;15037:3;15025:9;15016:7;15012:23;15008:33;15005:120;;;15044:79;;:::i;:::-;15005:120;15164:1;15189:53;15234:7;15225:6;15214:9;15210:22;15189:53;:::i;:::-;15179:63;;15135:117;15291:2;15317:53;15362:7;15353:6;15342:9;15338:22;15317:53;:::i;:::-;15307:63;;15262:118;15419:2;15445:53;15490:7;15481:6;15470:9;15466:22;15445:53;:::i;:::-;15435:63;;15390:118;15547:2;15573:53;15618:7;15609:6;15598:9;15594:22;15573:53;:::i;:::-;15563:63;;15518:118;15675:3;15702:53;15747:7;15738:6;15727:9;15723:22;15702:53;:::i;:::-;15692:63;;15646:119;15804:3;15831:53;15876:7;15867:6;15856:9;15852:22;15831:53;:::i;:::-;15821:63;;15775:119;14844:1057;;;;;;;;:::o;15907:152::-;15983:9;16016:37;16047:5;16016:37;:::i;:::-;16003:50;;15907:152;;;:::o;16065:183::-;16178:63;16235:5;16178:63;:::i;:::-;16173:3;16166:76;16065:183;;:::o;16254:274::-;16373:4;16411:2;16400:9;16396:18;16388:26;;16424:97;16518:1;16507:9;16503:17;16494:6;16424:97;:::i;:::-;16254:274;;;;:::o;16534:180::-;16582:77;16579:1;16572:88;16679:4;16676:1;16669:15;16703:4;16700:1;16693:15;16720:320;16764:6;16801:1;16795:4;16791:12;16781:22;;16848:1;16842:4;16838:12;16869:18;16859:81;;16925:4;16917:6;16913:17;16903:27;;16859:81;16987:2;16979:6;16976:14;16956:18;16953:38;16950:84;;;17006:18;;:::i;:::-;16950:84;16771:269;16720:320;;;:::o;17046:182::-;17186:34;17182:1;17174:6;17170:14;17163:58;17046:182;:::o;17234:366::-;17376:3;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17473:93;17562:3;17473:93;:::i;:::-;17591:2;17586:3;17582:12;17575:19;;17234:366;;;:::o;17606:419::-;17772:4;17810:2;17799:9;17795:18;17787:26;;17859:9;17853:4;17849:20;17845:1;17834:9;17830:17;17823:47;17887:131;18013:4;17887:131;:::i;:::-;17879:139;;17606:419;;;:::o;18031:332::-;18152:4;18190:2;18179:9;18175:18;18167:26;;18203:71;18271:1;18260:9;18256:17;18247:6;18203:71;:::i;:::-;18284:72;18352:2;18341:9;18337:18;18328:6;18284:72;:::i;:::-;18031:332;;;;;:::o;18369:180::-;18417:77;18414:1;18407:88;18514:4;18511:1;18504:15;18538:4;18535:1;18528:15;18555:305;18595:3;18614:20;18632:1;18614:20;:::i;:::-;18609:25;;18648:20;18666:1;18648:20;:::i;:::-;18643:25;;18802:1;18734:66;18730:74;18727:1;18724:81;18721:107;;;18808:18;;:::i;:::-;18721:107;18852:1;18849;18845:9;18838:16;;18555:305;;;;:::o;18866:222::-;19006:34;19002:1;18994:6;18990:14;18983:58;19075:5;19070:2;19062:6;19058:15;19051:30;18866:222;:::o;19094:366::-;19236:3;19257:67;19321:2;19316:3;19257:67;:::i;:::-;19250:74;;19333:93;19422:3;19333:93;:::i;:::-;19451:2;19446:3;19442:12;19435:19;;19094:366;;;:::o;19466:419::-;19632:4;19670:2;19659:9;19655:18;19647:26;;19719:9;19713:4;19709:20;19705:1;19694:9;19690:17;19683:47;19747:131;19873:4;19747:131;:::i;:::-;19739:139;;19466:419;;;:::o;19891:176::-;20031:28;20027:1;20019:6;20015:14;20008:52;19891:176;:::o;20073:366::-;20215:3;20236:67;20300:2;20295:3;20236:67;:::i;:::-;20229:74;;20312:93;20401:3;20312:93;:::i;:::-;20430:2;20425:3;20421:12;20414:19;;20073:366;;;:::o;20445:419::-;20611:4;20649:2;20638:9;20634:18;20626:26;;20698:9;20692:4;20688:20;20684:1;20673:9;20669:17;20662:47;20726:131;20852:4;20726:131;:::i;:::-;20718:139;;20445:419;;;:::o;20870:178::-;21010:30;21006:1;20998:6;20994:14;20987:54;20870:178;:::o;21054:366::-;21196:3;21217:67;21281:2;21276:3;21217:67;:::i;:::-;21210:74;;21293:93;21382:3;21293:93;:::i;:::-;21411:2;21406:3;21402:12;21395:19;;21054:366;;;:::o;21426:419::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21679:9;21673:4;21669:20;21665:1;21654:9;21650:17;21643:47;21707:131;21833:4;21707:131;:::i;:::-;21699:139;;21426:419;;;:::o;21851:143::-;21908:5;21939:6;21933:13;21924:22;;21955:33;21982:5;21955:33;:::i;:::-;21851:143;;;;:::o;22000:351::-;22070:6;22119:2;22107:9;22098:7;22094:23;22090:32;22087:119;;;22125:79;;:::i;:::-;22087:119;22245:1;22270:64;22326:7;22317:6;22306:9;22302:22;22270:64;:::i;:::-;22260:74;;22216:128;22000:351;;;;:::o;22357:332::-;22478:4;22516:2;22505:9;22501:18;22493:26;;22529:71;22597:1;22586:9;22582:17;22573:6;22529:71;:::i;:::-;22610:72;22678:2;22667:9;22663:18;22654:6;22610:72;:::i;:::-;22357:332;;;;;:::o;22695:137::-;22749:5;22780:6;22774:13;22765:22;;22796:30;22820:5;22796:30;:::i;:::-;22695:137;;;;:::o;22838:345::-;22905:6;22954:2;22942:9;22933:7;22929:23;22925:32;22922:119;;;22960:79;;:::i;:::-;22922:119;23080:1;23105:61;23158:7;23149:6;23138:9;23134:22;23105:61;:::i;:::-;23095:71;;23051:125;22838:345;;;;:::o;23189:233::-;23329:34;23325:1;23317:6;23313:14;23306:58;23398:16;23393:2;23385:6;23381:15;23374:41;23189:233;:::o;23428:366::-;23570:3;23591:67;23655:2;23650:3;23591:67;:::i;:::-;23584:74;;23667:93;23756:3;23667:93;:::i;:::-;23785:2;23780:3;23776:12;23769:19;;23428:366;;;:::o;23800:419::-;23966:4;24004:2;23993:9;23989:18;23981:26;;24053:9;24047:4;24043:20;24039:1;24028:9;24024:17;24017:47;24081:131;24207:4;24081:131;:::i;:::-;24073:139;;23800:419;;;:::o;24225:102::-;24267:8;24314:5;24311:1;24307:13;24286:34;;24225:102;;;:::o;24333:848::-;24394:5;24401:4;24425:6;24416:15;;24449:5;24440:14;;24463:712;24484:1;24474:8;24471:15;24463:712;;;24579:4;24574:3;24570:14;24564:4;24561:24;24558:50;;;24588:18;;:::i;:::-;24558:50;24638:1;24628:8;24624:16;24621:451;;;25053:4;25046:5;25042:16;25033:25;;24621:451;25103:4;25097;25093:15;25085:23;;25133:32;25156:8;25133:32;:::i;:::-;25121:44;;24463:712;;;24333:848;;;;;;;:::o;25187:1073::-;25241:5;25432:8;25422:40;;25453:1;25444:10;;25455:5;;25422:40;25481:4;25471:36;;25498:1;25489:10;;25500:5;;25471:36;25567:4;25615:1;25610:27;;;;25651:1;25646:191;;;;25560:277;;25610:27;25628:1;25619:10;;25630:5;;;25646:191;25691:3;25681:8;25678:17;25675:43;;;25698:18;;:::i;:::-;25675:43;25747:8;25744:1;25740:16;25731:25;;25782:3;25775:5;25772:14;25769:40;;;25789:18;;:::i;:::-;25769:40;25822:5;;;25560:277;;25946:2;25936:8;25933:16;25927:3;25921:4;25918:13;25914:36;25896:2;25886:8;25883:16;25878:2;25872:4;25869:12;25865:35;25849:111;25846:246;;;26002:8;25996:4;25992:19;25983:28;;26037:3;26030:5;26027:14;26024:40;;;26044:18;;:::i;:::-;26024:40;26077:5;;25846:246;26117:42;26155:3;26145:8;26139:4;26136:1;26117:42;:::i;:::-;26102:57;;;;26191:4;26186:3;26182:14;26175:5;26172:25;26169:51;;;26200:18;;:::i;:::-;26169:51;26249:4;26242:5;26238:16;26229:25;;25187:1073;;;;;;:::o;26266:281::-;26324:5;26348:23;26366:4;26348:23;:::i;:::-;26340:31;;26392:25;26408:8;26392:25;:::i;:::-;26380:37;;26436:104;26473:66;26463:8;26457:4;26436:104;:::i;:::-;26427:113;;26266:281;;;;:::o;26553:348::-;26593:7;26616:20;26634:1;26616:20;:::i;:::-;26611:25;;26650:20;26668:1;26650:20;:::i;:::-;26645:25;;26838:1;26770:66;26766:74;26763:1;26760:81;26755:1;26748:9;26741:17;26737:105;26734:131;;;26845:18;;:::i;:::-;26734:131;26893:1;26890;26886:9;26875:20;;26553:348;;;;:::o;26907:177::-;27047:29;27043:1;27035:6;27031:14;27024:53;26907:177;:::o;27090:366::-;27232:3;27253:67;27317:2;27312:3;27253:67;:::i;:::-;27246:74;;27329:93;27418:3;27329:93;:::i;:::-;27447:2;27442:3;27438:12;27431:19;;27090:366;;;:::o;27462:419::-;27628:4;27666:2;27655:9;27651:18;27643:26;;27715:9;27709:4;27705:20;27701:1;27690:9;27686:17;27679:47;27743:131;27869:4;27743:131;:::i;:::-;27735:139;;27462:419;;;:::o;27887:180::-;27935:77;27932:1;27925:88;28032:4;28029:1;28022:15;28056:4;28053:1;28046:15;28073:233;28112:3;28135:24;28153:5;28135:24;:::i;:::-;28126:33;;28181:66;28174:5;28171:77;28168:103;;;28251:18;;:::i;:::-;28168:103;28298:1;28291:5;28287:13;28280:20;;28073:233;;;:::o;28312:224::-;28452:34;28448:1;28440:6;28436:14;28429:58;28521:7;28516:2;28508:6;28504:15;28497:32;28312:224;:::o;28542:366::-;28684:3;28705:67;28769:2;28764:3;28705:67;:::i;:::-;28698:74;;28781:93;28870:3;28781:93;:::i;:::-;28899:2;28894:3;28890:12;28883:19;;28542:366;;;:::o;28914:419::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:162::-;29479:14;29475:1;29467:6;29463:14;29456:38;29339:162;:::o;29507:366::-;29649:3;29670:67;29734:2;29729:3;29670:67;:::i;:::-;29663:74;;29746:93;29835:3;29746:93;:::i;:::-;29864:2;29859:3;29855:12;29848:19;;29507:366;;;:::o;29879:419::-;30045:4;30083:2;30072:9;30068:18;30060:26;;30132:9;30126:4;30122:20;30118:1;30107:9;30103:17;30096:47;30160:131;30286:4;30160:131;:::i;:::-;30152:139;;29879:419;;;:::o;30304:174::-;30444:26;30440:1;30432:6;30428:14;30421:50;30304:174;:::o;30484:366::-;30626:3;30647:67;30711:2;30706:3;30647:67;:::i;:::-;30640:74;;30723:93;30812:3;30723:93;:::i;:::-;30841:2;30836:3;30832:12;30825:19;;30484:366;;;:::o;30856:419::-;31022:4;31060:2;31049:9;31045:18;31037:26;;31109:9;31103:4;31099:20;31095:1;31084:9;31080:17;31073:47;31137:131;31263:4;31137:131;:::i;:::-;31129:139;;30856:419;;;:::o;31281:147::-;31382:11;31419:3;31404:18;;31281:147;;;;:::o;31434:114::-;;:::o;31554:398::-;31713:3;31734:83;31815:1;31810:3;31734:83;:::i;:::-;31727:90;;31826:93;31915:3;31826:93;:::i;:::-;31944:1;31939:3;31935:11;31928:18;;31554:398;;;:::o;31958:379::-;32142:3;32164:147;32307:3;32164:147;:::i;:::-;32157:154;;32328:3;32321:10;;31958:379;;;:::o;32343:223::-;32483:34;32479:1;32471:6;32467:14;32460:58;32552:6;32547:2;32539:6;32535:15;32528:31;32343:223;:::o;32572:366::-;32714:3;32735:67;32799:2;32794:3;32735:67;:::i;:::-;32728:74;;32811:93;32900:3;32811:93;:::i;:::-;32929:2;32924:3;32920:12;32913:19;;32572:366;;;:::o;32944:419::-;33110:4;33148:2;33137:9;33133:18;33125:26;;33197:9;33191:4;33187:20;33183:1;33172:9;33168:17;33161:47;33225:131;33351:4;33225:131;:::i;:::-;33217:139;;32944:419;;;:::o;33369:221::-;33509:34;33505:1;33497:6;33493:14;33486:58;33578:4;33573:2;33565:6;33561:15;33554:29;33369:221;:::o;33596:366::-;33738:3;33759:67;33823:2;33818:3;33759:67;:::i;:::-;33752:74;;33835:93;33924:3;33835:93;:::i;:::-;33953:2;33948:3;33944:12;33937:19;;33596:366;;;:::o;33968:419::-;34134:4;34172:2;34161:9;34157:18;34149:26;;34221:9;34215:4;34211:20;34207:1;34196:9;34192:17;34185:47;34249:131;34375:4;34249:131;:::i;:::-;34241:139;;33968:419;;;:::o;34393:179::-;34533:31;34529:1;34521:6;34517:14;34510:55;34393:179;:::o;34578:366::-;34720:3;34741:67;34805:2;34800:3;34741:67;:::i;:::-;34734:74;;34817:93;34906:3;34817:93;:::i;:::-;34935:2;34930:3;34926:12;34919:19;;34578:366;;;:::o;34950:419::-;35116:4;35154:2;35143:9;35139:18;35131:26;;35203:9;35197:4;35193:20;35189:1;35178:9;35174:17;35167:47;35231:131;35357:4;35231:131;:::i;:::-;35223:139;;34950:419;;;:::o;35375:168::-;35515:20;35511:1;35503:6;35499:14;35492:44;35375:168;:::o;35549:366::-;35691:3;35712:67;35776:2;35771:3;35712:67;:::i;:::-;35705:74;;35788:93;35877:3;35788:93;:::i;:::-;35906:2;35901:3;35897:12;35890:19;;35549:366;;;:::o;35921:419::-;36087:4;36125:2;36114:9;36110:18;36102:26;;36174:9;36168:4;36164:20;36160:1;36149:9;36145:17;36138:47;36202:131;36328:4;36202:131;:::i;:::-;36194:139;;35921:419;;;:::o;36346:152::-;36486:4;36482:1;36474:6;36470:14;36463:28;36346:152;:::o;36504:365::-;36646:3;36667:66;36731:1;36726:3;36667:66;:::i;:::-;36660:73;;36742:93;36831:3;36742:93;:::i;:::-;36860:2;36855:3;36851:12;36844:19;;36504:365;;;:::o;36875:419::-;37041:4;37079:2;37068:9;37064:18;37056:26;;37128:9;37122:4;37118:20;37114:1;37103:9;37099:17;37092:47;37156:131;37282:4;37156:131;:::i;:::-;37148:139;;36875:419;;;:::o;37300:156::-;37440:8;37436:1;37428:6;37424:14;37417:32;37300:156;:::o;37462:365::-;37604:3;37625:66;37689:1;37684:3;37625:66;:::i;:::-;37618:73;;37700:93;37789:3;37700:93;:::i;:::-;37818:2;37813:3;37809:12;37802:19;;37462:365;;;:::o;37833:419::-;37999:4;38037:2;38026:9;38022:18;38014:26;;38086:9;38080:4;38076:20;38072:1;38061:9;38057:17;38050:47;38114:131;38240:4;38114:131;:::i;:::-;38106:139;;37833:419;;;:::o;38258:191::-;38298:4;38318:20;38336:1;38318:20;:::i;:::-;38313:25;;38352:20;38370:1;38352:20;:::i;:::-;38347:25;;38391:1;38388;38385:8;38382:34;;;38396:18;;:::i;:::-;38382:34;38441:1;38438;38434:9;38426:17;;38258:191;;;;:::o;38455:143::-;38512:5;38543:6;38537:13;38528:22;;38559:33;38586:5;38559:33;:::i;:::-;38455:143;;;;:::o;38604:351::-;38674:6;38723:2;38711:9;38702:7;38698:23;38694:32;38691:119;;;38729:79;;:::i;:::-;38691:119;38849:1;38874:64;38930:7;38921:6;38910:9;38906:22;38874:64;:::i;:::-;38864:74;;38820:128;38604:351;;;;:::o;38961:85::-;39006:7;39035:5;39024:16;;38961:85;;;:::o;39052:158::-;39110:9;39143:61;39161:42;39170:32;39196:5;39170:32;:::i;:::-;39161:42;:::i;:::-;39143:61;:::i;:::-;39130:74;;39052:158;;;:::o;39216:147::-;39311:45;39350:5;39311:45;:::i;:::-;39306:3;39299:58;39216:147;;:::o;39369:114::-;39436:6;39470:5;39464:12;39454:22;;39369:114;;;:::o;39489:184::-;39588:11;39622:6;39617:3;39610:19;39662:4;39657:3;39653:14;39638:29;;39489:184;;;;:::o;39679:132::-;39746:4;39769:3;39761:11;;39799:4;39794:3;39790:14;39782:22;;39679:132;;;:::o;39817:108::-;39894:24;39912:5;39894:24;:::i;:::-;39889:3;39882:37;39817:108;;:::o;39931:179::-;40000:10;40021:46;40063:3;40055:6;40021:46;:::i;:::-;40099:4;40094:3;40090:14;40076:28;;39931:179;;;;:::o;40116:113::-;40186:4;40218;40213:3;40209:14;40201:22;;40116:113;;;:::o;40265:732::-;40384:3;40413:54;40461:5;40413:54;:::i;:::-;40483:86;40562:6;40557:3;40483:86;:::i;:::-;40476:93;;40593:56;40643:5;40593:56;:::i;:::-;40672:7;40703:1;40688:284;40713:6;40710:1;40707:13;40688:284;;;40789:6;40783:13;40816:63;40875:3;40860:13;40816:63;:::i;:::-;40809:70;;40902:60;40955:6;40902:60;:::i;:::-;40892:70;;40748:224;40735:1;40732;40728:9;40723:14;;40688:284;;;40692:14;40988:3;40981:10;;40389:608;;;40265:732;;;;:::o;41003:831::-;41266:4;41304:3;41293:9;41289:19;41281:27;;41318:71;41386:1;41375:9;41371:17;41362:6;41318:71;:::i;:::-;41399:80;41475:2;41464:9;41460:18;41451:6;41399:80;:::i;:::-;41526:9;41520:4;41516:20;41511:2;41500:9;41496:18;41489:48;41554:108;41657:4;41648:6;41554:108;:::i;:::-;41546:116;;41672:72;41740:2;41729:9;41725:18;41716:6;41672:72;:::i;:::-;41754:73;41822:3;41811:9;41807:19;41798:6;41754:73;:::i;:::-;41003:831;;;;;;;;:::o;41840:807::-;42089:4;42127:3;42116:9;42112:19;42104:27;;42141:71;42209:1;42198:9;42194:17;42185:6;42141:71;:::i;:::-;42222:72;42290:2;42279:9;42275:18;42266:6;42222:72;:::i;:::-;42304:80;42380:2;42369:9;42365:18;42356:6;42304:80;:::i;:::-;42394;42470:2;42459:9;42455:18;42446:6;42394:80;:::i;:::-;42484:73;42552:3;42541:9;42537:19;42528:6;42484:73;:::i;:::-;42567;42635:3;42624:9;42620:19;42611:6;42567:73;:::i;:::-;41840:807;;;;;;;;;:::o;42653:663::-;42741:6;42749;42757;42806:2;42794:9;42785:7;42781:23;42777:32;42774:119;;;42812:79;;:::i;:::-;42774:119;42932:1;42957:64;43013:7;43004:6;42993:9;42989:22;42957:64;:::i;:::-;42947:74;;42903:128;43070:2;43096:64;43152:7;43143:6;43132:9;43128:22;43096:64;:::i;:::-;43086:74;;43041:129;43209:2;43235:64;43291:7;43282:6;43271:9;43267:22;43235:64;:::i;:::-;43225:74;;43180:129;42653:663;;;;;:::o;43322:180::-;43370:77;43367:1;43360:88;43467:4;43464:1;43457:15;43491:4;43488:1;43481:15;43508:185;43548:1;43565:20;43583:1;43565:20;:::i;:::-;43560:25;;43599:20;43617:1;43599:20;:::i;:::-;43594:25;;43638:1;43628:35;;43643:18;;:::i;:::-;43628:35;43685:1;43682;43678:9;43673:14;;43508:185;;;;:::o
Swarm Source
ipfs://7df4c6e475c2c8833421ed4f85f6c997725a58dbb4ceb06e23420e78f93f69ed
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.