ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
2
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("Ownable: new owner is the zero address"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "Ownable: caller is not the owner"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ abstract contract ERC20 is IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 public constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 public constant TAX_RATE = 5; // 5% uint256 public constant LIQUIDITY_TAX = 25; // 2.5% uint256 public constant AIRDROP_TAX = 25; // 2.5% uint256 public constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens uint256 public constant MIN_TOKENS_FOR_PROCESS = 1000 * 10**18; // 1000 token minimum for both operations // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public immutable metropolisFactory; address public immutable sonicToken; address public liquidityPair; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Events event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount); event AirdropDistributed(uint256 amount, uint256 holdersCount); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { metropolisRouter = IMetropolisRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3); metropolisFactory = IMetropolisFactory(0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0); sonicToken = metropolisRouter.WETH(); // Mint all tokens to contract first _mint(address(this), TOTAL_SUPPLY); // Create pair liquidityPair = metropolisFactory.createPair(address(this), sonicToken); // Approve router for full supply _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._afterTokenTransfer(from, to, amount); } function _transfer( address from, address to, uint256 amount ) internal virtual override { if (from == owner() || to == owner()) { super._transfer(from, to, amount); _updateHolder(from); _updateHolder(to); } else { bool isSellOrBuy = to == liquidityPair || from == liquidityPair; if (isSellOrBuy) { uint256 totalTax = (amount * TAX_RATE) / 100; uint256 liquidityTax = (totalTax * LIQUIDITY_TAX) / 100; uint256 airdropTax = (totalTax * AIRDROP_TAX) / 100; uint256 transferAmount = amount - totalTax; // Transfer the tax to contract super._transfer(from, address(this), totalTax); // Transfer the remaining amount super._transfer(from, to, transferAmount); // Accumulate tokens for liquidity and airdrop _pendingLiquidityTokens += liquidityTax; _pendingAirdropTokens += airdropTax; // Process both when total accumulated tokens reach 1000 if ((_pendingLiquidityTokens + _pendingAirdropTokens) >= MIN_TOKENS_FOR_PROCESS && holders.length > 0) { _processLiquidityAndAirdrop(); } } else { super._transfer(from, to, amount); } _updateHolder(from); _updateHolder(to); } } function _updateHolder(address account) private { if (account != liquidityPair && account != address(this)) { uint256 balance = balanceOf(account); bool isCurrentlyHolder = isHolder[account]; if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) { isHolder[account] = true; holders.push(account); } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) { isHolder[account] = false; _removeHolder(account); } } } function _removeHolder(address account) private { for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } function _processLiquidityAndAirdrop() private { uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; uint256 totalTokens = tokensForLiquidity + tokensForAirdrop; // Convert all tokens to WETH first address[] memory path = new address[](2); path[0] = address(this); path[1] = metropolisRouter.WETH(); _approve(address(this), address(metropolisRouter), totalTokens); try metropolisRouter.swapExactTokensForTokens( totalTokens, 0, // minimum output amount path, address(this), block.timestamp ) { uint256 wethBalance = IERC20(metropolisRouter.WETH()).balanceOf(address(this)); if (wethBalance > 0) { // Calculate proportions uint256 wethForLiquidity = (wethBalance * tokensForLiquidity) / totalTokens; uint256 wethForAirdrop = wethBalance - wethForLiquidity; // Process liquidity first if (wethForLiquidity > 0) { _approve(address(this), address(metropolisRouter), tokensForLiquidity / 2); IERC20(metropolisRouter.WETH()).approve(address(metropolisRouter), wethForLiquidity); try metropolisRouter.addLiquidity( address(this), metropolisRouter.WETH(), tokensForLiquidity / 2, wethForLiquidity, 0, 0, address(this), block.timestamp ) { emit LiquidityAdded(tokensForLiquidity / 2, wethForLiquidity); } catch { _pendingLiquidityTokens = tokensForLiquidity; } } // Then process airdrop if (wethForAirdrop > 0 && holders.length > 0) { uint256 amountPerHolder = wethForAirdrop / holders.length; if (amountPerHolder > 0) { for (uint256 i = 0; i < holders.length && i < 100; i++) { try IERC20(metropolisRouter.WETH()).transfer(holders[i], amountPerHolder) { // Transfer successful } catch { continue; } } emit AirdropDistributed(wethForAirdrop, holders.length); } } } } catch { // If the swap fails, restore both pending amounts _pendingLiquidityTokens = tokensForLiquidity; _pendingAirdropTokens = tokensForAirdrop; } } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // Initial liquidity function (must be called by owner with ETH) function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner { require(msg.value > 0, "Must provide ETH for initial liquidity"); require(tokenAmount > 0, "Must provide token amount for initial liquidity"); // Transfer tokens from contract to owner first require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "Insufficient token balance in contract" ); _transfer(address(this), msg.sender, tokenAmount); // Approve router to spend tokens _approve(msg.sender, address(metropolisRouter), tokenAmount); // Add liquidity with minimal checks try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // No minimum token amount 0, // No minimum ETH amount msg.sender, // LP tokens will go to owner directly block.timestamp // Immediate execution ) { emit LiquidityAdded(tokenAmount, msg.value); } catch { // If failed, revert the approval and return tokens to contract _approve(msg.sender, address(metropolisRouter), 0); _transfer(msg.sender, address(this), tokenAmount); revert("Failed to add liquidity"); } // Return any unused ETH uint256 remainingETH = address(this).balance; if (remainingETH > 0) { payable(msg.sender).transfer(remainingETH); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "Invalid router address"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "Cannot rescue FARMER tokens"); IERC20(_token).transfer(owner(), _amount); } // Transfer tokens to owner function withdrawTokensToOwner(uint256 amount) external onlyOwner { require( IERC20(address(this)).balanceOf(address(this)) >= amount, "Insufficient balance" ); _transfer(address(this), msg.sender, amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"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":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AIRDROP_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_HOLDER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TOKENS_FOR_PROCESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801562000010575f80fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d0000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000a43565b508060049081620000a1919062000a43565b50505060016005819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001149062000bab565b60405180910390fd5b6200012e81620003b260201b60201c565b507395a7e403d7cf20f675ff9273d66e94d35ba49fa360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000236573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025c919062000c30565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002ab3069d3c21bcecceda10000006200047560201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a0516040518363ffffffff1660e01b8152600401620002ec92919062000c71565b6020604051808303815f875af115801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c30565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ac3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000620005da60201b60201c565b62000ec5565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000cea565b60405180910390fd5b620004f95f8383620007a560201b60201c565b8060025f8282546200050c919062000d37565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005bb919062000d82565b60405180910390a3620005d65f8383620007bd60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006429062000e11565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b39062000ea5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000798919062000d82565b60405180910390a3505050565b620007b8838383620007d560201b60201c565b505050565b620007d0838383620007da60201b60201c565b505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200085b57607f821691505b60208210810362000871576200087062000816565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000898565b620008e1868362000898565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200092b620009256200091f84620008f9565b62000902565b620008f9565b9050919050565b5f819050919050565b62000946836200090b565b6200095e620009558262000932565b848454620008a4565b825550505050565b5f90565b6200097462000966565b620009818184846200093b565b505050565b5b81811015620009a8576200099c5f826200096a565b60018101905062000987565b5050565b601f821115620009f757620009c18162000877565b620009cc8462000889565b81016020851015620009dc578190505b620009f4620009eb8562000889565b83018262000986565b50505b505050565b5f82821c905092915050565b5f62000a195f1984600802620009fc565b1980831691505092915050565b5f62000a33838362000a08565b9150826002028217905092915050565b62000a4e82620007df565b67ffffffffffffffff81111562000a6a5762000a69620007e9565b5b62000a76825462000843565b62000a83828285620009ac565b5f60209050601f83116001811462000ab9575f841562000aa4578287015190505b62000ab0858262000a26565b86555062000b1f565b601f19841662000ac98662000877565b5f5b8281101562000af25784890151825560018201915060208501945060208101905062000acb565b8683101562000b12578489015162000b0e601f89168262000a08565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62000b9360268362000b27565b915062000ba08262000b37565b604082019050919050565b5f6020820190508181035f83015262000bc48162000b85565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bfa8262000bcf565b9050919050565b62000c0c8162000bee565b811462000c17575f80fd5b50565b5f8151905062000c2a8162000c01565b92915050565b5f6020828403121562000c485762000c4762000bcb565b5b5f62000c578482850162000c1a565b91505092915050565b62000c6b8162000bee565b82525050565b5f60408201905062000c865f83018562000c60565b62000c95602083018462000c60565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000cd2601f8362000b27565b915062000cdf8262000c9c565b602082019050919050565b5f6020820190508181035f83015262000d038162000cc4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d4382620008f9565b915062000d5083620008f9565b925082820190508082111562000d6b5762000d6a62000d0a565b5b92915050565b62000d7c81620008f9565b82525050565b5f60208201905062000d975f83018462000d71565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000df960248362000b27565b915062000e068262000d9d565b604082019050919050565b5f6020820190508181035f83015262000e2a8162000deb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000e8d60228362000b27565b915062000e9a8262000e31565b604082019050919050565b5f6020820190508181035f83015262000ebe8162000e7f565b9050919050565b60805160a05161399a62000ee75f395f610bb201525f6111b5015261399a5ff3fe6080604052600436106101db575f3560e01c806379304bec11610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106ac578063dd62ed3e146106d6578063f2fde38b14610712578063fd7c9fab1461073a576101e2565b8063a9059cbb146105e2578063bc531dae1461061e578063c0d7865514610648578063d4d7b19a14610670576101e2565b80638da5cb5b116100d05780638da5cb5b1461053a578063902d55a51461056457806395a6e2541461058e57806395d89b41146105b8576101e2565b806379304bec14610494578063808a5457146104bc57806381f0549f146104e657806383f170be14610510576101e2565b806341a22cc2116101795780635fe8e7cc116101485780635fe8e7cc146103da57806362b6327a1461040457806370a082311461042e5780637136982b1461046a576101e2565b806341a22cc214610342578063461a3a951461035e57806357376198146103885780635d76b04c146103b0576101e2565b806318160ddd116101b557806318160ddd1461027657806323b872dd146102a05780632a11ced0146102dc578063313ce56714610318576101e2565b806306fdde03146101e657806308dee2b414610210578063095ea7b31461023a576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610764565b6040516102079190612748565b60405180910390f35b34801561021b575f80fd5b506102246107f4565b6040516102319190612780565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b919061282e565b6107fd565b60405161026d9190612886565b60405180910390f35b348015610281575f80fd5b5061028a610818565b6040516102979190612780565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c1919061289f565b610821565b6040516102d39190612886565b60405180910390f35b3480156102e7575f80fd5b5061030260048036038101906102fd91906128ef565b610848565b60405161030f9190612929565b60405180910390f35b348015610323575f80fd5b5061032c610883565b604051610339919061295d565b60405180910390f35b61035c600480360381019061035791906128ef565b61088b565b005b348015610369575f80fd5b50610372610bb0565b60405161037f9190612929565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a9919061282e565b610bd4565b005b3480156103bb575f80fd5b506103c4610cd1565b6040516103d19190612780565b60405180910390f35b3480156103e5575f80fd5b506103ee610cda565b6040516103fb9190612a2d565b60405180910390f35b34801561040f575f80fd5b50610418610d65565b6040516104259190612aa8565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612ac1565b610d8a565b6040516104619190612780565b60405180910390f35b348015610475575f80fd5b5061047e610dcf565b60405161048b9190612780565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b591906128ef565b610ddb565b005b3480156104c7575f80fd5b506104d0610eab565b6040516104dd9190612929565b60405180910390f35b3480156104f1575f80fd5b506104fa610ed0565b6040516105079190612780565b60405180910390f35b34801561051b575f80fd5b50610524610ed5565b6040516105319190612780565b60405180910390f35b348015610545575f80fd5b5061054e610eda565b60405161055b9190612929565b60405180910390f35b34801561056f575f80fd5b50610578610f02565b6040516105859190612780565b60405180910390f35b348015610599575f80fd5b506105a2610f10565b6040516105af9190612780565b60405180910390f35b3480156105c3575f80fd5b506105cc610f1d565b6040516105d99190612748565b60405180910390f35b3480156105ed575f80fd5b506106086004803603810190610603919061282e565b610fad565b6040516106159190612886565b60405180910390f35b348015610629575f80fd5b50610632610fc8565b60405161063f9190612780565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190612ac1565b610fcd565b005b34801561067b575f80fd5b5061069660048036038101906106919190612ac1565b611086565b6040516106a39190612886565b60405180910390f35b3480156106b7575f80fd5b506106c06110a3565b6040516106cd9190612780565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612aec565b6110af565b6040516107099190612780565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612ac1565b611131565b005b348015610745575f80fd5b5061074e6111b3565b60405161075b9190612b4a565b60405180910390f35b60606003805461077390612b90565b80601f016020809104026020016040519081016040528092919081815260200182805461079f90612b90565b80156107ea5780601f106107c1576101008083540402835291602001916107ea565b820191905f5260205f20905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061080d8185856111d7565b600191505092915050565b5f600254905090565b5f8033905061083185828561139a565b61083c858585611425565b60019150509392505050565b600a8181548110610857575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610893611680565b5f34116108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612c30565b60405180910390fd5b5f8111610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612cbe565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109519190612929565b602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190612cf0565b10156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890612d8b565b60405180910390fd5b6109dc303383611425565b610a083360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a6d96959493929190612de2565b60606040518083038185885af193505050508015610aa957506040513d601f19601f82011682018060405250810190610aa69190612e41565b60015b610b1f57610ad93360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6111d7565b610ae4333083611425565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690612edb565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b53929190612ef9565b60405180910390a15f4790505f811115610bac573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610baa573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bdc611680565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612f6a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c6e610eda565b836040518363ffffffff1660e01b8152600401610c8c929190612f88565b6020604051808303815f875af1158015610ca8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612fd9565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d5b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d12575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610de3611680565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1d9190612929565b602060405180830381865afa158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612cf0565b1015610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e949061304e565b60405180910390fd5b610ea8303383611425565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b683635c9adc5dea0000081565b606060048054610f2c90612b90565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5890612b90565b8015610fa35780601f10610f7a57610100808354040283529160200191610fa3565b820191905f5260205f20905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b5f80339050610fbd818585611425565b600191505092915050565b601981565b610fd5611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a906130b6565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611139611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613144565b60405180910390fd5b6111b0816116f7565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c906131d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613260565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161138d9190612780565b60405180910390a3505050565b5f6113a584846110af565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461141f5781811015611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906132c8565b60405180910390fd5b61141e84848484036111d7565b5b50505050565b61142d610eda565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114985750611469610eda565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156114bf576114a88383836117ba565b6114b183611a26565b6114ba82611a26565b61167b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611567575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561165b575f606460058461157f9190613313565b6115899190613381565b90505f606460198361159b9190613313565b6115a59190613381565b90505f60646019846115b79190613313565b6115c19190613381565b90505f83866115d091906133b1565b90506115dd8830866117ba565b6115e88888836117ba565b82600b5f8282546115f991906133e4565b9250508190555081600c5f82825461161191906133e4565b92505081905550683635c9adc5dea00000600c54600b5461163291906133e4565b1015801561164457505f600a80549050115b1561165257611651611c60565b5b50505050611667565b6116668484846117ba565b5b61167084611a26565b61167983611a26565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff1661169f610eda565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613461565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906134ef565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061357d565b60405180910390fd5b6118a1838383612511565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b9061360b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0d9190612780565b60405180910390a3611a20848484612521565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611aaf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611c5d575f611abe82610d8a565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e800008210158015611b23575080155b15611be257600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c5a565b678ac7230489e8000082108015611bf65750805b15611c59575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611c5883612531565b5b5b50505b50565b5f600b5490505f600c5490505f600b819055505f600c819055505f8183611c8791906133e4565b90505f600267ffffffffffffffff811115611ca557611ca4613629565b5b604051908082528060200260200182016040528015611cd35781602001602082028036833780820191505090505b50905030815f81518110611cea57611ce9613656565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db29190613697565b81600181518110611dc657611dc5613656565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e2c3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739835f8430426040518663ffffffff1660e01b8152600401611e8e9594939291906136c2565b5f604051808303815f875af1925050508015611ecc57506040513d5f823e3d601f19601f82011682018060405250810190611ec9919061382d565b60015b611ee35783600b8190555082600c8190555061250b565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f739190613697565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fab9190612929565b602060405180830381865afa158015611fc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fea9190612cf0565b90505f811115612509575f8386836120029190613313565b61200c9190613381565b90505f818361201b91906133b1565b90505f82111561231d5761205d3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028a6120589190613381565b6111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120eb9190613697565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612146929190612f88565b6020604051808303815f875af1158015612162573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121869190612fd9565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122539190613697565b60028b6122609190613381565b865f8030426040518963ffffffff1660e01b8152600401612288989796959493929190613874565b6060604051808303815f875af19250505080156122c357506040513d601f19601f820116820180604052508101906122c09190612e41565b60015b6122d35786600b8190555061231c565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6002886123049190613381565b83604051612313929190612ef9565b60405180910390a15b5b5f8111801561233057505f600a80549050115b15612506575f600a80549050826123479190613381565b90505f811115612504575f5b600a80549050811080156123675750606481105b156124c45760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123fa9190613697565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a838154811061242957612428613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161246f929190612f88565b6020604051808303815f875af19250505080156124aa57506040513d601f19601f820116820180604052508101906124a79190612fd9565b60015b156124b157505b80806124bc906138f0565b915050612353565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a805490506040516124fb929190612ef9565b60405180910390a15b505b50505b505b50505050565b61251c8383836126b4565b505050565b61252c8383836126b9565b505050565b5f5b600a805490508110156126b0578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061256b5761256a613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361269d57600a6001600a805490506125c291906133b1565b815481106125d3576125d2613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061260f5761260e613656565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80548061266657612665613937565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126b0565b80806126a8906138f0565b915050612533565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126f55780820151818401526020810190506126da565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61271a826126be565b61272481856126c8565b93506127348185602086016126d8565b61273d81612700565b840191505092915050565b5f6020820190508181035f8301526127608184612710565b905092915050565b5f819050919050565b61277a81612768565b82525050565b5f6020820190506127935f830184612771565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127d3826127aa565b9050919050565b6127e3816127c9565b81146127ed575f80fd5b50565b5f813590506127fe816127da565b92915050565b61280d81612768565b8114612817575f80fd5b50565b5f8135905061282881612804565b92915050565b5f8060408385031215612844576128436127a2565b5b5f612851858286016127f0565b92505060206128628582860161281a565b9150509250929050565b5f8115159050919050565b6128808161286c565b82525050565b5f6020820190506128995f830184612877565b92915050565b5f805f606084860312156128b6576128b56127a2565b5b5f6128c3868287016127f0565b93505060206128d4868287016127f0565b92505060406128e58682870161281a565b9150509250925092565b5f60208284031215612904576129036127a2565b5b5f6129118482850161281a565b91505092915050565b612923816127c9565b82525050565b5f60208201905061293c5f83018461291a565b92915050565b5f60ff82169050919050565b61295781612942565b82525050565b5f6020820190506129705f83018461294e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6129a8816127c9565b82525050565b5f6129b9838361299f565b60208301905092915050565b5f602082019050919050565b5f6129db82612976565b6129e58185612980565b93506129f083612990565b805f5b83811015612a20578151612a0788826129ae565b9750612a12836129c5565b9250506001810190506129f3565b5085935050505092915050565b5f6020820190508181035f830152612a4581846129d1565b905092915050565b5f819050919050565b5f612a70612a6b612a66846127aa565b612a4d565b6127aa565b9050919050565b5f612a8182612a56565b9050919050565b5f612a9282612a77565b9050919050565b612aa281612a88565b82525050565b5f602082019050612abb5f830184612a99565b92915050565b5f60208284031215612ad657612ad56127a2565b5b5f612ae3848285016127f0565b91505092915050565b5f8060408385031215612b0257612b016127a2565b5b5f612b0f858286016127f0565b9250506020612b20858286016127f0565b9150509250929050565b5f612b3482612a77565b9050919050565b612b4481612b2a565b82525050565b5f602082019050612b5d5f830184612b3b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ba757607f821691505b602082108103612bba57612bb9612b63565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612c1a6026836126c8565b9150612c2582612bc0565b604082019050919050565b5f6020820190508181035f830152612c4781612c0e565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612ca8602f836126c8565b9150612cb382612c4e565b604082019050919050565b5f6020820190508181035f830152612cd581612c9c565b9050919050565b5f81519050612cea81612804565b92915050565b5f60208284031215612d0557612d046127a2565b5b5f612d1284828501612cdc565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f612d756026836126c8565b9150612d8082612d1b565b604082019050919050565b5f6020820190508181035f830152612da281612d69565b9050919050565b5f819050919050565b5f612dcc612dc7612dc284612da9565b612a4d565b612768565b9050919050565b612ddc81612db2565b82525050565b5f60c082019050612df55f83018961291a565b612e026020830188612771565b612e0f6040830187612dd3565b612e1c6060830186612dd3565b612e29608083018561291a565b612e3660a0830184612771565b979650505050505050565b5f805f60608486031215612e5857612e576127a2565b5b5f612e6586828701612cdc565b9350506020612e7686828701612cdc565b9250506040612e8786828701612cdc565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f612ec56017836126c8565b9150612ed082612e91565b602082019050919050565b5f6020820190508181035f830152612ef281612eb9565b9050919050565b5f604082019050612f0c5f830185612771565b612f196020830184612771565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f612f54601b836126c8565b9150612f5f82612f20565b602082019050919050565b5f6020820190508181035f830152612f8181612f48565b9050919050565b5f604082019050612f9b5f83018561291a565b612fa86020830184612771565b9392505050565b612fb88161286c565b8114612fc2575f80fd5b50565b5f81519050612fd381612faf565b92915050565b5f60208284031215612fee57612fed6127a2565b5b5f612ffb84828501612fc5565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6130386014836126c8565b915061304382613004565b602082019050919050565b5f6020820190508181035f8301526130658161302c565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f6130a06016836126c8565b91506130ab8261306c565b602082019050919050565b5f6020820190508181035f8301526130cd81613094565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61312e6026836126c8565b9150613139826130d4565b604082019050919050565b5f6020820190508181035f83015261315b81613122565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131bc6024836126c8565b91506131c782613162565b604082019050919050565b5f6020820190508181035f8301526131e9816131b0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61324a6022836126c8565b9150613255826131f0565b604082019050919050565b5f6020820190508181035f8301526132778161323e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132b2601d836126c8565b91506132bd8261327e565b602082019050919050565b5f6020820190508181035f8301526132df816132a6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61331d82612768565b915061332883612768565b925082820261333681612768565b9150828204841483151761334d5761334c6132e6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61338b82612768565b915061339683612768565b9250826133a6576133a5613354565b5b828204905092915050565b5f6133bb82612768565b91506133c683612768565b92508282039050818111156133de576133dd6132e6565b5b92915050565b5f6133ee82612768565b91506133f983612768565b9250828201905080821115613411576134106132e6565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61344b6020836126c8565b915061345682613417565b602082019050919050565b5f6020820190508181035f8301526134788161343f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6134d96025836126c8565b91506134e48261347f565b604082019050919050565b5f6020820190508181035f830152613506816134cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135676023836126c8565b91506135728261350d565b604082019050919050565b5f6020820190508181035f8301526135948161355b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6135f56026836126c8565b91506136008261359b565b604082019050919050565b5f6020820190508181035f830152613622816135e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613691816127da565b92915050565b5f602082840312156136ac576136ab6127a2565b5b5f6136b984828501613683565b91505092915050565b5f60a0820190506136d55f830188612771565b6136e26020830187612dd3565b81810360408301526136f481866129d1565b9050613703606083018561291a565b6137106080830184612771565b9695505050505050565b5f80fd5b61372782612700565b810181811067ffffffffffffffff8211171561374657613745613629565b5b80604052505050565b5f613758612799565b9050613764828261371e565b919050565b5f67ffffffffffffffff82111561378357613782613629565b5b602082029050602081019050919050565b5f80fd5b5f6137aa6137a584613769565b61374f565b905080838252602082019050602084028301858111156137cd576137cc613794565b5b835b818110156137f657806137e28882612cdc565b8452602084019350506020810190506137cf565b5050509392505050565b5f82601f8301126138145761381361371a565b5b8151613824848260208601613798565b91505092915050565b5f60208284031215613842576138416127a2565b5b5f82015167ffffffffffffffff81111561385f5761385e6127a6565b5b61386b84828501613800565b91505092915050565b5f610100820190506138885f83018b61291a565b613895602083018a61291a565b6138a26040830189612771565b6138af6060830188612771565b6138bc6080830187612dd3565b6138c960a0830186612dd3565b6138d660c083018561291a565b6138e360e0830184612771565b9998505050505050505050565b5f6138fa82612768565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361392c5761392b6132e6565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212200a6600af74e829389c703ed86f06feb445432d792687ff9330934f1e48c95b4464736f6c63430008140033
Deployed Bytecode
0x6080604052600436106101db575f3560e01c806379304bec11610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106ac578063dd62ed3e146106d6578063f2fde38b14610712578063fd7c9fab1461073a576101e2565b8063a9059cbb146105e2578063bc531dae1461061e578063c0d7865514610648578063d4d7b19a14610670576101e2565b80638da5cb5b116100d05780638da5cb5b1461053a578063902d55a51461056457806395a6e2541461058e57806395d89b41146105b8576101e2565b806379304bec14610494578063808a5457146104bc57806381f0549f146104e657806383f170be14610510576101e2565b806341a22cc2116101795780635fe8e7cc116101485780635fe8e7cc146103da57806362b6327a1461040457806370a082311461042e5780637136982b1461046a576101e2565b806341a22cc214610342578063461a3a951461035e57806357376198146103885780635d76b04c146103b0576101e2565b806318160ddd116101b557806318160ddd1461027657806323b872dd146102a05780632a11ced0146102dc578063313ce56714610318576101e2565b806306fdde03146101e657806308dee2b414610210578063095ea7b31461023a576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610764565b6040516102079190612748565b60405180910390f35b34801561021b575f80fd5b506102246107f4565b6040516102319190612780565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b919061282e565b6107fd565b60405161026d9190612886565b60405180910390f35b348015610281575f80fd5b5061028a610818565b6040516102979190612780565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c1919061289f565b610821565b6040516102d39190612886565b60405180910390f35b3480156102e7575f80fd5b5061030260048036038101906102fd91906128ef565b610848565b60405161030f9190612929565b60405180910390f35b348015610323575f80fd5b5061032c610883565b604051610339919061295d565b60405180910390f35b61035c600480360381019061035791906128ef565b61088b565b005b348015610369575f80fd5b50610372610bb0565b60405161037f9190612929565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a9919061282e565b610bd4565b005b3480156103bb575f80fd5b506103c4610cd1565b6040516103d19190612780565b60405180910390f35b3480156103e5575f80fd5b506103ee610cda565b6040516103fb9190612a2d565b60405180910390f35b34801561040f575f80fd5b50610418610d65565b6040516104259190612aa8565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612ac1565b610d8a565b6040516104619190612780565b60405180910390f35b348015610475575f80fd5b5061047e610dcf565b60405161048b9190612780565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b591906128ef565b610ddb565b005b3480156104c7575f80fd5b506104d0610eab565b6040516104dd9190612929565b60405180910390f35b3480156104f1575f80fd5b506104fa610ed0565b6040516105079190612780565b60405180910390f35b34801561051b575f80fd5b50610524610ed5565b6040516105319190612780565b60405180910390f35b348015610545575f80fd5b5061054e610eda565b60405161055b9190612929565b60405180910390f35b34801561056f575f80fd5b50610578610f02565b6040516105859190612780565b60405180910390f35b348015610599575f80fd5b506105a2610f10565b6040516105af9190612780565b60405180910390f35b3480156105c3575f80fd5b506105cc610f1d565b6040516105d99190612748565b60405180910390f35b3480156105ed575f80fd5b506106086004803603810190610603919061282e565b610fad565b6040516106159190612886565b60405180910390f35b348015610629575f80fd5b50610632610fc8565b60405161063f9190612780565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190612ac1565b610fcd565b005b34801561067b575f80fd5b5061069660048036038101906106919190612ac1565b611086565b6040516106a39190612886565b60405180910390f35b3480156106b7575f80fd5b506106c06110a3565b6040516106cd9190612780565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612aec565b6110af565b6040516107099190612780565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612ac1565b611131565b005b348015610745575f80fd5b5061074e6111b3565b60405161075b9190612b4a565b60405180910390f35b60606003805461077390612b90565b80601f016020809104026020016040519081016040528092919081815260200182805461079f90612b90565b80156107ea5780601f106107c1576101008083540402835291602001916107ea565b820191905f5260205f20905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061080d8185856111d7565b600191505092915050565b5f600254905090565b5f8033905061083185828561139a565b61083c858585611425565b60019150509392505050565b600a8181548110610857575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610893611680565b5f34116108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612c30565b60405180910390fd5b5f8111610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612cbe565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109519190612929565b602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190612cf0565b10156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890612d8b565b60405180910390fd5b6109dc303383611425565b610a083360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a6d96959493929190612de2565b60606040518083038185885af193505050508015610aa957506040513d601f19601f82011682018060405250810190610aa69190612e41565b60015b610b1f57610ad93360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6111d7565b610ae4333083611425565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690612edb565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b53929190612ef9565b60405180910390a15f4790505f811115610bac573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610baa573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b610bdc611680565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612f6a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c6e610eda565b836040518363ffffffff1660e01b8152600401610c8c929190612f88565b6020604051808303815f875af1158015610ca8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612fd9565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d5b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d12575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610de3611680565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1d9190612929565b602060405180830381865afa158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612cf0565b1015610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e949061304e565b60405180910390fd5b610ea8303383611425565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b683635c9adc5dea0000081565b606060048054610f2c90612b90565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5890612b90565b8015610fa35780601f10610f7a57610100808354040283529160200191610fa3565b820191905f5260205f20905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b5f80339050610fbd818585611425565b600191505092915050565b601981565b610fd5611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a906130b6565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611139611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613144565b60405180910390fd5b6111b0816116f7565b50565b7f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c906131d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613260565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161138d9190612780565b60405180910390a3505050565b5f6113a584846110af565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461141f5781811015611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906132c8565b60405180910390fd5b61141e84848484036111d7565b5b50505050565b61142d610eda565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114985750611469610eda565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156114bf576114a88383836117ba565b6114b183611a26565b6114ba82611a26565b61167b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611567575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561165b575f606460058461157f9190613313565b6115899190613381565b90505f606460198361159b9190613313565b6115a59190613381565b90505f60646019846115b79190613313565b6115c19190613381565b90505f83866115d091906133b1565b90506115dd8830866117ba565b6115e88888836117ba565b82600b5f8282546115f991906133e4565b9250508190555081600c5f82825461161191906133e4565b92505081905550683635c9adc5dea00000600c54600b5461163291906133e4565b1015801561164457505f600a80549050115b1561165257611651611c60565b5b50505050611667565b6116668484846117ba565b5b61167084611a26565b61167983611a26565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff1661169f610eda565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613461565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906134ef565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061357d565b60405180910390fd5b6118a1838383612511565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b9061360b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0d9190612780565b60405180910390a3611a20848484612521565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611aaf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611c5d575f611abe82610d8a565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e800008210158015611b23575080155b15611be257600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c5a565b678ac7230489e8000082108015611bf65750805b15611c59575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611c5883612531565b5b5b50505b50565b5f600b5490505f600c5490505f600b819055505f600c819055505f8183611c8791906133e4565b90505f600267ffffffffffffffff811115611ca557611ca4613629565b5b604051908082528060200260200182016040528015611cd35781602001602082028036833780820191505090505b50905030815f81518110611cea57611ce9613656565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db29190613697565b81600181518110611dc657611dc5613656565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e2c3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739835f8430426040518663ffffffff1660e01b8152600401611e8e9594939291906136c2565b5f604051808303815f875af1925050508015611ecc57506040513d5f823e3d601f19601f82011682018060405250810190611ec9919061382d565b60015b611ee35783600b8190555082600c8190555061250b565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f739190613697565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fab9190612929565b602060405180830381865afa158015611fc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fea9190612cf0565b90505f811115612509575f8386836120029190613313565b61200c9190613381565b90505f818361201b91906133b1565b90505f82111561231d5761205d3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028a6120589190613381565b6111d7565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120eb9190613697565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612146929190612f88565b6020604051808303815f875af1158015612162573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121869190612fd9565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122539190613697565b60028b6122609190613381565b865f8030426040518963ffffffff1660e01b8152600401612288989796959493929190613874565b6060604051808303815f875af19250505080156122c357506040513d601f19601f820116820180604052508101906122c09190612e41565b60015b6122d35786600b8190555061231c565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6002886123049190613381565b83604051612313929190612ef9565b60405180910390a15b5b5f8111801561233057505f600a80549050115b15612506575f600a80549050826123479190613381565b90505f811115612504575f5b600a80549050811080156123675750606481105b156124c45760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123fa9190613697565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a838154811061242957612428613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161246f929190612f88565b6020604051808303815f875af19250505080156124aa57506040513d601f19601f820116820180604052508101906124a79190612fd9565b60015b156124b157505b80806124bc906138f0565b915050612353565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a805490506040516124fb929190612ef9565b60405180910390a15b505b50505b505b50505050565b61251c8383836126b4565b505050565b61252c8383836126b9565b505050565b5f5b600a805490508110156126b0578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061256b5761256a613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361269d57600a6001600a805490506125c291906133b1565b815481106125d3576125d2613656565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061260f5761260e613656565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80548061266657612665613937565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126b0565b80806126a8906138f0565b915050612533565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126f55780820151818401526020810190506126da565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61271a826126be565b61272481856126c8565b93506127348185602086016126d8565b61273d81612700565b840191505092915050565b5f6020820190508181035f8301526127608184612710565b905092915050565b5f819050919050565b61277a81612768565b82525050565b5f6020820190506127935f830184612771565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127d3826127aa565b9050919050565b6127e3816127c9565b81146127ed575f80fd5b50565b5f813590506127fe816127da565b92915050565b61280d81612768565b8114612817575f80fd5b50565b5f8135905061282881612804565b92915050565b5f8060408385031215612844576128436127a2565b5b5f612851858286016127f0565b92505060206128628582860161281a565b9150509250929050565b5f8115159050919050565b6128808161286c565b82525050565b5f6020820190506128995f830184612877565b92915050565b5f805f606084860312156128b6576128b56127a2565b5b5f6128c3868287016127f0565b93505060206128d4868287016127f0565b92505060406128e58682870161281a565b9150509250925092565b5f60208284031215612904576129036127a2565b5b5f6129118482850161281a565b91505092915050565b612923816127c9565b82525050565b5f60208201905061293c5f83018461291a565b92915050565b5f60ff82169050919050565b61295781612942565b82525050565b5f6020820190506129705f83018461294e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6129a8816127c9565b82525050565b5f6129b9838361299f565b60208301905092915050565b5f602082019050919050565b5f6129db82612976565b6129e58185612980565b93506129f083612990565b805f5b83811015612a20578151612a0788826129ae565b9750612a12836129c5565b9250506001810190506129f3565b5085935050505092915050565b5f6020820190508181035f830152612a4581846129d1565b905092915050565b5f819050919050565b5f612a70612a6b612a66846127aa565b612a4d565b6127aa565b9050919050565b5f612a8182612a56565b9050919050565b5f612a9282612a77565b9050919050565b612aa281612a88565b82525050565b5f602082019050612abb5f830184612a99565b92915050565b5f60208284031215612ad657612ad56127a2565b5b5f612ae3848285016127f0565b91505092915050565b5f8060408385031215612b0257612b016127a2565b5b5f612b0f858286016127f0565b9250506020612b20858286016127f0565b9150509250929050565b5f612b3482612a77565b9050919050565b612b4481612b2a565b82525050565b5f602082019050612b5d5f830184612b3b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ba757607f821691505b602082108103612bba57612bb9612b63565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612c1a6026836126c8565b9150612c2582612bc0565b604082019050919050565b5f6020820190508181035f830152612c4781612c0e565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612ca8602f836126c8565b9150612cb382612c4e565b604082019050919050565b5f6020820190508181035f830152612cd581612c9c565b9050919050565b5f81519050612cea81612804565b92915050565b5f60208284031215612d0557612d046127a2565b5b5f612d1284828501612cdc565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f612d756026836126c8565b9150612d8082612d1b565b604082019050919050565b5f6020820190508181035f830152612da281612d69565b9050919050565b5f819050919050565b5f612dcc612dc7612dc284612da9565b612a4d565b612768565b9050919050565b612ddc81612db2565b82525050565b5f60c082019050612df55f83018961291a565b612e026020830188612771565b612e0f6040830187612dd3565b612e1c6060830186612dd3565b612e29608083018561291a565b612e3660a0830184612771565b979650505050505050565b5f805f60608486031215612e5857612e576127a2565b5b5f612e6586828701612cdc565b9350506020612e7686828701612cdc565b9250506040612e8786828701612cdc565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f612ec56017836126c8565b9150612ed082612e91565b602082019050919050565b5f6020820190508181035f830152612ef281612eb9565b9050919050565b5f604082019050612f0c5f830185612771565b612f196020830184612771565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f612f54601b836126c8565b9150612f5f82612f20565b602082019050919050565b5f6020820190508181035f830152612f8181612f48565b9050919050565b5f604082019050612f9b5f83018561291a565b612fa86020830184612771565b9392505050565b612fb88161286c565b8114612fc2575f80fd5b50565b5f81519050612fd381612faf565b92915050565b5f60208284031215612fee57612fed6127a2565b5b5f612ffb84828501612fc5565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6130386014836126c8565b915061304382613004565b602082019050919050565b5f6020820190508181035f8301526130658161302c565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f6130a06016836126c8565b91506130ab8261306c565b602082019050919050565b5f6020820190508181035f8301526130cd81613094565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61312e6026836126c8565b9150613139826130d4565b604082019050919050565b5f6020820190508181035f83015261315b81613122565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131bc6024836126c8565b91506131c782613162565b604082019050919050565b5f6020820190508181035f8301526131e9816131b0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61324a6022836126c8565b9150613255826131f0565b604082019050919050565b5f6020820190508181035f8301526132778161323e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132b2601d836126c8565b91506132bd8261327e565b602082019050919050565b5f6020820190508181035f8301526132df816132a6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61331d82612768565b915061332883612768565b925082820261333681612768565b9150828204841483151761334d5761334c6132e6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61338b82612768565b915061339683612768565b9250826133a6576133a5613354565b5b828204905092915050565b5f6133bb82612768565b91506133c683612768565b92508282039050818111156133de576133dd6132e6565b5b92915050565b5f6133ee82612768565b91506133f983612768565b9250828201905080821115613411576134106132e6565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61344b6020836126c8565b915061345682613417565b602082019050919050565b5f6020820190508181035f8301526134788161343f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6134d96025836126c8565b91506134e48261347f565b604082019050919050565b5f6020820190508181035f830152613506816134cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135676023836126c8565b91506135728261350d565b604082019050919050565b5f6020820190508181035f8301526135948161355b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6135f56026836126c8565b91506136008261359b565b604082019050919050565b5f6020820190508181035f830152613622816135e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613691816127da565b92915050565b5f602082840312156136ac576136ab6127a2565b5b5f6136b984828501613683565b91505092915050565b5f60a0820190506136d55f830188612771565b6136e26020830187612dd3565b81810360408301526136f481866129d1565b9050613703606083018561291a565b6137106080830184612771565b9695505050505050565b5f80fd5b61372782612700565b810181811067ffffffffffffffff8211171561374657613745613629565b5b80604052505050565b5f613758612799565b9050613764828261371e565b919050565b5f67ffffffffffffffff82111561378357613782613629565b5b602082029050602081019050919050565b5f80fd5b5f6137aa6137a584613769565b61374f565b905080838252602082019050602084028301858111156137cd576137cc613794565b5b835b818110156137f657806137e28882612cdc565b8452602084019350506020810190506137cf565b5050509392505050565b5f82601f8301126138145761381361371a565b5b8151613824848260208601613798565b91505092915050565b5f60208284031215613842576138416127a2565b5b5f82015167ffffffffffffffff81111561385f5761385e6127a6565b5b61386b84828501613800565b91505092915050565b5f610100820190506138885f83018b61291a565b613895602083018a61291a565b6138a26040830189612771565b6138af6060830188612771565b6138bc6080830187612dd3565b6138c960a0830186612dd3565b6138d660c083018561291a565b6138e360e0830184612771565b9998505050505050505050565b5f6138fa82612768565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361392c5761392b6132e6565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212200a6600af74e829389c703ed86f06feb445432d792687ff9330934f1e48c95b4464736f6c63430008140033
Deployed Bytecode Sourcemap
7514:10678:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17912:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3807:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3234:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4005:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8294:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15551:1593;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8144:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17346:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18038:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15377:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8036:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15267:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17595:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8186:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7703:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7654:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7890:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3039:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3467:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7760:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17152:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8247:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7815:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3657:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2086:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8084:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2940:91;2985:13;3018:5;3011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;:::o;17912:118::-;17972:7;17999:23;;17992:30;;17912:118;:::o;3807:190::-;3881:4;3898:13;3914:10;3898:26;;3935:32;3944:5;3951:7;3960:6;3935:8;:32::i;:::-;3985:4;3978:11;;;3807:190;;;;:::o;3234:99::-;3286:7;3313:12;;3306:19;;3234:99;:::o;4005:250::-;4093:4;4110:15;4128:10;4110:28;;4149:38;4165:4;4171:7;4180:6;4149:15;:38::i;:::-;4198:27;4208:4;4214:2;4218:6;4198:9;:27::i;:::-;4243:4;4236:11;;;4005:250;;;;;:::o;8294:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3142:84::-;3191:5;3216:2;3209:9;;3142:84;:::o;15551:1593::-;1812:13;:11;:13::i;:::-;15659:1:::1;15647:9;:13;15639:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15736:1;15722:11;:15;15714:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;15939:11;15904:4;15889:31;;;15929:4;15889:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;15867:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;16027:49;16045:4;16052:10;16064:11;16027:9;:49::i;:::-;16132:60;16141:10;16161:16;;;;;;;;;;;16180:11;16132:8;:60::i;:::-;16255:16;;;;;;;;;;;:32;;;16295:9;16328:4;16348:11;16374:1;16430::::0;16484:10:::1;16552:15;16255:346;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16251:694;;16771:50;16780:10;16800:16;;;;;;;;;;;16819:1;16771:8;:50::i;:::-;16836:49;16846:10;16866:4;16873:11;16836:9;:49::i;:::-;16900:33;;;;;;;;;;:::i;:::-;;;;;;;;16251:694;;;;16622:38;16637:11;16650:9;16622:38;;;;;;;:::i;:::-;;;;;;;;16991:20;17014:21;16991:44;;17065:1;17050:12;:16;17046:91;;;17091:10;17083:28;;:42;17112:12;17083:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17046:91;15628:1516;15551:1593:::0;:::o;8144:35::-;;;:::o;17346:208::-;1812:13;:11;:13::i;:::-;17457:4:::1;17439:23;;:6;:23;;::::0;17431:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17512:6;17505:23;;;17529:7;:5;:7::i;:::-;17538;17505:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17346:208:::0;;:::o;18038:114::-;18096:7;18123:21;;18116:28;;18038:114;:::o;15377:96::-;15422:16;15458:7;15451:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15377:96;:::o;8036:41::-;;;;;;;;;;;;;:::o;3341:118::-;3406:7;3433:9;:18;3443:7;3433:18;;;;;;;;;;;;;;;;3426:25;;3341:118;;;:::o;15267:98::-;15316:7;15343;:14;;;;15336:21;;15267:98;:::o;17595:266::-;1812:13;:11;:13::i;:::-;17744:6:::1;17709:4;17694:31;;;17734:4;17694:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;17672:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;17809:44;17827:4;17834:10;17846:6;17809:9;:44::i;:::-;17595:266:::0;:::o;8186:28::-;;;;;;;;;;;;;:::o;7703:42::-;7743:2;7703:42;:::o;7654:36::-;7689:1;7654:36;:::o;1853:87::-;1899:7;1926:6;;;;;;;;;;;1919:13;;1853:87;:::o;7590:57::-;7629:18;7590:57;:::o;7890:62::-;7939:13;7890:62;:::o;3039:95::-;3086:13;3119:7;3112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:95;:::o;3467:182::-;3537:4;3554:13;3570:10;3554:26;;3591:28;3601:5;3608:2;3612:6;3591:9;:28::i;:::-;3637:4;3630:11;;;3467:182;;;;:::o;7760:40::-;7798:2;7760:40;:::o;17152:186::-;1812:13;:11;:13::i;:::-;17245:1:::1;17226:21;;:7;:21;;::::0;17218:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17322:7;17285:16;;:45;;;;;;;;;;;;;;;;;;17152:186:::0;:::o;8247:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;7815:55::-;7859:11;7815:55;:::o;3657:142::-;3737:7;3764:11;:18;3776:5;3764:18;;;;;;;;;;;;;;;:27;3783:7;3764:27;;;;;;;;;;;;;;;;3757:34;;3657:142;;;;:::o;2086:201::-;1812:13;:11;:13::i;:::-;2195:1:::1;2175:22;;:8;:22;;::::0;2167:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2251:28;2270:8;2251:18;:28::i;:::-;2086:201:::0;:::o;8084:53::-;;;:::o;5341:344::-;5460:1;5443:19;;:5;:19;;;5435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5541:1;5522:21;;:7;:21;;;5514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5623:6;5593:11;:18;5605:5;5593:18;;;;;;;;;;;;;;;:27;5612:7;5593:27;;;;;;;;;;;;;;;:36;;;;5661:7;5645:32;;5654:5;5645:32;;;5670:6;5645:32;;;;;;:::i;:::-;;;;;;;;5341:344;;;:::o;5693:419::-;5794:24;5821:25;5831:5;5838:7;5821:9;:25::i;:::-;5794:52;;5881:17;5861:16;:37;5857:248;;5943:6;5923:16;:26;;5915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6027:51;6036:5;6043:7;6071:6;6052:16;:25;6027:8;:51::i;:::-;5857:248;5783:329;5693:419;;;:::o;9620:1593::-;9764:7;:5;:7::i;:::-;9756:15;;:4;:15;;;:32;;;;9781:7;:5;:7::i;:::-;9775:13;;:2;:13;;;9756:32;9752:1454;;;9805:33;9821:4;9827:2;9831:6;9805:15;:33::i;:::-;9853:19;9867:4;9853:13;:19::i;:::-;9887:17;9901:2;9887:13;:17::i;:::-;9752:1454;;;9937:16;9962:13;;;;;;;;;;;9956:19;;:2;:19;;;:44;;;;9987:13;;;;;;;;;;;9979:21;;:4;:21;;;9956:44;9937:63;;10033:11;10029:1086;;;10065:16;10106:3;7689:1;10085:6;:17;;;;:::i;:::-;10084:25;;;;:::i;:::-;10065:44;;10128:20;10180:3;7743:2;10152:8;:24;;;;:::i;:::-;10151:32;;;;:::i;:::-;10128:55;;10202:18;10250:3;7798:2;10224:8;:22;;;;:::i;:::-;10223:30;;;;:::i;:::-;10202:51;;10272:22;10306:8;10297:6;:17;;;;:::i;:::-;10272:42;;10400:46;10416:4;10430;10437:8;10400:15;:46::i;:::-;10515:41;10531:4;10537:2;10541:14;10515:15;:41::i;:::-;10668:12;10641:23;;:39;;;;;;;:::i;:::-;;;;;;;;10724:10;10699:21;;:35;;;;;;;:::i;:::-;;;;;;;;7939:13;10860:21;;10834:23;;:47;;;;:::i;:::-;10833:75;;:119;;;;;10951:1;10934:7;:14;;;;:18;10833:119;10829:197;;;10977:29;:27;:29::i;:::-;10829:197;10046:995;;;;10029:1086;;;11066:33;11082:4;11088:2;11092:6;11066:15;:33::i;:::-;10029:1086;11143:19;11157:4;11143:13;:19::i;:::-;11177:17;11191:2;11177:13;:17::i;:::-;9922:1284;9752:1454;9620:1593;;;:::o;1948:130::-;2023:10;2012:21;;:7;:5;:7::i;:::-;:21;;;2004:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:130::o;2295:191::-;2369:16;2388:6;;;;;;;;;;;2369:25;;2414:8;2405:6;;:17;;;;;;;;;;;;;;;;;;2469:8;2438:40;;2459:8;2438:40;;;;;;;;;;;;2358:128;2295:191;:::o;4263:633::-;4376:1;4360:18;;:4;:18;;;4352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4453:1;4439:16;;:2;:16;;;4431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4506:38;4527:4;4533:2;4537:6;4506:20;:38::i;:::-;4555:19;4577:9;:15;4587:4;4577:15;;;;;;;;;;;;;;;;4555:37;;4626:6;4611:11;:21;;4603:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4743:6;4729:11;:20;4711:9;:15;4721:4;4711:15;;;;;;;;;;;;;;;:38;;;;4781:6;4764:9;:13;4774:2;4764:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4829:2;4814:26;;4823:4;4814:26;;;4833:6;4814:26;;;;;;:::i;:::-;;;;;;;;4851:37;4871:4;4877:2;4881:6;4851:19;:37::i;:::-;4341:555;4263:633;;;:::o;11221:588::-;11295:13;;;;;;;;;;;11284:24;;:7;:24;;;;:52;;;;;11331:4;11312:24;;:7;:24;;;;11284:52;11280:522;;;11353:15;11371:18;11381:7;11371:9;:18::i;:::-;11353:36;;11404:22;11429:8;:17;11438:7;11429:17;;;;;;;;;;;;;;;;;;;;;;;;;11404:42;;7859:11;11479:7;:28;;:50;;;;;11512:17;11511:18;11479:50;11475:316;;;11570:4;11550:8;:17;11559:7;11550:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11593:7;11606;11593:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:316;;;7859:11;11640:7;:27;:48;;;;;11671:17;11640:48;11636:155;;;11729:5;11709:8;:17;11718:7;11709:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;11753:22;11767:7;11753:13;:22::i;:::-;11636:155;11475:316;11338:464;;11280:522;11221:588;:::o;12120:3116::-;12178:26;12207:23;;12178:52;;12241:24;12268:21;;12241:48;;12326:1;12300:23;:27;;;;12362:1;12338:21;:25;;;;12376:19;12419:16;12398:18;:37;;;;:::i;:::-;12376:59;;12501:21;12539:1;12525:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12501:40;;12570:4;12552;12557:1;12552:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12596:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12586:4;12591:1;12586:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;12640:63;12657:4;12672:16;;;;;;;;;;;12691:11;12640:8;:63::i;:::-;12728:16;;;;;;;;;;;:41;;;12784:11;12810:1;12851:4;12878;12898:15;12728:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12724:2505;;15144:18;15118:23;:44;;;;15201:16;15177:21;:40;;;;12724:2505;;;;12940:19;12969:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12962:41;;;13012:4;12962:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12940:78;;13051:1;13037:11;:15;13033:1988;;;13115:24;13179:11;13157:18;13143:11;:32;;;;:::i;:::-;13142:48;;;;:::i;:::-;13115:75;;13209:22;13248:16;13234:11;:30;;;;:::i;:::-;13209:55;;13352:1;13333:16;:20;13329:885;;;13378:74;13395:4;13410:16;;;;;;;;;;;13450:1;13429:18;:22;;;;:::i;:::-;13378:8;:74::i;:::-;13482:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13475:39;;;13523:16;;;;;;;;;;;13542;13475:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13608:16;;;;;;;;;;;:29;;;13672:4;13704:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13775:1;13754:18;:22;;;;:::i;:::-;13803:16;13846:1;13874;13910:4;13942:15;13608:372;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13604:591;;14153:18;14127:23;:44;;;;13604:591;;;;;;14013:56;14049:1;14028:18;:22;;;;:::i;:::-;14052:16;14013:56;;;;;;;:::i;:::-;;;;;;;;13604:591;13329:885;14296:1;14279:14;:18;:40;;;;;14318:1;14301:7;:14;;;;:18;14279:40;14275:731;;;14344:23;14387:7;:14;;;;14370;:31;;;;:::i;:::-;14344:57;;14468:1;14450:15;:19;14446:541;;;14503:9;14498:358;14522:7;:14;;;;14518:1;:18;:29;;;;;14544:3;14540:1;:7;14518:29;14498:358;;;14596:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14589:40;;;14630:7;14638:1;14630:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14642:15;14589:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14585:244;14789:8;14585:244;;14498:358;14549:3;;;;;:::i;:::-;;;;14498:358;;;;14913:50;14932:14;14948:7;:14;;;;14913:50;;;;;;;:::i;:::-;;;;;;;;14446:541;14321:685;14275:731;13054:1967;;13033:1988;12925:2107;12724:2505;12167:3069;;;;12120:3116::o;9216:195::-;9359:44;9386:4;9392:2;9396:6;9359:26;:44::i;:::-;9216:195;;;:::o;9419:193::-;9561:43;9587:4;9593:2;9597:6;9561:25;:43::i;:::-;9419:193;;;:::o;11817:295::-;11881:9;11876:229;11900:7;:14;;;;11896:1;:18;11876:229;;;11954:7;11940:21;;:7;11948:1;11940:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;11936:158;;11995:7;12020:1;12003:7;:14;;;;:18;;;;:::i;:::-;11995:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11982:7;11990:1;11982:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;12041:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:5;;11936:158;11916:3;;;;;:::i;:::-;;;;11876:229;;;;11817:295;:::o;6120:91::-;;;;:::o;6219:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:114::-;5607:6;5641:5;5635:12;5625:22;;5540:114;;;:::o;5660:184::-;5759:11;5793:6;5788:3;5781:19;5833:4;5828:3;5824:14;5809:29;;5660:184;;;;:::o;5850:132::-;5917:4;5940:3;5932:11;;5970:4;5965:3;5961:14;5953:22;;5850:132;;;:::o;5988:108::-;6065:24;6083:5;6065:24;:::i;:::-;6060:3;6053:37;5988:108;;:::o;6102:179::-;6171:10;6192:46;6234:3;6226:6;6192:46;:::i;:::-;6270:4;6265:3;6261:14;6247:28;;6102:179;;;;:::o;6287:113::-;6357:4;6389;6384:3;6380:14;6372:22;;6287:113;;;:::o;6436:732::-;6555:3;6584:54;6632:5;6584:54;:::i;:::-;6654:86;6733:6;6728:3;6654:86;:::i;:::-;6647:93;;6764:56;6814:5;6764:56;:::i;:::-;6843:7;6874:1;6859:284;6884:6;6881:1;6878:13;6859:284;;;6960:6;6954:13;6987:63;7046:3;7031:13;6987:63;:::i;:::-;6980:70;;7073:60;7126:6;7073:60;:::i;:::-;7063:70;;6919:224;6906:1;6903;6899:9;6894:14;;6859:284;;;6863:14;7159:3;7152:10;;6560:608;;;6436:732;;;;:::o;7174:373::-;7317:4;7355:2;7344:9;7340:18;7332:26;;7404:9;7398:4;7394:20;7390:1;7379:9;7375:17;7368:47;7432:108;7535:4;7526:6;7432:108;:::i;:::-;7424:116;;7174:373;;;;:::o;7553:60::-;7581:3;7602:5;7595:12;;7553:60;;;:::o;7619:142::-;7669:9;7702:53;7720:34;7729:24;7747:5;7729:24;:::i;:::-;7720:34;:::i;:::-;7702:53;:::i;:::-;7689:66;;7619:142;;;:::o;7767:126::-;7817:9;7850:37;7881:5;7850:37;:::i;:::-;7837:50;;7767:126;;;:::o;7899:151::-;7974:9;8007:37;8038:5;8007:37;:::i;:::-;7994:50;;7899:151;;;:::o;8056:181::-;8168:62;8224:5;8168:62;:::i;:::-;8163:3;8156:75;8056:181;;:::o;8243:272::-;8361:4;8399:2;8388:9;8384:18;8376:26;;8412:96;8505:1;8494:9;8490:17;8481:6;8412:96;:::i;:::-;8243:272;;;;:::o;8521:329::-;8580:6;8629:2;8617:9;8608:7;8604:23;8600:32;8597:119;;;8635:79;;:::i;:::-;8597:119;8755:1;8780:53;8825:7;8816:6;8805:9;8801:22;8780:53;:::i;:::-;8770:63;;8726:117;8521:329;;;;:::o;8856:474::-;8924:6;8932;8981:2;8969:9;8960:7;8956:23;8952:32;8949:119;;;8987:79;;:::i;:::-;8949:119;9107:1;9132:53;9177:7;9168:6;9157:9;9153:22;9132:53;:::i;:::-;9122:63;;9078:117;9234:2;9260:53;9305:7;9296:6;9285:9;9281:22;9260:53;:::i;:::-;9250:63;;9205:118;8856:474;;;;;:::o;9336:152::-;9412:9;9445:37;9476:5;9445:37;:::i;:::-;9432:50;;9336:152;;;:::o;9494:183::-;9607:63;9664:5;9607:63;:::i;:::-;9602:3;9595:76;9494:183;;:::o;9683:274::-;9802:4;9840:2;9829:9;9825:18;9817:26;;9853:97;9947:1;9936:9;9932:17;9923:6;9853:97;:::i;:::-;9683:274;;;;:::o;9963:180::-;10011:77;10008:1;10001:88;10108:4;10105:1;10098:15;10132:4;10129:1;10122:15;10149:320;10193:6;10230:1;10224:4;10220:12;10210:22;;10277:1;10271:4;10267:12;10298:18;10288:81;;10354:4;10346:6;10342:17;10332:27;;10288:81;10416:2;10408:6;10405:14;10385:18;10382:38;10379:84;;10435:18;;:::i;:::-;10379:84;10200:269;10149:320;;;:::o;10475:225::-;10615:34;10611:1;10603:6;10599:14;10592:58;10684:8;10679:2;10671:6;10667:15;10660:33;10475:225;:::o;10706:366::-;10848:3;10869:67;10933:2;10928:3;10869:67;:::i;:::-;10862:74;;10945:93;11034:3;10945:93;:::i;:::-;11063:2;11058:3;11054:12;11047:19;;10706:366;;;:::o;11078:419::-;11244:4;11282:2;11271:9;11267:18;11259:26;;11331:9;11325:4;11321:20;11317:1;11306:9;11302:17;11295:47;11359:131;11485:4;11359:131;:::i;:::-;11351:139;;11078:419;;;:::o;11503:234::-;11643:34;11639:1;11631:6;11627:14;11620:58;11712:17;11707:2;11699:6;11695:15;11688:42;11503:234;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:419::-;12281:4;12319:2;12308:9;12304:18;12296:26;;12368:9;12362:4;12358:20;12354:1;12343:9;12339:17;12332:47;12396:131;12522:4;12396:131;:::i;:::-;12388:139;;12115:419;;;:::o;12540:143::-;12597:5;12628:6;12622:13;12613:22;;12644:33;12671:5;12644:33;:::i;:::-;12540:143;;;;:::o;12689:351::-;12759:6;12808:2;12796:9;12787:7;12783:23;12779:32;12776:119;;;12814:79;;:::i;:::-;12776:119;12934:1;12959:64;13015:7;13006:6;12995:9;12991:22;12959:64;:::i;:::-;12949:74;;12905:128;12689:351;;;;:::o;13046:225::-;13186:34;13182:1;13174:6;13170:14;13163:58;13255:8;13250:2;13242:6;13238:15;13231:33;13046:225;:::o;13277:366::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:419::-;13815:4;13853:2;13842:9;13838:18;13830:26;;13902:9;13896:4;13892:20;13888:1;13877:9;13873:17;13866:47;13930:131;14056:4;13930:131;:::i;:::-;13922:139;;13649:419;;;:::o;14074:85::-;14119:7;14148:5;14137:16;;14074:85;;;:::o;14165:158::-;14223:9;14256:61;14274:42;14283:32;14309:5;14283:32;:::i;:::-;14274:42;:::i;:::-;14256:61;:::i;:::-;14243:74;;14165:158;;;:::o;14329:147::-;14424:45;14463:5;14424:45;:::i;:::-;14419:3;14412:58;14329:147;;:::o;14482:807::-;14731:4;14769:3;14758:9;14754:19;14746:27;;14783:71;14851:1;14840:9;14836:17;14827:6;14783:71;:::i;:::-;14864:72;14932:2;14921:9;14917:18;14908:6;14864:72;:::i;:::-;14946:80;15022:2;15011:9;15007:18;14998:6;14946:80;:::i;:::-;15036;15112:2;15101:9;15097:18;15088:6;15036:80;:::i;:::-;15126:73;15194:3;15183:9;15179:19;15170:6;15126:73;:::i;:::-;15209;15277:3;15266:9;15262:19;15253:6;15209:73;:::i;:::-;14482:807;;;;;;;;;:::o;15295:663::-;15383:6;15391;15399;15448:2;15436:9;15427:7;15423:23;15419:32;15416:119;;;15454:79;;:::i;:::-;15416:119;15574:1;15599:64;15655:7;15646:6;15635:9;15631:22;15599:64;:::i;:::-;15589:74;;15545:128;15712:2;15738:64;15794:7;15785:6;15774:9;15770:22;15738:64;:::i;:::-;15728:74;;15683:129;15851:2;15877:64;15933:7;15924:6;15913:9;15909:22;15877:64;:::i;:::-;15867:74;;15822:129;15295:663;;;;;:::o;15964:173::-;16104:25;16100:1;16092:6;16088:14;16081:49;15964:173;:::o;16143:366::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:419::-;16681:4;16719:2;16708:9;16704:18;16696:26;;16768:9;16762:4;16758:20;16754:1;16743:9;16739:17;16732:47;16796:131;16922:4;16796:131;:::i;:::-;16788:139;;16515:419;;;:::o;16940:332::-;17061:4;17099:2;17088:9;17084:18;17076:26;;17112:71;17180:1;17169:9;17165:17;17156:6;17112:71;:::i;:::-;17193:72;17261:2;17250:9;17246:18;17237:6;17193:72;:::i;:::-;16940:332;;;;;:::o;17278:177::-;17418:29;17414:1;17406:6;17402:14;17395:53;17278:177;:::o;17461:366::-;17603:3;17624:67;17688:2;17683:3;17624:67;:::i;:::-;17617:74;;17700:93;17789:3;17700:93;:::i;:::-;17818:2;17813:3;17809:12;17802:19;;17461:366;;;:::o;17833:419::-;17999:4;18037:2;18026:9;18022:18;18014:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18114:131;18240:4;18114:131;:::i;:::-;18106:139;;17833:419;;;:::o;18258:332::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18430:71;18498:1;18487:9;18483:17;18474:6;18430:71;:::i;:::-;18511:72;18579:2;18568:9;18564:18;18555:6;18511:72;:::i;:::-;18258:332;;;;;:::o;18596:116::-;18666:21;18681:5;18666:21;:::i;:::-;18659:5;18656:32;18646:60;;18702:1;18699;18692:12;18646:60;18596:116;:::o;18718:137::-;18772:5;18803:6;18797:13;18788:22;;18819:30;18843:5;18819:30;:::i;:::-;18718:137;;;;:::o;18861:345::-;18928:6;18977:2;18965:9;18956:7;18952:23;18948:32;18945:119;;;18983:79;;:::i;:::-;18945:119;19103:1;19128:61;19181:7;19172:6;19161:9;19157:22;19128:61;:::i;:::-;19118:71;;19074:125;18861:345;;;;:::o;19212:170::-;19352:22;19348:1;19340:6;19336:14;19329:46;19212:170;:::o;19388:366::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:419::-;19926:4;19964:2;19953:9;19949:18;19941:26;;20013:9;20007:4;20003:20;19999:1;19988:9;19984:17;19977:47;20041:131;20167:4;20041:131;:::i;:::-;20033:139;;19760:419;;;:::o;20185:172::-;20325:24;20321:1;20313:6;20309:14;20302:48;20185:172;:::o;20363:366::-;20505:3;20526:67;20590:2;20585:3;20526:67;:::i;:::-;20519:74;;20602:93;20691:3;20602:93;:::i;:::-;20720:2;20715:3;20711:12;20704:19;;20363:366;;;:::o;20735:419::-;20901:4;20939:2;20928:9;20924:18;20916:26;;20988:9;20982:4;20978:20;20974:1;20963:9;20959:17;20952:47;21016:131;21142:4;21016:131;:::i;:::-;21008:139;;20735:419;;;:::o;21160:225::-;21300:34;21296:1;21288:6;21284:14;21277:58;21369:8;21364:2;21356:6;21352:15;21345:33;21160:225;:::o;21391:366::-;21533:3;21554:67;21618:2;21613:3;21554:67;:::i;:::-;21547:74;;21630:93;21719:3;21630:93;:::i;:::-;21748:2;21743:3;21739:12;21732:19;;21391:366;;;:::o;21763:419::-;21929:4;21967:2;21956:9;21952:18;21944:26;;22016:9;22010:4;22006:20;22002:1;21991:9;21987:17;21980:47;22044:131;22170:4;22044:131;:::i;:::-;22036:139;;21763:419;;;:::o;22188:223::-;22328:34;22324:1;22316:6;22312:14;22305:58;22397:6;22392:2;22384:6;22380:15;22373:31;22188:223;:::o;22417:366::-;22559:3;22580:67;22644:2;22639:3;22580:67;:::i;:::-;22573:74;;22656:93;22745:3;22656:93;:::i;:::-;22774:2;22769:3;22765:12;22758:19;;22417:366;;;:::o;22789:419::-;22955:4;22993:2;22982:9;22978:18;22970:26;;23042:9;23036:4;23032:20;23028:1;23017:9;23013:17;23006:47;23070:131;23196:4;23070:131;:::i;:::-;23062:139;;22789:419;;;:::o;23214:221::-;23354:34;23350:1;23342:6;23338:14;23331:58;23423:4;23418:2;23410:6;23406:15;23399:29;23214:221;:::o;23441:366::-;23583:3;23604:67;23668:2;23663:3;23604:67;:::i;:::-;23597:74;;23680:93;23769:3;23680:93;:::i;:::-;23798:2;23793:3;23789:12;23782:19;;23441:366;;;:::o;23813:419::-;23979:4;24017:2;24006:9;24002:18;23994:26;;24066:9;24060:4;24056:20;24052:1;24041:9;24037:17;24030:47;24094:131;24220:4;24094:131;:::i;:::-;24086:139;;23813:419;;;:::o;24238:179::-;24378:31;24374:1;24366:6;24362:14;24355:55;24238:179;:::o;24423:366::-;24565:3;24586:67;24650:2;24645:3;24586:67;:::i;:::-;24579:74;;24662:93;24751:3;24662:93;:::i;:::-;24780:2;24775:3;24771:12;24764:19;;24423:366;;;:::o;24795:419::-;24961:4;24999:2;24988:9;24984:18;24976:26;;25048:9;25042:4;25038:20;25034:1;25023:9;25019:17;25012:47;25076:131;25202:4;25076:131;:::i;:::-;25068:139;;24795:419;;;:::o;25220:180::-;25268:77;25265:1;25258:88;25365:4;25362:1;25355:15;25389:4;25386:1;25379:15;25406:410;25446:7;25469:20;25487:1;25469:20;:::i;:::-;25464:25;;25503:20;25521:1;25503:20;:::i;:::-;25498:25;;25558:1;25555;25551:9;25580:30;25598:11;25580:30;:::i;:::-;25569:41;;25759:1;25750:7;25746:15;25743:1;25740:22;25720:1;25713:9;25693:83;25670:139;;25789:18;;:::i;:::-;25670:139;25454:362;25406:410;;;;:::o;25822:180::-;25870:77;25867:1;25860:88;25967:4;25964:1;25957:15;25991:4;25988:1;25981:15;26008:185;26048:1;26065:20;26083:1;26065:20;:::i;:::-;26060:25;;26099:20;26117:1;26099:20;:::i;:::-;26094:25;;26138:1;26128:35;;26143:18;;:::i;:::-;26128:35;26185:1;26182;26178:9;26173:14;;26008:185;;;;:::o;26199:194::-;26239:4;26259:20;26277:1;26259:20;:::i;:::-;26254:25;;26293:20;26311:1;26293:20;:::i;:::-;26288:25;;26337:1;26334;26330:9;26322:17;;26361:1;26355:4;26352:11;26349:37;;;26366:18;;:::i;:::-;26349:37;26199:194;;;;:::o;26399:191::-;26439:3;26458:20;26476:1;26458:20;:::i;:::-;26453:25;;26492:20;26510:1;26492:20;:::i;:::-;26487:25;;26535:1;26532;26528:9;26521:16;;26556:3;26553:1;26550:10;26547:36;;;26563:18;;:::i;:::-;26547:36;26399:191;;;;:::o;26596:182::-;26736:34;26732:1;26724:6;26720:14;26713:58;26596:182;:::o;26784:366::-;26926:3;26947:67;27011:2;27006:3;26947:67;:::i;:::-;26940:74;;27023:93;27112:3;27023:93;:::i;:::-;27141:2;27136:3;27132:12;27125:19;;26784:366;;;:::o;27156:419::-;27322:4;27360:2;27349:9;27345:18;27337:26;;27409:9;27403:4;27399:20;27395:1;27384:9;27380:17;27373:47;27437:131;27563:4;27437:131;:::i;:::-;27429:139;;27156:419;;;:::o;27581:224::-;27721:34;27717:1;27709:6;27705:14;27698:58;27790:7;27785:2;27777:6;27773:15;27766:32;27581:224;:::o;27811:366::-;27953:3;27974:67;28038:2;28033:3;27974:67;:::i;:::-;27967:74;;28050:93;28139:3;28050:93;:::i;:::-;28168:2;28163:3;28159:12;28152:19;;27811:366;;;:::o;28183:419::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:222::-;28748:34;28744:1;28736:6;28732:14;28725:58;28817:5;28812:2;28804:6;28800:15;28793:30;28608:222;:::o;28836:366::-;28978:3;28999:67;29063:2;29058:3;28999:67;:::i;:::-;28992:74;;29075:93;29164:3;29075:93;:::i;:::-;29193:2;29188:3;29184:12;29177:19;;28836:366;;;:::o;29208:419::-;29374:4;29412:2;29401:9;29397:18;29389:26;;29461:9;29455:4;29451:20;29447:1;29436:9;29432:17;29425:47;29489:131;29615:4;29489:131;:::i;:::-;29481:139;;29208:419;;;:::o;29633:225::-;29773:34;29769:1;29761:6;29757:14;29750:58;29842:8;29837:2;29829:6;29825:15;29818:33;29633:225;:::o;29864:366::-;30006:3;30027:67;30091:2;30086:3;30027:67;:::i;:::-;30020:74;;30103:93;30192:3;30103:93;:::i;:::-;30221:2;30216:3;30212:12;30205:19;;29864:366;;;:::o;30236:419::-;30402:4;30440:2;30429:9;30425:18;30417:26;;30489:9;30483:4;30479:20;30475:1;30464:9;30460:17;30453:47;30517:131;30643:4;30517:131;:::i;:::-;30509:139;;30236:419;;;:::o;30661:180::-;30709:77;30706:1;30699:88;30806:4;30803:1;30796:15;30830:4;30827:1;30820:15;30847:180;30895:77;30892:1;30885:88;30992:4;30989:1;30982:15;31016:4;31013:1;31006:15;31033:143;31090:5;31121:6;31115:13;31106:22;;31137:33;31164:5;31137:33;:::i;:::-;31033:143;;;;:::o;31182:351::-;31252:6;31301:2;31289:9;31280:7;31276:23;31272:32;31269:119;;;31307:79;;:::i;:::-;31269:119;31427:1;31452:64;31508:7;31499:6;31488:9;31484:22;31452:64;:::i;:::-;31442:74;;31398:128;31182:351;;;;:::o;31539:831::-;31802:4;31840:3;31829:9;31825:19;31817:27;;31854:71;31922:1;31911:9;31907:17;31898:6;31854:71;:::i;:::-;31935:80;32011:2;32000:9;31996:18;31987:6;31935:80;:::i;:::-;32062:9;32056:4;32052:20;32047:2;32036:9;32032:18;32025:48;32090:108;32193:4;32184:6;32090:108;:::i;:::-;32082:116;;32208:72;32276:2;32265:9;32261:18;32252:6;32208:72;:::i;:::-;32290:73;32358:3;32347:9;32343:19;32334:6;32290:73;:::i;:::-;31539:831;;;;;;;;:::o;32376:117::-;32485:1;32482;32475:12;32499:281;32582:27;32604:4;32582:27;:::i;:::-;32574:6;32570:40;32712:6;32700:10;32697:22;32676:18;32664:10;32661:34;32658:62;32655:88;;;32723:18;;:::i;:::-;32655:88;32763:10;32759:2;32752:22;32542:238;32499:281;;:::o;32786:129::-;32820:6;32847:20;;:::i;:::-;32837:30;;32876:33;32904:4;32896:6;32876:33;:::i;:::-;32786:129;;;:::o;32921:311::-;32998:4;33088:18;33080:6;33077:30;33074:56;;;33110:18;;:::i;:::-;33074:56;33160:4;33152:6;33148:17;33140:25;;33220:4;33214;33210:15;33202:23;;32921:311;;;:::o;33238:117::-;33347:1;33344;33337:12;33378:732;33485:5;33510:81;33526:64;33583:6;33526:64;:::i;:::-;33510:81;:::i;:::-;33501:90;;33611:5;33640:6;33633:5;33626:21;33674:4;33667:5;33663:16;33656:23;;33727:4;33719:6;33715:17;33707:6;33703:30;33756:3;33748:6;33745:15;33742:122;;;33775:79;;:::i;:::-;33742:122;33890:6;33873:231;33907:6;33902:3;33899:15;33873:231;;;33982:3;34011:48;34055:3;34043:10;34011:48;:::i;:::-;34006:3;33999:61;34089:4;34084:3;34080:14;34073:21;;33949:155;33933:4;33928:3;33924:14;33917:21;;33873:231;;;33877:21;33491:619;;33378:732;;;;;:::o;34133:385::-;34215:5;34264:3;34257:4;34249:6;34245:17;34241:27;34231:122;;34272:79;;:::i;:::-;34231:122;34382:6;34376:13;34407:105;34508:3;34500:6;34493:4;34485:6;34481:17;34407:105;:::i;:::-;34398:114;;34221:297;34133:385;;;;:::o;34524:554::-;34619:6;34668:2;34656:9;34647:7;34643:23;34639:32;34636:119;;;34674:79;;:::i;:::-;34636:119;34815:1;34804:9;34800:17;34794:24;34845:18;34837:6;34834:30;34831:117;;;34867:79;;:::i;:::-;34831:117;34972:89;35053:7;35044:6;35033:9;35029:22;34972:89;:::i;:::-;34962:99;;34765:306;34524:554;;;;:::o;35084:1029::-;35389:4;35427:3;35416:9;35412:19;35404:27;;35441:71;35509:1;35498:9;35494:17;35485:6;35441:71;:::i;:::-;35522:72;35590:2;35579:9;35575:18;35566:6;35522:72;:::i;:::-;35604;35672:2;35661:9;35657:18;35648:6;35604:72;:::i;:::-;35686;35754:2;35743:9;35739:18;35730:6;35686:72;:::i;:::-;35768:81;35844:3;35833:9;35829:19;35820:6;35768:81;:::i;:::-;35859;35935:3;35924:9;35920:19;35911:6;35859:81;:::i;:::-;35950:73;36018:3;36007:9;36003:19;35994:6;35950:73;:::i;:::-;36033;36101:3;36090:9;36086:19;36077:6;36033:73;:::i;:::-;35084:1029;;;;;;;;;;;:::o;36119:233::-;36158:3;36181:24;36199:5;36181:24;:::i;:::-;36172:33;;36227:66;36220:5;36217:77;36214:103;;36297:18;;:::i;:::-;36214:103;36344:1;36337:5;36333:13;36326:20;;36119:233;;;:::o;36358:180::-;36406:77;36403:1;36396:88;36503:4;36500:1;36493:15;36527:4;36524:1;36517:15
Swarm Source
ipfs://0a6600af74e829389c703ed86f06feb445432d792687ff9330934f1e48c95b44
[ 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.