Token ArbiGator
Overview ERC20
Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,000,000 $GATOR
Holders:
290 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ArbiGator
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-18 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.5; /** * Standard SafeMath, stripped down to just add/sub/mul/div */ library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } /** * BEP20 standard interface. */ interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Allows for contract ownership for multiple adressess */ abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address account) public onlyOwner { authorizations[account] = true; } /** * Remove address authorization. Owner only */ function unauthorize(address account) public onlyOwner { authorizations[account] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address authorization status */ function isAuthorized(address account) public view returns (bool) { return authorizations[account]; } /** * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized */ function transferOwnership(address payable account) public onlyOwner { owner = account; authorizations[account] = true; emit OwnershipTransferred(account); } event OwnershipTransferred(address owner); } /* Standard IDEXFactory */ interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } /* Standard IDEXRouter */ interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /* Interface for the DividendDistributor */ interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setRewardToken (IBEP20 _USDC) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } /* Our DividendDistributor contract responsible for distributing the earn token */ contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } // EARN IBEP20 public USDC = IBEP20(0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f); address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; IDEXRouter router; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 60 * 60; uint256 public minDistribution = 1 * (10 ** 12); uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); _token = msg.sender; } //New function to set the Reward function setRewardToken (IBEP20 _USDC) external override onlyToken { USDC = IBEP20(_USDC); } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = USDC.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = WETH; path[1] = address(USDC); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = USDC.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); USDC.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend(address shareholder) external onlyToken{ distributeDividend(shareholder); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } /* Token contract */ contract ArbiGator is IBEP20, Auth { using SafeMath for uint256; // Addresses address USDC = 0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f; address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address TOKENDISTRIBUTOR; // These are owner by default address public autoLiquidityReceiver; address public marketingFeeReceiver; address public devFeeReceiver; // Name and symbol string constant _name = "ArbiGator"; string constant _symbol = "$GATOR"; uint8 constant _decimals = 18; // Total supply uint256 _totalSupply = 1000000 * (10 ** _decimals); // Max wallet and TX uint256 public _maxBuyTxAmount = _totalSupply * 200 / 10000; // 2% uint256 public _maxSellTxAmount = _totalSupply * 200 / 10000; // 2% uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 10000; // 2% // Mappings mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isTimelockExempt; mapping (address => bool) isDividendExempt; // Buy Fees uint256 liquidityFeeBuy = 100; uint256 devFeeBuy = 100; uint256 reflectionFeeBuy = 200; uint256 marketingFeeBuy = 200; uint256 totalFeeBuy = 600; // Sell fees uint256 liquidityFeeSell = 100; uint256 devFeeSell = 100; uint256 reflectionFeeSell = 200; uint256 marketingFeeSell = 200; uint256 totalFeeSell = 600; // Fee variables uint256 liquidityFee; uint256 devFee; uint256 reflectionFee; uint256 marketingFee; uint256 totalFee; uint256 feeDenominator = 10000; // Sell amount of tokens when a sell takes place uint256 public swapThreshold = _totalSupply * 20 / 10000; // 0.2% of supply // Liquidity uint256 targetLiquidity = 40; uint256 targetLiquidityDenominator = 100; DividendDistributor distributor; uint256 distributorGas = 500000; // Cooldown & timer functionality // NOTE: Solidity uses Unix timestamp so 1 is 1 second. bool public buyCooldownEnabled = true; uint8 public cooldownTimerInterval = 5; mapping (address => uint) private cooldownTimer; // Other variables IDEXRouter public router; address public pair; uint256 public launchedAt; bool public tradingOpen = false; bool public swapEnabled = true; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } /* Token constructor */ constructor () Auth(msg.sender) { router = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); pair = IDEXFactory(router.factory()).createPair(WETH, address(this)); _allowances[address(this)][address(router)] = type(uint256).max; distributor = new DividendDistributor(address(router)); // Should be the owner wallet/token distributor TOKENDISTRIBUTOR = msg.sender; address _presaler = msg.sender; isFeeExempt[_presaler] = true; isTxLimitExempt[_presaler] = true; // No timelock for these people isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; // Exempt from dividend isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; // Set the marketing and liq receiver to the owner as default autoLiquidityReceiver = msg.sender; marketingFeeReceiver = 0xACFb7318fFE4F1eFF86d5Aaf4695d0C90Bbb9FbD; devFeeReceiver = 0x1140259E2f517D54e734b75fb5A290a8670Dcc84; _balances[_presaler] = _totalSupply; emit Transfer(address(0), _presaler, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } // setting the max wallet in percentages // NOTE: 1% = 100 function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() { _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000); } // Set the tokendistributor, exempt for everything and able to SEND before launch. function setTokenDistributor(address _tokenDistributor) external authorized{ TOKENDISTRIBUTOR = _tokenDistributor; isFeeExempt[_tokenDistributor] = true; isTxLimitExempt[_tokenDistributor] = true; isTimelockExempt[_tokenDistributor] = true; } // Main transfer function function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } // Check if trading is enabled if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){ require(tradingOpen,"Trading not enabled yet"); } // Check if buying or selling bool isSell = recipient == pair; // Set buy or sell fees setCorrectFees(isSell); // Check max wallet checkMaxWallet(sender, recipient, amount); // Buycooldown checkBuyCooldown(sender, recipient); // Checks maxTx checkTxLimit(sender, amount, recipient, isSell); // Check if we should do the swapback if(shouldSwapBack()){ swapBack(); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); // Dividend tracker if(!isDividendExempt[sender]) { try distributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } // Do a normal transfer function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } // Set the correct fees for buying or selling function setCorrectFees(bool isSell) internal { if(isSell){ liquidityFee = liquidityFeeSell; devFee = devFeeSell; reflectionFee = reflectionFeeSell; marketingFee = marketingFeeSell; totalFee = totalFeeSell; } else { liquidityFee = liquidityFeeBuy; devFee = devFeeBuy; reflectionFee = reflectionFeeBuy; marketingFee = marketingFeeBuy; totalFee = totalFeeBuy; } } // Check for maxTX function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view { if (recipient != owner){ if(isSell){ require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded"); } else { require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded"); } } } // Check buy cooldown function checkBuyCooldown(address sender, address recipient) internal { if (sender == pair && buyCooldownEnabled && !isTimelockExempt[recipient]) { require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } } // Check maxWallet function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != devFeeReceiver){ uint256 heldTokens = balanceOf(recipient); require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much."); } } // Check if sender is not feeExempt function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } // Take the normal total Fee function takeFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(totalFee).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // Check if we should sell tokens function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } // switch Trading function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; } // Enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner { buyCooldownEnabled = _status; cooldownTimerInterval = _interval; } // Main swapback to sell tokens for WETH function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountWETH = address(this).balance.sub(balanceBefore); uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2); uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee); uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee); uint256 amountWETHDev = amountWETH.mul(devFee).div(totalWETHFee); try distributor.deposit{value: amountWETHReflection}() {} catch {} (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}(""); (bool successDev, /* bytes memory data */) = payable(devFeeReceiver).call{value: amountWETHDev, gas: 30000}(""); require(successMarketing, "marketing receiver rejected ETH transfer"); require(successDev, "Dev receiver rejected ETH transfer"); if(amountToLiquify > 0){ router.addLiquidityETH{value: amountWETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountWETHLiquidity, amountToLiquify); } } // Buy amount of tokens with WETH from the contract function buyTokens(uint256 amount, address to) internal swapping { address[] memory path = new address[](2); path[0] = WETH; path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, to, block.timestamp ); } // Check when the token is launched function launched() internal view returns (bool) { return launchedAt != 0; } // Set the launchedAt to token launch function launch() internal { launchedAt = block.number; } // Set max buy TX function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner { _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000); } // Set max sell TX function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner { _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000); } // Exempt from dividend function setIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } // Exempt from fee function setIsFeeExempt(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } // Exempt from max TX function setIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } // Exempt from buy CD function setIsTimelockExempt(address holder, bool exempt) external authorized { isTimelockExempt[holder] = exempt; } function setFullWhitelist(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; isFeeExempt[holder] = exempt; isTimelockExempt[holder] = exempt; } // Set our buy fees function setBuyFees(uint256 _liquidityFeeBuy, uint256 _devFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner { liquidityFeeBuy = _liquidityFeeBuy; devFeeBuy = _devFeeBuy; reflectionFeeBuy = _reflectionFeeBuy; marketingFeeBuy = _marketingFeeBuy; totalFeeBuy = _liquidityFeeBuy.add(_devFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy); feeDenominator = _feeDenominator; } // Set our sell fees function setSellFees(uint256 _liquidityFeeSell, uint256 _devFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner { liquidityFeeSell = _liquidityFeeSell; devFeeSell = _devFeeSell; reflectionFeeSell = _reflectionFeeSell; marketingFeeSell = _marketingFeeSell; totalFeeSell = _liquidityFeeSell.add(_devFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell); feeDenominator = _feeDenominator; } // Set the marketing and liquidity receivers function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver) external authorized { autoLiquidityReceiver = _autoLiquidityReceiver; marketingFeeReceiver = _marketingFeeReceiver; devFeeReceiver = _devFeeReceiver; } // Set swapBack settings function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized { swapEnabled = _enabled; swapThreshold = _totalSupply * _amount / 10000; } // Set target liquidity function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } // Save spare ETH from CA function manualSend() external authorized { uint256 contractETHBalance = address(this).balance; payable(autoLiquidityReceiver).transfer(contractETHBalance); } // Set criteria for auto distribution function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } // Let people claim there dividend function claimDividend() external { distributor.claimDividend(msg.sender); } //New function to set the Reward function setRewardToken(IBEP20 _USDC) external authorized { distributor.setRewardToken(_USDC); } // Check how much earnings are unpaid function getUnpaidEarnings(address shareholder) public view returns (uint256) { return distributor.getUnpaidEarnings(shareholder); } // Set gas for distributor function setDistributorSettings(uint256 gas) external authorized { require(gas < 750000); distributorGas = gas; } // Get the circulatingSupply function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } // Get the liquidity backing function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } // Get if we are over liquified or not function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountWETH, uint256 amountBOG); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"_USDC","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052732f2a2543b76a4166549f7aab2e75bef0aefc5b0f600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507382af49447d8a07e3bd95bd0d56f35241523fbab1600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000d22565b620f424062000153919062000d73565b600a5561271060c8600a546200016a919062000d73565b62000176919062000ded565b600b5561271060c8600a546200018d919062000d73565b62000199919062000ded565b600c5561271060c8600a54620001b0919062000d73565b620001bc919062000ded565b600d556064601455606460155560c860165560c860175561025860185560646019556064601a5560c8601b5560c8601c55610258601d556127106023556127106014600a546200020d919062000d73565b62000219919062000ded565b602455602860255560646026556207a1206028556001602960006101000a81548160ff0219169083151502179055506005602960016101000a81548160ff021916908360ff1602179055506000602e60006101000a81548160ff0219169083151502179055506001602e60016101000a81548160ff021916908315150217905550348015620002a757600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050731b02da8cb0d097eb8d57a175b88c7d8b47997506602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042a919062000e8f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200048892919062000ed2565b6020604051808303816000875af1158015620004a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ce919062000e8f565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006029062000b7a565b6200060e919062000eff565b604051809103906000f0801580156200062b573d6000803e3d6000fd5b50602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060003390506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073acfb7318ffe4f1eff86d5aaf4695d0c90bbb9fbd600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731140259e2f517d54e734b75fb5a290a8670dcc84600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000b6b919062000f2d565b60405180910390a35062000f4a565b612253806200645683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c165780860481111562000bee5762000bed62000b88565b5b600185161562000bfe5780820291505b808102905062000c0e8562000bb7565b945062000bce565b94509492505050565b60008262000c31576001905062000d04565b8162000c41576000905062000d04565b816001811462000c5a576002811462000c655762000c9b565b600191505062000d04565b60ff84111562000c7a5762000c7962000b88565b5b8360020a91508482111562000c945762000c9362000b88565b5b5062000d04565b5060208310610133831016604e8410600b841016171562000cd55782820a90508381111562000ccf5762000cce62000b88565b5b62000d04565b62000ce4848484600162000bc4565b9250905081840481111562000cfe5762000cfd62000b88565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d2f8262000d0b565b915062000d3c8362000d15565b925062000d6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c1f565b905092915050565b600062000d808262000d0b565b915062000d8d8362000d0b565b925082820262000d9d8162000d0b565b9150828204841483151762000db75762000db662000b88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000dfa8262000d0b565b915062000e078362000d0b565b92508262000e1a5762000e1962000dbe565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e578262000e2a565b9050919050565b62000e698162000e4a565b811462000e7557600080fd5b50565b60008151905062000e898162000e5e565b92915050565b60006020828403121562000ea85762000ea762000e25565b5b600062000eb88482850162000e78565b91505092915050565b62000ecc8162000e4a565b82525050565b600060408201905062000ee9600083018562000ec1565b62000ef8602083018462000ec1565b9392505050565b600060208201905062000f16600083018462000ec1565b92915050565b62000f278162000d0b565b82525050565b600060208201905062000f44600083018462000f1c565b92915050565b6154fc8062000f5a6000396000f3fe6080604052600436106103545760003560e01c8063893d20e8116101c6578063dab84ee7116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610c53578063f887ea4014610c7c578063fe9fbb8014610ca7578063ffb54a9914610ce45761035b565b8063f2fde38b14610bea578063f429389014610c13578063f708a64f14610c2a5761035b565b8063df4a76c5116100d1578063df4a76c514610b56578063e96fada214610b7f578063f0b37c0414610baa578063f0fc6bca14610bd35761035b565b8063dab84ee714610ac5578063dd62ed3e14610af0578063df20fd4914610b2d5761035b565b8063b6a5d7de11610164578063ca33e64c1161013e578063ca33e64c14610a09578063cf4be39414610a34578063d51ed1c814610a5f578063d7c0103214610a9c5761035b565b8063b6a5d7de1461098c578063bf56b371146109b5578063c1cf53c4146109e05761035b565b80639d1944f5116101a05780639d1944f5146108d2578063a6b06a27146108fb578063a8aa1b3114610924578063a9059cbb1461094f5761035b565b8063893d20e8146108535780638aee81271461087e57806395d89b41146108a75761035b565b8063313ce567116102a0578063658d4b7f1161023e578063722b62ad11610218578063722b62ad146107ab57806378109e54146107d65780637affa29b1461080157806382bf293c1461082a5761035b565b8063658d4b7f1461071a5780636ddd17131461074357806370a082311461076e5761035b565b806347a28b791161027a57806347a28b791461066057806350db71fb14610689578063571ac8b0146106b2578063617fe0ed146106ef5761035b565b8063313ce567146105e1578063334773271461060c57806338280e6b146106375761035b565b8063201e79911161030d5780632b112e49116102e75780632b112e49146105275780632d48e896146105525780632d5945671461057b5780632f54bf6e146105a45761035b565b8063201e79911461048457806323b872dd146104ad57806328fd3198146104ea5761035b565b80630445b6671461036057806306fdde031461038b578063095ea7b3146103b65780630d295980146103f35780631161ae391461041c57806318160ddd146104595761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d0f565b604051610382919061441a565b60405180910390f35b34801561039757600080fd5b506103a0610d15565b6040516103ad91906144c5565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190614576565b610d52565b6040516103ea91906145d1565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614618565b610e44565b005b34801561042857600080fd5b50610443600480360381019061043e9190614645565b610ea9565b60405161045091906145d1565b60405180910390f35b34801561046557600080fd5b5061046e610ebe565b60405161047b919061441a565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190614645565b610ec8565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190614685565b610f22565b6040516104e191906145d1565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c91906146d8565b611122565b60405161051e919061441a565b60405180910390f35b34801561053357600080fd5b5061053c6111c7565b604051610549919061441a565b60405180910390f35b34801561055e57600080fd5b5061057960048036038101906105749190614645565b611249565b005b34801561058757600080fd5b506105a2600480360381019061059d919061473e565b611324565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906146d8565b6113a5565b6040516105d891906145d1565b60405180910390f35b3480156105ed57600080fd5b506105f66113fe565b604051610603919061478d565b60405180910390f35b34801561061857600080fd5b50610621611407565b60405161062e919061441a565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906146d8565b61140d565b005b34801561066c57600080fd5b50610687600480360381019061068291906147a8565b6115a1565b005b34801561069557600080fd5b506106b060048036038101906106ab9190614823565b611650565b005b3480156106be57600080fd5b506106d960048036038101906106d491906146d8565b6116f3565b6040516106e691906145d1565b60405180910390f35b3480156106fb57600080fd5b50610704611726565b60405161071191906145d1565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190614823565b611739565b005b34801561074f57600080fd5b506107586117dc565b60405161076591906145d1565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906146d8565b6117ef565b6040516107a2919061441a565b60405180910390f35b3480156107b757600080fd5b506107c0611838565b6040516107cd919061478d565b60405180910390f35b3480156107e257600080fd5b506107eb61184b565b6040516107f8919061441a565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190614863565b611851565b005b34801561083657600080fd5b50610851600480360381019061084c9190614863565b6118cb565b005b34801561085f57600080fd5b50610868611945565b604051610875919061489f565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906148f8565b61196e565b005b3480156108b357600080fd5b506108bc611a46565b6040516108c991906144c5565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f49190614863565b611a83565b005b34801561090757600080fd5b50610922600480360381019061091d9190614823565b611ae4565b005b34801561093057600080fd5b50610939611c35565b604051610946919061489f565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190614576565b611c5b565b60405161098391906145d1565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906146d8565b611c70565b005b3480156109c157600080fd5b506109ca611d12565b6040516109d7919061441a565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a0291906147a8565b611d18565b005b348015610a1557600080fd5b50610a1e611dc7565b604051610a2b919061489f565b60405180910390f35b348015610a4057600080fd5b50610a49611ded565b604051610a56919061441a565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614863565b611df3565b604051610a93919061441a565b60405180910390f35b348015610aa857600080fd5b50610ac36004803603810190610abe9190614925565b611e65565b005b348015610ad157600080fd5b50610ada611f75565b604051610ae7919061489f565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190614978565b611f9b565b604051610b24919061441a565b60405180910390f35b348015610b3957600080fd5b50610b546004803603810190610b4f91906149b8565b612022565b005b348015610b6257600080fd5b50610b7d6004803603810190610b789190614863565b6120a9565b005b348015610b8b57600080fd5b50610b94612123565b604051610ba1919061489f565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906146d8565b612149565b005b348015610bdf57600080fd5b50610be86121ec565b005b348015610bf657600080fd5b50610c116004803603810190610c0c9190614a36565b61227b565b005b348015610c1f57600080fd5b50610c28612394565b005b348015610c3657600080fd5b50610c516004803603810190610c4c9190614823565b61244d565b005b348015610c5f57600080fd5b50610c7a6004803603810190610c759190614823565b6126ed565b005b348015610c8857600080fd5b50610c91612790565b604051610c9e9190614ac2565b60405180910390f35b348015610cb357600080fd5b50610cce6004803603810190610cc991906146d8565b6127b6565b604051610cdb91906145d1565b60405180910390f35b348015610cf057600080fd5b50610cf961280c565b604051610d0691906145d1565b60405180910390f35b60245481565b60606040518060400160405280600981526020017f417262694761746f720000000000000000000000000000000000000000000000815250905090565b600081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e32919061441a565b60405180910390a36001905092915050565b610e4d336113a5565b610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614b29565b60405180910390fd5b80602e60006101000a81548160ff02191690831515021790555050565b600082610eb583611df3565b11905092915050565b6000600a54905090565b610ed1336127b6565b610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790614b95565b60405180910390fd5b81602581905550806026819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461110e5761108d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281f9092919063ffffffff16565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611119848484612883565b90509392505050565b6000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b815260040161117f919061489f565b602060405180830381865afa15801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c09190614bca565b9050919050565b60006112446111f7600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117ef565b611236611225600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117ef565b600a54612f4790919063ffffffff16565b612f4790919063ffffffff16565b905090565b611252336127b6565b611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890614b95565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112ee929190614bf7565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050505050565b61132d336113a5565b61136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390614b29565b60405180910390fd5b81602960006101000a81548160ff02191690831515021790555080602960016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b600b5481565b611416336127b6565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614b95565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115aa336113a5565b6115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090614b29565b60405180910390fd5b8460148190555083601581905550826016819055508160178190555061163c8261162e85611620888a612f9190919063ffffffff16565b612f9190919063ffffffff16565b612f9190919063ffffffff16565b601881905550806023819055505050505050565b611659336127b6565b611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614b95565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061171f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d52565b9050919050565b602960009054906101000a900460ff1681565b611742336127b6565b611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890614b95565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602e60019054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602960019054906101000a900460ff1681565b600d5481565b61185a336113a5565b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090614b29565b60405180910390fd5b6118c26127106118b483600a54612fef90919063ffffffff16565b61306990919063ffffffff16565b600b8190555050565b6118d4336113a5565b611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90614b29565b60405180910390fd5b61193c61271061192e83600a54612fef90919063ffffffff16565b61306990919063ffffffff16565b600d8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611977336127b6565b6119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614b95565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638aee8127826040518263ffffffff1660e01b8152600401611a119190614c41565b600060405180830381600087803b158015611a2b57600080fd5b505af1158015611a3f573d6000803e3d6000fd5b5050505050565b60606040518060400160405280600681526020017f244741544f520000000000000000000000000000000000000000000000000000815250905090565b611a8c336127b6565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290614b95565b60405180910390fd5b620b71b08110611ada57600080fd5b8060288190555050565b611aed336127b6565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390614b95565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c68338484612883565b905092915050565b611c79336113a5565b611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90614b29565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602d5481565b611d21336113a5565b611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790614b29565b60405180910390fd5b8460198190555083601a8190555082601b8190555081601c81905550611db382611da585611d97888a612f9190919063ffffffff16565b612f9190919063ffffffff16565b612f9190919063ffffffff16565b601d81905550806023819055505050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000611e5e611e006111c7565b611e50611e416002611e33602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117ef565b612fef90919063ffffffff16565b85612fef90919063ffffffff16565b61306990919063ffffffff16565b9050919050565b611e6e336127b6565b611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614b95565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61202b336127b6565b61206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614b95565b60405180910390fd5b81602e60016101000a81548160ff02191690831515021790555061271081600a546120959190614c8b565b61209f9190614cfc565b6024819055505050565b6120b2336113a5565b6120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614b29565b60405180910390fd5b61211a61271061210c83600a54612fef90919063ffffffff16565b61306990919063ffffffff16565b600c8190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612152336113a5565b612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890614b29565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b8152600401612247919061489f565b600060405180830381600087803b15801561226157600080fd5b505af1158015612275573d6000803e3d6000fd5b50505050565b612284336113a5565b6122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba90614b29565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516123899190614d4e565b60405180910390a150565b61239d336127b6565b6123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614b95565b60405180910390fd5b6000479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612449573d6000803e3d6000fd5b5050565b612456336127b6565b612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c90614b95565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561251f5750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61252857600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561261a57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016125e3929190614da4565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b505050506126e9565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016126b6929190614dcd565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505050505b5050565b6126f6336127b6565b612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90614b95565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602e60009054906101000a900460ff1681565b6000838311158290612867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285e91906144c5565b60405180910390fd5b50600083856128769190614df6565b9050809150509392505050565b6000602e60029054906101000a900460ff16156128ac576128a58484846130b3565b9050612f40565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129505750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129aa57508373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156129ff57602e60009054906101000a900460ff166129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590614e76565b60405180910390fd5b5b6000602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050612a5d81613286565b612a688585856132ef565b612a7285856136a4565b612a7e8584868461384f565b612a86613a8f565b15612a9457612a93613b66565b5b612b1d836040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281f9092919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612b6b86614203565b612b755783612b80565b612b7f868561425a565b5b9050612bd481600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9190919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d3157602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612d04929190614dcd565b600060405180830381600087803b158015612d1e57600080fd5b505af1925050508015612d2f575060015b505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e4b57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612e1e929190614dcd565b600060405180830381600087803b158015612e3857600080fd5b505af1925050508015612e49575060015b505b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796028546040518263ffffffff1660e01b8152600401612ea8919061441a565b600060405180830381600087803b158015612ec257600080fd5b505af1925050508015612ed3575060015b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f31919061441a565b60405180910390a36001925050505b9392505050565b6000612f8983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061281f565b905092915050565b6000808284612fa09190614e96565b905083811015612fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdc90614f16565b60405180910390fd5b8091505092915050565b60008083036130015760009050613063565b6000828461300f9190614c8b565b905082848261301e9190614cfc565b1461305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305590614fa8565b60405180910390fd5b809150505b92915050565b60006130ab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061439e565b905092915050565b600061313e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281f9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d382600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9190919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613273919061441a565b60405180910390a3600190509392505050565b80156132be57601954601e81905550601a54601f81905550601b54602081905550601c54602181905550601d546022819055506132ec565b601454601e81905550601554601f819055506016546020819055506017546021819055506018546022819055505b50565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133935750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133e95750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613441575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561347957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134d35750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561352d5750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135875750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135e15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561363b5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561369f57600061364b836117ef565b9050600d54828261365c9190614e96565b111561369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949061503a565b60405180910390fd5b505b505050565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561370d5750602960009054906101000a900460ff165b80156137635750601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561384b5742602a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106137e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e0906150a6565b60405180910390fd5b602960019054906101000a900460ff1660ff16426138079190614e96565b602a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a8957801561399a57600c54831115806139025750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806139565750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398c90615112565b60405180910390fd5b613a88565b600b54831115806139f45750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80613a485750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7e90615112565b60405180910390fd5b5b5b50505050565b6000602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613afc5750602e60029054906101000a900460ff16155b8015613b145750602e60019054906101000a900460ff165b8015613b615750602454600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602e60026101000a81548160ff0219169083151502179055506000613b91602554602654610ea9565b613b9d57601e54613ba0565b60005b90506000613be06002613bd2602254613bc486602454612fef90919063ffffffff16565b61306990919063ffffffff16565b61306990919063ffffffff16565b90506000613bf982602454612f4790919063ffffffff16565b90506000600267ffffffffffffffff811115613c1857613c17615132565b5b604051908082528060200260200182016040528015613c465781602001602082028036833780820191505090505b5090503081600081518110613c5e57613c5d615161565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613ccf57613cce615161565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613d7295949392919061524e565b600060405180830381600087803b158015613d8c57600080fd5b505af1158015613da0573d6000803e3d6000fd5b505050506000613db98247612f4790919063ffffffff16565b90506000613de5613dd460028961306990919063ffffffff16565b602254612f4790919063ffffffff16565b90506000613e216002613e1384613e058c88612fef90919063ffffffff16565b61306990919063ffffffff16565b61306990919063ffffffff16565b90506000613e4c83613e3e60205487612fef90919063ffffffff16565b61306990919063ffffffff16565b90506000613e7784613e6960215488612fef90919063ffffffff16565b61306990919063ffffffff16565b90506000613ea285613e94601f5489612fef90919063ffffffff16565b61306990919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f0e57600080fd5b505af193505050508015613f20575060015b506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051613f6d906152d9565b600060405180830381858888f193505050503d8060008114613fab576040519150601f19603f3d011682016040523d82523d6000602084013e613fb0565b606091505b505090506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051614000906152d9565b600060405180830381858888f193505050503d806000811461403e576040519150601f19603f3d011682016040523d82523d6000602084013e614043565b606091505b5050905081614087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407e90615360565b60405180910390fd5b806140c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140be906153f2565b60405180910390fd5b60008c11156141d957602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71987308f600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161415996959493929190615412565b60606040518083038185885af1158015614177573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061419c9190615473565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506868d6040516141d0929190614bf7565b60405180910390a15b505050505050505050505050506000602e60026101000a81548160ff021916908315150217905550565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008061428660235461427860225486612fef90919063ffffffff16565b61306990919063ffffffff16565b90506142da81600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9190919063ffffffff16565b600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161437a919061441a565b60405180910390a36143958184612f4790919063ffffffff16565b91505092915050565b600080831182906143e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143dc91906144c5565b60405180910390fd5b50600083856143f49190614cfc565b9050809150509392505050565b6000819050919050565b61441481614401565b82525050565b600060208201905061442f600083018461440b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561446f578082015181840152602081019050614454565b60008484015250505050565b6000601f19601f8301169050919050565b600061449782614435565b6144a18185614440565b93506144b1818560208601614451565b6144ba8161447b565b840191505092915050565b600060208201905081810360008301526144df818461448c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614517826144ec565b9050919050565b6145278161450c565b811461453257600080fd5b50565b6000813590506145448161451e565b92915050565b61455381614401565b811461455e57600080fd5b50565b6000813590506145708161454a565b92915050565b6000806040838503121561458d5761458c6144e7565b5b600061459b85828601614535565b92505060206145ac85828601614561565b9150509250929050565b60008115159050919050565b6145cb816145b6565b82525050565b60006020820190506145e660008301846145c2565b92915050565b6145f5816145b6565b811461460057600080fd5b50565b600081359050614612816145ec565b92915050565b60006020828403121561462e5761462d6144e7565b5b600061463c84828501614603565b91505092915050565b6000806040838503121561465c5761465b6144e7565b5b600061466a85828601614561565b925050602061467b85828601614561565b9150509250929050565b60008060006060848603121561469e5761469d6144e7565b5b60006146ac86828701614535565b93505060206146bd86828701614535565b92505060406146ce86828701614561565b9150509250925092565b6000602082840312156146ee576146ed6144e7565b5b60006146fc84828501614535565b91505092915050565b600060ff82169050919050565b61471b81614705565b811461472657600080fd5b50565b60008135905061473881614712565b92915050565b60008060408385031215614755576147546144e7565b5b600061476385828601614603565b925050602061477485828601614729565b9150509250929050565b61478781614705565b82525050565b60006020820190506147a2600083018461477e565b92915050565b600080600080600060a086880312156147c4576147c36144e7565b5b60006147d288828901614561565b95505060206147e388828901614561565b94505060406147f488828901614561565b935050606061480588828901614561565b925050608061481688828901614561565b9150509295509295909350565b6000806040838503121561483a576148396144e7565b5b600061484885828601614535565b925050602061485985828601614603565b9150509250929050565b600060208284031215614879576148786144e7565b5b600061488784828501614561565b91505092915050565b6148998161450c565b82525050565b60006020820190506148b46000830184614890565b92915050565b60006148c58261450c565b9050919050565b6148d5816148ba565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b60006020828403121561490e5761490d6144e7565b5b600061491c848285016148e3565b91505092915050565b60008060006060848603121561493e5761493d6144e7565b5b600061494c86828701614535565b935050602061495d86828701614535565b925050604061496e86828701614535565b9150509250925092565b6000806040838503121561498f5761498e6144e7565b5b600061499d85828601614535565b92505060206149ae85828601614535565b9150509250929050565b600080604083850312156149cf576149ce6144e7565b5b60006149dd85828601614603565b92505060206149ee85828601614561565b9150509250929050565b6000614a03826144ec565b9050919050565b614a13816149f8565b8114614a1e57600080fd5b50565b600081359050614a3081614a0a565b92915050565b600060208284031215614a4c57614a4b6144e7565b5b6000614a5a84828501614a21565b91505092915050565b6000819050919050565b6000614a88614a83614a7e846144ec565b614a63565b6144ec565b9050919050565b6000614a9a82614a6d565b9050919050565b6000614aac82614a8f565b9050919050565b614abc81614aa1565b82525050565b6000602082019050614ad76000830184614ab3565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614b13600683614440565b9150614b1e82614add565b602082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614b7f600b83614440565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b600081519050614bc48161454a565b92915050565b600060208284031215614be057614bdf6144e7565b5b6000614bee84828501614bb5565b91505092915050565b6000604082019050614c0c600083018561440b565b614c19602083018461440b565b9392505050565b6000614c2b82614a8f565b9050919050565b614c3b81614c20565b82525050565b6000602082019050614c566000830184614c32565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c9682614401565b9150614ca183614401565b9250828202614caf81614401565b91508282048414831517614cc657614cc5614c5c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d0782614401565b9150614d1283614401565b925082614d2257614d21614ccd565b5b828204905092915050565b6000614d3882614a8f565b9050919050565b614d4881614d2d565b82525050565b6000602082019050614d636000830184614d3f565b92915050565b6000819050919050565b6000614d8e614d89614d8484614d69565b614a63565b614401565b9050919050565b614d9e81614d73565b82525050565b6000604082019050614db96000830185614890565b614dc66020830184614d95565b9392505050565b6000604082019050614de26000830185614890565b614def602083018461440b565b9392505050565b6000614e0182614401565b9150614e0c83614401565b9250828203905081811115614e2457614e23614c5c565b5b92915050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b6000614e60601783614440565b9150614e6b82614e2a565b602082019050919050565b60006020820190508181036000830152614e8f81614e53565b9050919050565b6000614ea182614401565b9150614eac83614401565b9250828201905080821115614ec457614ec3614c5c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f00601b83614440565b9150614f0b82614eca565b602082019050919050565b60006020820190508181036000830152614f2f81614ef3565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f92602183614440565b9150614f9d82614f36565b604082019050919050565b60006020820190508181036000830152614fc181614f85565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615024603e83614440565b915061502f82614fc8565b604082019050919050565b6000602082019050818103600083015261505381615017565b9050919050565b7f506c656173652077616974206265747765656e2074776f206275797300000000600082015250565b6000615090601c83614440565b915061509b8261505a565b602082019050919050565b600060208201905081810360008301526150bf81615083565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006150fc601183614440565b9150615107826150c6565b602082019050919050565b6000602082019050818103600083015261512b816150ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151c58161450c565b82525050565b60006151d783836151bc565b60208301905092915050565b6000602082019050919050565b60006151fb82615190565b615205818561519b565b9350615210836151ac565b8060005b8381101561524157815161522888826151cb565b9750615233836151e3565b925050600181019050615214565b5085935050505092915050565b600060a082019050615263600083018861440b565b6152706020830187614d95565b818103604083015261528281866151f0565b90506152916060830185614890565b61529e608083018461440b565b9695505050505050565b600081905092915050565b50565b60006152c36000836152a8565b91506152ce826152b3565b600082019050919050565b60006152e4826152b6565b9150819050919050565b7f6d61726b6574696e672072656365697665722072656a6563746564204554482060008201527f7472616e73666572000000000000000000000000000000000000000000000000602082015250565b600061534a602883614440565b9150615355826152ee565b604082019050919050565b600060208201905081810360008301526153798161533d565b9050919050565b7f4465762072656365697665722072656a656374656420455448207472616e736660008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006153dc602283614440565b91506153e782615380565b604082019050919050565b6000602082019050818103600083015261540b816153cf565b9050919050565b600060c0820190506154276000830189614890565b615434602083018861440b565b6154416040830187614d95565b61544e6060830186614d95565b61545b6080830185614890565b61546860a083018461440b565b979650505050505050565b60008060006060848603121561548c5761548b6144e7565b5b600061549a86828701614bb5565b93505060206154ab86828701614bb5565b92505060406154bc86828701614bb5565b915050925092509256fea2646970667358221220a5aa7177a2793159420925deb759913d58eef4d5fd26b252719d07ca527a0f3664736f6c634300081200336080604052732f2a2543b76a4166549f7aab2e75bef0aefc5b0f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507382af49447d8a07e3bd95bd0d56f35241523fbab1600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d5564e8d4a51000600e55348015620000dd57600080fd5b506040516200225338038062002253833981810160405281019062000103919062000246565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015357731b02da8cb0d097eb8d57a175b88c7d8b4799750662000155565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000278565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020e82620001e1565b9050919050565b620002208162000201565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000602082840312156200025f576200025e620001dc565b5b60006200026f848285016200022f565b91505092915050565b611fcb80620002886000396000f3fe6080604052600436106100f35760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e219146102f9578063efca2eed14610324578063ffb2c4791461034f578063ffd49c8414610378576100f3565b80638aee81271461025c578063997664d714610285578063ce7c2ac2146102b0578063d0e30db0146102ef576100f3565b80632d48e896116100c65780632d48e896146101b25780633a98ef39146101db5780634fab0ae81461020657806389a3027114610231576100f3565b806311ce023d146100f857806314b6ca961461012357806315f7e05e1461014c57806328fd319814610175575b600080fd5b34801561010457600080fd5b5061010d6103a3565b60405161011a91906116f8565b60405180910390f35b34801561012f57600080fd5b5061014a600480360381019061014591906117a2565b6103a9565b005b34801561015857600080fd5b50610173600480360381019061016e91906117e2565b610668565b005b34801561018157600080fd5b5061019c600480360381019061019791906117e2565b6106cc565b6040516101a991906116f8565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d4919061180f565b6107e5565b005b3480156101e757600080fd5b506101f061084f565b6040516101fd91906116f8565b60405180910390f35b34801561021257600080fd5b5061021b610855565b60405161022891906116f8565b60405180910390f35b34801561023d57600080fd5b5061024661085b565b60405161025391906118ae565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190611907565b610881565b005b34801561029157600080fd5b5061029a61091d565b6040516102a791906116f8565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906117e2565b610923565b6040516102e693929190611934565b60405180910390f35b6102f761094d565b005b34801561030557600080fd5b5061030e610d1f565b60405161031b91906116f8565b60405180910390f35b34801561033057600080fd5b50610339610d25565b60405161034691906116f8565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061196b565b610d2b565b005b34801561038457600080fd5b5061038d610ebe565b60405161039a91906116f8565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461040157600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104565761045582610ec4565b5b6000811180156104a857506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104bb576104b682611157565b61051d565b60008114801561050d57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561051c5761051b82611206565b5b5b61058681610578600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461140d90919063ffffffff16565b61145790919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061061e600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b5565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c057600080fd5b6106c981610ec4565b50565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540361072057600090506107e0565b600061076d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b5565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107c8576000925050506107e0565b6107db818361140d90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461083d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d957600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a557600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a0291906119a7565b602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4391906119d7565b90506000600267ffffffffffffffff811115610a6257610a61611a04565b5b604051908082528060200260200182016040528015610a905781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610aca57610ac9611a33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b3b57610b3a611a33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610bd89493929190611b5b565b6000604051808303818588803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b50505050506000610cba83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c6b91906119a7565b602060405180830381865afa158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac91906119d7565b61140d90919063ffffffff16565b9050610cd18160095461145790919063ffffffff16565b600981905550610d14610d03600854610cf584600c546114e790919063ffffffff16565b61156190919063ffffffff16565b600b5461145790919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d8357600080fd5b6000600480549050905060008103610d9b5750610ebb565b6000805a905060005b8483108015610db257508381105b15610eb65783600f5410610dc9576000600f819055505b610e126004600f5481548110610de257610de1611a33565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115ab565b15610e6157610e606004600f5481548110610e3057610e2f611a33565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ec4565b5b610e86610e775a8461140d90919063ffffffff16565b8461145790919063ffffffff16565b92505a9150600f6000815480929190610e9e90611bd6565b91905055508080610eae90611bd6565b915050610da4565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611154576000610f1a826106cc565b9050600081111561115257610f3a81600a5461145790919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610f9d929190611c1e565b6020604051808303816000875af1158015610fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe09190611c7f565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061107a81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461145790919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061110b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b5565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905061121a9190611cac565b8154811061122b5761122a611a33565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106112a9576112a8611a33565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506113499190611cac565b8154811061135a57611359611a33565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806113d5576113d4611ce0565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061144f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611618565b905092915050565b60008082846114669190611d0f565b9050838110156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290611da0565b60405180910390fd5b8091505092915050565b60006114e0600c546114d2600b54856114e790919063ffffffff16565b61156190919063ffffffff16565b9050919050565b60008083036114f9576000905061155b565b600082846115079190611dc0565b90508284826115169190611e31565b14611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90611ed4565b60405180910390fd5b809150505b92915050565b60006115a383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061167c565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115fb9190611d0f565b1080156116115750600e5461160f836106cc565b115b9050919050565b6000838311158290611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579190611f73565b60405180910390fd5b506000838561166f9190611cac565b9050809150509392505050565b600080831182906116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba9190611f73565b60405180910390fd5b50600083856116d29190611e31565b9050809150509392505050565b6000819050919050565b6116f2816116df565b82525050565b600060208201905061170d60008301846116e9565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061174382611718565b9050919050565b61175381611738565b811461175e57600080fd5b50565b6000813590506117708161174a565b92915050565b61177f816116df565b811461178a57600080fd5b50565b60008135905061179c81611776565b92915050565b600080604083850312156117b9576117b8611713565b5b60006117c785828601611761565b92505060206117d88582860161178d565b9150509250929050565b6000602082840312156117f8576117f7611713565b5b600061180684828501611761565b91505092915050565b6000806040838503121561182657611825611713565b5b60006118348582860161178d565b92505060206118458582860161178d565b9150509250929050565b6000819050919050565b600061187461186f61186a84611718565b61184f565b611718565b9050919050565b600061188682611859565b9050919050565b60006118988261187b565b9050919050565b6118a88161188d565b82525050565b60006020820190506118c3600083018461189f565b92915050565b60006118d482611738565b9050919050565b6118e4816118c9565b81146118ef57600080fd5b50565b600081359050611901816118db565b92915050565b60006020828403121561191d5761191c611713565b5b600061192b848285016118f2565b91505092915050565b600060608201905061194960008301866116e9565b61195660208301856116e9565b61196360408301846116e9565b949350505050565b60006020828403121561198157611980611713565b5b600061198f8482850161178d565b91505092915050565b6119a181611738565b82525050565b60006020820190506119bc6000830184611998565b92915050565b6000815190506119d181611776565b92915050565b6000602082840312156119ed576119ec611713565b5b60006119fb848285016119c2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611a87611a82611a7d84611a62565b61184f565b6116df565b9050919050565b611a9781611a6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ad281611738565b82525050565b6000611ae48383611ac9565b60208301905092915050565b6000602082019050919050565b6000611b0882611a9d565b611b128185611aa8565b9350611b1d83611ab9565b8060005b83811015611b4e578151611b358882611ad8565b9750611b4083611af0565b925050600181019050611b21565b5085935050505092915050565b6000608082019050611b706000830187611a8e565b8181036020830152611b828186611afd565b9050611b916040830185611998565b611b9e60608301846116e9565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611be1826116df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c1357611c12611ba7565b5b600182019050919050565b6000604082019050611c336000830185611998565b611c4060208301846116e9565b9392505050565b60008115159050919050565b611c5c81611c47565b8114611c6757600080fd5b50565b600081519050611c7981611c53565b92915050565b600060208284031215611c9557611c94611713565b5b6000611ca384828501611c6a565b91505092915050565b6000611cb7826116df565b9150611cc2836116df565b9250828203905081811115611cda57611cd9611ba7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611d1a826116df565b9150611d25836116df565b9250828201905080821115611d3d57611d3c611ba7565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611d8a601b83611d43565b9150611d9582611d54565b602082019050919050565b60006020820190508181036000830152611db981611d7d565b9050919050565b6000611dcb826116df565b9150611dd6836116df565b9250828202611de4816116df565b91508282048414831517611dfb57611dfa611ba7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e3c826116df565b9150611e47836116df565b925082611e5757611e56611e02565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ebe602183611d43565b9150611ec982611e62565b604082019050919050565b60006020820190508181036000830152611eed81611eb1565b9050919050565b600081519050919050565b60005b83811015611f1d578082015181840152602081019050611f02565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f4582611ef4565b611f4f8185611d43565b9350611f5f818560208601611eff565b611f6881611f29565b840191505092915050565b60006020820190508181036000830152611f8d8184611f3a565b90509291505056fea264697066735822122062515403785a2f9f39b87a85777be4c6a1141946432fd3432d2b5486d4be7d5064736f6c63430008120033
Deployed ByteCode Sourcemap
12037:19548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14015:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16445:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16867:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23334:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31357:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16175:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29591:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17385:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30585:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30954:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30049:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23475:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3425:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16269:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12837:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18085:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27948:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27566:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17091:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14378:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27248:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14674:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16615:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14422:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12982:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17833:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16531:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16355:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30772:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27704:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14578:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17221:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3083:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14604:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28468:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12465:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12909:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31138:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29032:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12550:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16726:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29374:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26671:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12508:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3260:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30284:90;;;;;;;;;;;;;:::i;:::-;;3832:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29813:181;;;;;;;;;;;;;:::i;:::-;;26869:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27403:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14547:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14636:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14015:56;;;;:::o;16445:80::-;16493:13;16517:5;;;;;;;;;;;;;;;;;16510:12;;16445:80;:::o;16867:216::-;16942:4;16994:6;16959:11;:23;16971:10;16959:23;;;;;;;;;;;;;;;:32;16983:7;16959:32;;;;;;;;;;;;;;;:41;;;;17037:7;17016:37;;17025:10;17016:37;;;17046:6;17016:37;;;;;;:::i;:::-;;;;;;;;17071:4;17064:11;;16867:216;;;;:::o;23334:94::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23413:7:::1;23399:11;;:21;;;;;;;;;;;;;;;;;;23334:94:::0;:::o;31357:150::-;31437:4;31493:6;31461:29;31481:8;31461:19;:29::i;:::-;:38;31454:45;;31357:150;;;;:::o;16175:88::-;16230:7;16248:12;;16241:19;;16175:88;:::o;29591:183::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29707:7:::1;29689:15;:25;;;;29754:12;29725:26;:41;;;;29591:183:::0;;:::o;17385:370::-;17485:4;17540:17;17505:11;:19;17517:6;17505:19;;;;;;;;;;;;;;;:31;17525:10;17505:31;;;;;;;;;;;;;;;;:52;17502:186;;17607:69;17643:6;17607:69;;;;;;;;;;;;;;;;;:11;:19;17619:6;17607:19;;;;;;;;;;;;;;;:31;17627:10;17607:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17573:11;:19;17585:6;17573:19;;;;;;;;;;;;;;;:31;17593:10;17573:31;;;;;;;;;;;;;;;:103;;;;17502:186;17707:40;17721:6;17729:9;17740:6;17707:13;:40::i;:::-;17700:47;;17385:370;;;;;:::o;30585:146::-;30654:7;30681:11;;;;;;;;;;;:29;;;30711:11;30681:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30674:49;;30585:146;;;:::o;30954:142::-;31007:7;31034:54;31072:15;31082:4;;;;;;;;;;;31072:9;:15::i;:::-;31034:33;31051:15;31061:4;;;;;;;;;;;31051:9;:15::i;:::-;31034:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;31027:61;;30954:142;:::o;30049:183::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30159:11:::1;;;;;;;;;;;:35;;;30195:10;30207:16;30159:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30049:183:::0;;:::o;23475:164::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23580:7:::1;23559:18;;:28;;;;;;;;;;;;;;;;;;23622:9;23598:21;;:33;;;;;;;;;;;;;;;;;;23475:164:::0;;:::o;3425:103::-;3480:4;3515:5;;;;;;;;;;;3504:16;;:7;:16;;;3497:23;;3425:103;;;:::o;16269:80::-;16321:5;12720:2;16330:16;;16269:80;:::o;12837:59::-;;;;:::o;18085:283::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;18190:17:::1;18171:16;;:36;;;;;;;;;;;;;;;;;;18251:4;18218:11;:30;18230:17;18218:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;18303:4;18266:15;:34;18282:17;18266:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18356:4;18318:16;:35;18335:17;18318:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;18085:283:::0;:::o;27948:486::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28140:16:::1;28122:15;:34;;;;28179:10;28167:9;:22;;;;28219:17;28200:16;:36;;;;28265:16;28247:15;:34;;;;28306:77;28366:16;28306:55;28343:17;28306:32;28327:10;28306:16;:20;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;:59;;:77;;;;:::i;:::-;28292:11;:91;;;;28411:15;28394:14;:32;;;;27948:486:::0;;;;;:::o;27566:130::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27682:6:::1;27655:16;:24;27672:6;27655:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27566:130:::0;;:::o;17091:122::-;17146:4;17170:35;17178:7;17187:17;17170:7;:35::i;:::-;17163:42;;17091:122;;;:::o;14378:37::-;;;;;;;;;;;;;:::o;27248:120::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:6:::1;27332:11;:19;27344:6;27332:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27248:120:::0;;:::o;14674:30::-;;;;;;;;;;;;;:::o;16615:105::-;16681:7;16699:9;:18;16709:7;16699:18;;;;;;;;;;;;;;;;16692:25;;16615:105;;;:::o;14422:38::-;;;;;;;;;;;;;:::o;12982:63::-;;;;:::o;26481:157::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:44:::1;26624:5;26586:33;26603:15;26586:12;;:16;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;26568:15;:62;;;;26481:157:::0;:::o;17833:156::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17936:43:::1;17973:5;17936:32;17953:14;17936:12;;:16;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;17918:15;:61;;;;17833:156:::0;:::o;16531:78::-;16583:7;16601:5;;;;;;;;;;;16594:12;;16531:78;:::o;30420:110::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30489:11:::1;;;;;;;;;;;:26;;;30516:5;30489:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30420:110:::0;:::o;16355:84::-;16405:13;16429:7;;;;;;;;;;;;;;;;;16422:14;;16355:84;:::o;30772:136::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30862:6:::1;30856:3;:12;30848:21;;;::::0;::::1;;30897:3;30880:14;:20;;;;30772:136:::0;:::o;27704:209::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27816:6:::1;27790:15;:23;27806:6;27790:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27855:6;27833:11;:19;27845:6;27833:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27899:6;27872:16;:24;27889:6;27872:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27704:209:::0;;:::o;14578:19::-;;;;;;;;;;;;;:::o;17221:156::-;17301:4;17325:44;17339:10;17351:9;17362:6;17325:13;:44::i;:::-;17318:51;;17221:156;;;;:::o;3083:102::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3173:4:::1;3147:14:::0;:23:::1;3162:7;3147:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;3083:102:::0;:::o;14604:25::-;;;;:::o;28468:506::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28666:17:::1;28647:16;:36;;;;28707:11;28694:10;:24;;;;28749:18;28729:17;:38;;;;28797:17;28778:16;:36;;;;28842:81;28905:17;28842:58;28881:18;28842:34;28864:11;28842:17;:21;;:34;;;;:::i;:::-;:38;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;28827:12;:96;;;;28951:15;28934:14;:32;;;;28468:506:::0;;;;;:::o;12465:36::-;;;;;;;;;;;;;:::o;12909:60::-;;;;:::o;31138:167::-;31206:7;31233:64;31274:22;:20;:22::i;:::-;31233:36;31246:22;31266:1;31246:15;31256:4;;;;;;;;;;;31246:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;31233:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;31226:71;;31138:167;;;:::o;29032:296::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29200:22:::1;29176:21;;:46;;;;;;;;;;;;;;;;;;29256:21;29233:20;;:44;;;;;;;;;;;;;;;;;;29305:15;29288:14;;:32;;;;;;;;;;;;;;;;;;29032:296:::0;;;:::o;12550:29::-;;;;;;;;;;;;;:::o;16726:133::-;16810:7;16828:11;:19;16840:6;16828:19;;;;;;;;;;;;;;;:28;16848:7;16828:28;;;;;;;;;;;;;;;;16821:35;;16726:133;;;;:::o;29374:180::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29480:8:::1;29466:11;;:22;;;;;;;;;;;;;;;;;;29540:5;29530:7;29515:12;;:22;;;;:::i;:::-;:30;;;;:::i;:::-;29499:13;:46;;;;29374:180:::0;;:::o;26671:161::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26779:45:::1;26818:5;26779:34;26796:16;26779:12;;:16;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;26760:16;:64;;;;26671:161:::0;:::o;12508:35::-;;;;;;;;;;;;;:::o;3260:105::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3352:5:::1;3326:14;:23;3341:7;3326:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;3260:105:::0;:::o;30284:90::-;30329:11;;;;;;;;;;;:25;;;30355:10;30329:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30284:90::o;3832:189::-;2799:19;2807:10;2799:7;:19::i;:::-;2791:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3920:7:::1;3912:5;::::0;:15:::1;;;;;;;;;;;;;;;;;;3964:4;3938:14:::0;:23:::1;3953:7;3938:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;3984:29;4005:7;3984:29;;;;;;:::i;:::-;;;;;;;;3832:189:::0;:::o;29813:181::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29866:26:::1;29895:21;29866:50;;29935:21;;;;;;;;;;;29927:39;;:59;29967:18;29927:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29855:139;29813:181::o:0;26869:347::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26984:4:::1;26966:23;;:6;:23;;;;:41;;;;;27003:4;;;;;;;;;;;26993:14;;:6;:14;;;;26966:41;26958:50;;;::::0;::::1;;27046:6;27019:16;:24;27036:6;27019:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27066:6;27063:146;;;27088:11;;;;;;;;;;;:20;;;27109:6;27117:1;27088:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27063:146;;;27150:11;;;;;;;;;;;:20;;;27171:6;27179:9;:17;27189:6;27179:17;;;;;;;;;;;;;;;;27150:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27063:146;26869:347:::0;;:::o;27403:128::-;2968:24;2981:10;2968:12;:24::i;:::-;2960:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27517:6:::1;27491:15;:23;27507:6;27491:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27403:128:::0;;:::o;14547:24::-;;;;;;;;;;;;;:::o;3598:115::-;3658:4;3682:14;:23;3697:7;3682:23;;;;;;;;;;;;;;;;;;;;;;;;;3675:30;;3598:115;;;:::o;14636:31::-;;;;;;;;;;;;;:::o;485:192::-;571:7;604:1;599;:6;;607:12;591:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;631:9;647:1;643;:5;;;;:::i;:::-;631:17;;668:1;661:8;;;485:192;;;;;:::o;18407:1609::-;18499:4;18519:6;;;;;;;;;;;18516:63;;;18535:41;18550:6;18558:9;18569:6;18535:14;:41::i;:::-;18528:48;;;;18516:63;18635:14;:22;18650:6;18635:22;;;;;;;;;;;;;;;;;;;;;;;;;18634:23;:53;;;;;18662:14;:25;18677:9;18662:25;;;;;;;;;;;;;;;;;;;;;;;;;18661:26;18634:53;:83;;;;;18711:6;18691:26;;:16;;;;;;;;;;;:26;;;;18634:83;18631:160;;;18741:11;;;;;;;;;;;18733:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18631:160;18842:11;18869:4;;;;;;;;;;;18856:17;;:9;:17;;;18842:31;;18920:22;18935:6;18920:14;:22::i;:::-;18984:41;18999:6;19007:9;19018:6;18984:14;:41::i;:::-;19066:35;19083:6;19091:9;19066:16;:35::i;:::-;19139:47;19152:6;19160;19168:9;19179:6;19139:12;:47::i;:::-;19249:16;:14;:16::i;:::-;19246:35;;;19268:10;:8;:10::i;:::-;19246:35;19340:53;19362:6;19340:53;;;;;;;;;;;;;;;;;:9;:17;19350:6;19340:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19320:9;:17;19330:6;19320:17;;;;;;;;;;;;;;;:73;;;;19406:22;19431:21;19445:6;19431:13;:21::i;:::-;:56;;19481:6;19431:56;;;19455:23;19463:6;19471;19455:7;:23::i;:::-;19431:56;19406:81;;19521:40;19546:14;19521:9;:20;19531:9;19521:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;19498:9;:20;19508:9;19498:20;;;;;;;;;;;;;;;:63;;;;19607:16;:24;19624:6;19607:24;;;;;;;;;;;;;;;;;;;;;;;;;19603:119;;19652:11;;;;;;;;;;;:20;;;19673:6;19681:9;:17;19691:6;19681:17;;;;;;;;;;;;;;;;19652:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19648:63;19603:119;19738:16;:27;19755:9;19738:27;;;;;;;;;;;;;;;;;;;;;;;;;19734:129;;19786:11;;;;;;;;;;;:20;;;19807:9;19818;:20;19828:9;19818:20;;;;;;;;;;;;;;;;19786:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19782:69;19734:129;19879:11;;;;;;;;;;;:19;;;19899:14;;19879:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19875:51;19960:9;19943:43;;19952:6;19943:43;;;19971:14;19943:43;;;;;;:::i;:::-;;;;;;;;20004:4;19997:11;;;;18407:1609;;;;;;:::o;343:136::-;401:7;428:43;432:1;435;428:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;421:50;;343:136;;;;:::o;156:181::-;214:7;234:9;250:1;246;:5;;;;:::i;:::-;234:17;;275:1;270;:6;;262:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;328:1;321:8;;;156:181;;;;:::o;683:250::-;741:7;770:1;765;:6;761:47;;795:1;788:8;;;;761:47;820:9;836:1;832;:5;;;;:::i;:::-;820:17;;865:1;860;856;:5;;;;:::i;:::-;:10;848:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;924:1;917:8;;;683:250;;;;;:::o;939:132::-;997:7;1024:39;1028:1;1031;1024:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1017:46;;939:132;;;;:::o;20053:330::-;20146:4;20183:53;20205:6;20183:53;;;;;;;;;;;;;;;;;:9;:17;20193:6;20183:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;20163:9;:17;20173:6;20163:17;;;;;;;;;;;;;;;:73;;;;20270:32;20295:6;20270:9;:20;20280:9;20270:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;20247:9;:20;20257:9;20247:20;;;;;;;;;;;;;;;:55;;;;20335:9;20318:35;;20327:6;20318:35;;;20346:6;20318:35;;;;;;:::i;:::-;;;;;;;;20371:4;20364:11;;20053:330;;;;;:::o;20442:523::-;20502:6;20499:459;;;20539:16;;20524:12;:31;;;;20579:10;;20570:6;:19;;;;20620:17;;20604:13;:33;;;;20667:16;;20652:12;:31;;;;20709:12;;20698:8;:23;;;;20499:459;;;20769:15;;20754:12;:30;;;;20808:9;;20799:6;:18;;;;20848:16;;20832:13;:32;;;;20894:15;;20879:12;:30;;;;20935:11;;20924:8;:22;;;;20499:459;20442:523;:::o;21920:601::-;22025:14;:22;22040:6;22025:22;;;;;;;;;;;;;;;;;;;;;;;;;22024:23;:51;;;;;22052:15;:23;22068:6;22052:23;;;;;;;;;;;;;;;;;;;;;;;;;22051:24;22024:51;:82;;;;;22080:15;:26;22096:9;22080:26;;;;;;;;;;;;;;;;;;;;;;;;;22079:27;22024:82;:104;;;;;22123:5;;;;;;;;;;22110:18;;:9;:18;;;;22024:104;:134;;;;;22153:4;22132:26;;:9;:26;;;;22024:134;:165;;;;;22184:4;;;;;;;;;;;22163:26;;:9;:26;;;;22024:165;:186;;;;;22206:4;;;;;;;;;;;22193:17;;:9;:17;;;;22024:186;:223;;;;;22227:20;;;;;;;;;;;22214:33;;:9;:33;;;;22024:223;:261;;;;;22264:21;;;;;;;;;;;22251:34;;:9;:34;;;;22024:261;:292;;;;;22302:14;;;;;;;;;;;22289:27;;:9;:27;;;;22024:292;22020:494;;;22332:18;22353:20;22363:9;22353;:20::i;:::-;22332:41;;22421:15;;22410:6;22397:10;:19;;;;:::i;:::-;22396:40;;22388:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;22317:197;22020:494;21920:601;;;:::o;21510:378::-;21605:4;;;;;;;;;;;21595:14;;:6;:14;;;:49;;;;;21626:18;;;;;;;;;;;21595:49;:94;;;;;21662:16;:27;21679:9;21662:27;;;;;;;;;;;;;;;;;;;;;;;;;21661:28;21595:94;21591:290;;;21741:15;21714:13;:24;21728:9;21714:24;;;;;;;;;;;;;;;;:42;21706:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;21848:21;;;;;;;;;;;21830:39;;:15;:39;;;;:::i;:::-;21803:13;:24;21817:9;21803:24;;;;;;;;;;;;;;;:66;;;;21591:290;21510:378;;:::o;20997:478::-;21125:5;;;;;;;;;;21112:18;;:9;:18;;;21108:360;;21149:6;21146:311;;;21193:16;;21183:6;:26;;:53;;;;21213:15;:23;21229:6;21213:23;;;;;;;;;;;;;;;;;;;;;;;;;21183:53;:83;;;;21240:15;:26;21256:9;21240:26;;;;;;;;;;;;;;;;;;;;;;;;;21183:83;21175:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;21146:311;;;21347:15;;21337:6;:25;;:52;;;;21366:15;:23;21382:6;21366:23;;;;;;;;;;;;;;;;;;;;;;;;;21337:52;:82;;;;21393:15;:26;21409:9;21393:26;;;;;;;;;;;;;;;;;;;;;;;;;21337:82;21329:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;21146:311;21108:360;20997:478;;;;:::o;23106:197::-;23155:4;23193;;;;;;;;;;;23179:18;;:10;:18;;;;:38;;;;;23211:6;;;;;;;;;;;23210:7;23179:38;:62;;;;;23230:11;;;;;;;;;;;23179:62;:116;;;;;23282:13;;23254:9;:24;23272:4;23254:24;;;;;;;;;;;;;;;;:41;;23179:116;23172:123;;23106:197;:::o;23693:2067::-;14760:4;14751:6;;:13;;;;;;;;;;;;;;;;;;23742:27:::1;23772:60;23788:15;;23805:26;;23772:15;:60::i;:::-;:79;;23839:12;;23772:79;;;23835:1;23772:79;23742:109;;23862:23;23888:59;23945:1;23888:52;23931:8;;23888:38;23906:19;23888:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;23862:85;;23958:20;23981:34;23999:15;23981:13;;:17;;:34;;;;:::i;:::-;23958:57;;24028:21;24066:1;24052:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24028:40;;24097:4;24079;24084:1;24079:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;24123:4;;;;;;;;;;;24113;24118:1;24113:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;24140:21;24164;24140:45;;24198:6;;;;;;;;;;;:57;;;24270:12;24297:1;24313:4;24340;24360:15;24198:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24397:18;24418:40;24444:13;24418:21;:25;;:40;;;;:::i;:::-;24397:61;;24469:20;24492:40;24505:26;24529:1;24505:19;:23;;:26;;;;:::i;:::-;24492:8;;:12;;:40;;;;:::i;:::-;24469:63;;24543:27;24573:60;24631:1;24573:53;24613:12;24573:35;24588:19;24573:10;:14;;:35;;;;:::i;:::-;:39;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;24543:90;;24644:28;24675:47;24709:12;24675:29;24690:13;;24675:10;:14;;:29;;;;:::i;:::-;:33;;:47;;;;:::i;:::-;24644:78;;24733:27;24763:46;24796:12;24763:28;24778:12;;24763:10;:14;;:28;;;;:::i;:::-;:32;;:46;;;;:::i;:::-;24733:76;;24820:21;24844:40;24871:12;24844:22;24859:6;;24844:10;:14;;:22;;;;:::i;:::-;:26;;:40;;;;:::i;:::-;24820:64;;24904:11;;;;;;;;;;;:19;;;24931:20;24904:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;24900:66:::0;24977:21:::1;25035:20;;;;;;;;;;;25027:34;;25069:19;25095:5;25027:78;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24976:129;;;25117:15;25169:14;;;;;;;;;;;25161:28;;25197:13;25217:5;25161:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25116:111;;;25247:16;25239:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25327:10;25319:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25410:1;25392:15;:19;25389:364;;;25427:6;;;;;;;;;;;:22;;;25457:19;25504:4;25528:15;25562:1;25582::::0;25602:21:::1;;;;;;;;;;;25642:15;25427:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25692:49;25704:19;25725:15;25692:49;;;;;;;:::i;:::-;;;;;;;;25389:364;23731:2029;;;;;;;;;;;;;14778:5:::0;14769:6;;:14;;;;;;;;;;;;;;;;;;23693:2067::o;22570:114::-;22632:4;22657:11;:19;22669:6;22657:19;;;;;;;;;;;;;;;;;;;;;;;;;22656:20;22649:27;;22570:114;;;:::o;22726:333::-;22793:7;22813:17;22833:40;22858:14;;22833:20;22844:8;;22833:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;22813:60;;22913:39;22942:9;22913;:24;22931:4;22913:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22886:9;:24;22904:4;22886:24;;;;;;;;;;;;;;;:66;;;;22993:4;22968:42;;22977:6;22968:42;;;23000:9;22968:42;;;;;;:::i;:::-;;;;;;;;23030:21;23041:9;23030:6;:10;;:21;;;;:::i;:::-;23023:28;;;22726:333;;;;:::o;1077:345::-;1163:7;1262:1;1258;:5;1265:12;1250:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1289:9;1305:1;1301;:5;;;;:::i;:::-;1289:17;;1413:1;1406:8;;;1077:345;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964: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:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:323::-;4115:6;4164:2;4152:9;4143:7;4139:23;4135:32;4132:119;;;4170:79;;:::i;:::-;4132:119;4290:1;4315:50;4357:7;4348:6;4337:9;4333:22;4315:50;:::i;:::-;4305:60;;4261:114;4059:323;;;;:::o;4388:474::-;4456:6;4464;4513:2;4501:9;4492:7;4488:23;4484:32;4481:119;;;4519:79;;:::i;:::-;4481:119;4639:1;4664:53;4709:7;4700:6;4689:9;4685:22;4664:53;:::i;:::-;4654:63;;4610:117;4766:2;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4737:118;4388:474;;;;;:::o;4868:619::-;4945:6;4953;4961;5010:2;4998:9;4989:7;4985:23;4981:32;4978:119;;;5016:79;;:::i;:::-;4978:119;5136:1;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5107:117;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;5391:2;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5362:118;4868:619;;;;;:::o;5493:329::-;5552:6;5601:2;5589:9;5580:7;5576:23;5572:32;5569:119;;;5607:79;;:::i;:::-;5569:119;5727:1;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5698:117;5493:329;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:118::-;5991:22;6007:5;5991:22;:::i;:::-;5984:5;5981:33;5971:61;;6028:1;6025;6018:12;5971:61;5920:118;:::o;6044:135::-;6088:5;6126:6;6113:20;6104:29;;6142:31;6167:5;6142:31;:::i;:::-;6044:135;;;;:::o;6185:464::-;6248:6;6256;6305:2;6293:9;6284:7;6280:23;6276:32;6273:119;;;6311:79;;:::i;:::-;6273:119;6431:1;6456:50;6498:7;6489:6;6478:9;6474:22;6456:50;:::i;:::-;6446:60;;6402:114;6555:2;6581:51;6624:7;6615:6;6604:9;6600:22;6581:51;:::i;:::-;6571:61;;6526:116;6185:464;;;;;:::o;6655:112::-;6738:22;6754:5;6738:22;:::i;:::-;6733:3;6726:35;6655:112;;:::o;6773:214::-;6862:4;6900:2;6889:9;6885:18;6877:26;;6913:67;6977:1;6966:9;6962:17;6953:6;6913:67;:::i;:::-;6773:214;;;;:::o;6993:911::-;7088:6;7096;7104;7112;7120;7169:3;7157:9;7148:7;7144:23;7140:33;7137:120;;;7176:79;;:::i;:::-;7137:120;7296:1;7321:53;7366:7;7357:6;7346:9;7342:22;7321:53;:::i;:::-;7311:63;;7267:117;7423:2;7449:53;7494:7;7485:6;7474:9;7470:22;7449:53;:::i;:::-;7439:63;;7394:118;7551:2;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7522:118;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7807:3;7834:53;7879:7;7870:6;7859:9;7855:22;7834:53;:::i;:::-;7824:63;;7778:119;6993:911;;;;;;;;:::o;7910:468::-;7975:6;7983;8032:2;8020:9;8011:7;8007:23;8003:32;8000:119;;;8038:79;;:::i;:::-;8000:119;8158:1;8183:53;8228:7;8219:6;8208:9;8204:22;8183:53;:::i;:::-;8173:63;;8129:117;8285:2;8311:50;8353:7;8344:6;8333:9;8329:22;8311:50;:::i;:::-;8301:60;;8256:115;7910:468;;;;;:::o;8384:329::-;8443:6;8492:2;8480:9;8471:7;8467:23;8463:32;8460:119;;;8498:79;;:::i;:::-;8460:119;8618:1;8643:53;8688:7;8679:6;8668:9;8664:22;8643:53;:::i;:::-;8633:63;;8589:117;8384:329;;;;:::o;8719:118::-;8806:24;8824:5;8806:24;:::i;:::-;8801:3;8794:37;8719:118;;:::o;8843:222::-;8936:4;8974:2;8963:9;8959:18;8951:26;;8987:71;9055:1;9044:9;9040:17;9031:6;8987:71;:::i;:::-;8843:222;;;;:::o;9071:110::-;9122:7;9151:24;9169:5;9151:24;:::i;:::-;9140:35;;9071:110;;;:::o;9187:150::-;9274:38;9306:5;9274:38;:::i;:::-;9267:5;9264:49;9254:77;;9327:1;9324;9317:12;9254:77;9187:150;:::o;9343:167::-;9403:5;9441:6;9428:20;9419:29;;9457:47;9498:5;9457:47;:::i;:::-;9343:167;;;;:::o;9516:357::-;9589:6;9638:2;9626:9;9617:7;9613:23;9609:32;9606:119;;;9644:79;;:::i;:::-;9606:119;9764:1;9789:67;9848:7;9839:6;9828:9;9824:22;9789:67;:::i;:::-;9779:77;;9735:131;9516:357;;;;:::o;9879:619::-;9956:6;9964;9972;10021:2;10009:9;10000:7;9996:23;9992:32;9989:119;;;10027:79;;:::i;:::-;9989:119;10147:1;10172:53;10217:7;10208:6;10197:9;10193:22;10172:53;:::i;:::-;10162:63;;10118:117;10274:2;10300:53;10345:7;10336:6;10325:9;10321:22;10300:53;:::i;:::-;10290:63;;10245:118;10402:2;10428:53;10473:7;10464:6;10453:9;10449:22;10428:53;:::i;:::-;10418:63;;10373:118;9879:619;;;;;:::o;10504:474::-;10572:6;10580;10629:2;10617:9;10608:7;10604:23;10600:32;10597:119;;;10635:79;;:::i;:::-;10597:119;10755:1;10780:53;10825:7;10816:6;10805:9;10801:22;10780:53;:::i;:::-;10770:63;;10726:117;10882:2;10908:53;10953:7;10944:6;10933:9;10929:22;10908:53;:::i;:::-;10898:63;;10853:118;10504:474;;;;;:::o;10984:468::-;11049:6;11057;11106:2;11094:9;11085:7;11081:23;11077:32;11074:119;;;11112:79;;:::i;:::-;11074:119;11232:1;11257:50;11299:7;11290:6;11279:9;11275:22;11257:50;:::i;:::-;11247:60;;11203:114;11356:2;11382:53;11427:7;11418:6;11407:9;11403:22;11382:53;:::i;:::-;11372:63;;11327:118;10984:468;;;;;:::o;11458:104::-;11503:7;11532:24;11550:5;11532:24;:::i;:::-;11521:35;;11458:104;;;:::o;11568:138::-;11649:32;11675:5;11649:32;:::i;:::-;11642:5;11639:43;11629:71;;11696:1;11693;11686:12;11629:71;11568:138;:::o;11712:155::-;11766:5;11804:6;11791:20;11782:29;;11820:41;11855:5;11820:41;:::i;:::-;11712:155;;;;:::o;11873:345::-;11940:6;11989:2;11977:9;11968:7;11964:23;11960:32;11957:119;;;11995:79;;:::i;:::-;11957:119;12115:1;12140:61;12193:7;12184:6;12173:9;12169:22;12140:61;:::i;:::-;12130:71;;12086:125;11873:345;;;;:::o;12224:60::-;12252:3;12273:5;12266:12;;12224:60;;;:::o;12290:142::-;12340:9;12373:53;12391:34;12400:24;12418:5;12400:24;:::i;:::-;12391:34;:::i;:::-;12373:53;:::i;:::-;12360:66;;12290:142;;;:::o;12438:126::-;12488:9;12521:37;12552:5;12521:37;:::i;:::-;12508:50;;12438:126;;;:::o;12570:144::-;12638:9;12671:37;12702:5;12671:37;:::i;:::-;12658:50;;12570:144;;;:::o;12720:167::-;12825:55;12874:5;12825:55;:::i;:::-;12820:3;12813:68;12720:167;;:::o;12893:258::-;13004:4;13042:2;13031:9;13027:18;13019:26;;13055:89;13141:1;13130:9;13126:17;13117:6;13055:89;:::i;:::-;12893:258;;;;:::o;13157:156::-;13297:8;13293:1;13285:6;13281:14;13274:32;13157:156;:::o;13319:365::-;13461:3;13482:66;13546:1;13541:3;13482:66;:::i;:::-;13475:73;;13557:93;13646:3;13557:93;:::i;:::-;13675:2;13670:3;13666:12;13659:19;;13319:365;;;:::o;13690:419::-;13856:4;13894:2;13883:9;13879:18;13871:26;;13943:9;13937:4;13933:20;13929:1;13918:9;13914:17;13907:47;13971:131;14097:4;13971:131;:::i;:::-;13963:139;;13690:419;;;:::o;14115:161::-;14255:13;14251:1;14243:6;14239:14;14232:37;14115:161;:::o;14282:366::-;14424:3;14445:67;14509:2;14504:3;14445:67;:::i;:::-;14438:74;;14521:93;14610:3;14521:93;:::i;:::-;14639:2;14634:3;14630:12;14623:19;;14282:366;;;:::o;14654:419::-;14820:4;14858:2;14847:9;14843:18;14835:26;;14907:9;14901:4;14897:20;14893:1;14882:9;14878:17;14871:47;14935:131;15061:4;14935:131;:::i;:::-;14927:139;;14654:419;;;:::o;15079:143::-;15136:5;15167:6;15161:13;15152:22;;15183:33;15210:5;15183:33;:::i;:::-;15079:143;;;;:::o;15228:351::-;15298:6;15347:2;15335:9;15326:7;15322:23;15318:32;15315:119;;;15353:79;;:::i;:::-;15315:119;15473:1;15498:64;15554:7;15545:6;15534:9;15530:22;15498:64;:::i;:::-;15488:74;;15444:128;15228:351;;;;:::o;15585:332::-;15706:4;15744:2;15733:9;15729:18;15721:26;;15757:71;15825:1;15814:9;15810:17;15801:6;15757:71;:::i;:::-;15838:72;15906:2;15895:9;15891:18;15882:6;15838:72;:::i;:::-;15585:332;;;;;:::o;15923:140::-;15987:9;16020:37;16051:5;16020:37;:::i;:::-;16007:50;;15923:140;;;:::o;16069:159::-;16170:51;16215:5;16170:51;:::i;:::-;16165:3;16158:64;16069:159;;:::o;16234:250::-;16341:4;16379:2;16368:9;16364:18;16356:26;;16392:85;16474:1;16463:9;16459:17;16450:6;16392:85;:::i;:::-;16234:250;;;;:::o;16490:180::-;16538:77;16535:1;16528:88;16635:4;16632:1;16625:15;16659:4;16656:1;16649:15;16676:410;16716:7;16739:20;16757:1;16739:20;:::i;:::-;16734:25;;16773:20;16791:1;16773:20;:::i;:::-;16768:25;;16828:1;16825;16821:9;16850:30;16868:11;16850:30;:::i;:::-;16839:41;;17029:1;17020:7;17016:15;17013:1;17010:22;16990:1;16983:9;16963:83;16940:139;;17059:18;;:::i;:::-;16940:139;16724:362;16676:410;;;;:::o;17092:180::-;17140:77;17137:1;17130:88;17237:4;17234:1;17227:15;17261:4;17258:1;17251:15;17278:185;17318:1;17335:20;17353:1;17335:20;:::i;:::-;17330:25;;17369:20;17387:1;17369:20;:::i;:::-;17364:25;;17408:1;17398:35;;17413:18;;:::i;:::-;17398:35;17455:1;17452;17448:9;17443:14;;17278:185;;;;:::o;17469:134::-;17527:9;17560:37;17591:5;17560:37;:::i;:::-;17547:50;;17469:134;;;:::o;17609:147::-;17704:45;17743:5;17704:45;:::i;:::-;17699:3;17692:58;17609:147;;:::o;17762:238::-;17863:4;17901:2;17890:9;17886:18;17878:26;;17914:79;17990:1;17979:9;17975:17;17966:6;17914:79;:::i;:::-;17762:238;;;;:::o;18006:85::-;18051:7;18080:5;18069:16;;18006:85;;;:::o;18097:158::-;18155:9;18188:61;18206:42;18215:32;18241:5;18215:32;:::i;:::-;18206:42;:::i;:::-;18188:61;:::i;:::-;18175:74;;18097:158;;;:::o;18261:147::-;18356:45;18395:5;18356:45;:::i;:::-;18351:3;18344:58;18261:147;;:::o;18414:348::-;18543:4;18581:2;18570:9;18566:18;18558:26;;18594:71;18662:1;18651:9;18647:17;18638:6;18594:71;:::i;:::-;18675:80;18751:2;18740:9;18736:18;18727:6;18675:80;:::i;:::-;18414:348;;;;;:::o;18768:332::-;18889:4;18927:2;18916:9;18912:18;18904:26;;18940:71;19008:1;18997:9;18993:17;18984:6;18940:71;:::i;:::-;19021:72;19089:2;19078:9;19074:18;19065:6;19021:72;:::i;:::-;18768:332;;;;;:::o;19106:194::-;19146:4;19166:20;19184:1;19166:20;:::i;:::-;19161:25;;19200:20;19218:1;19200:20;:::i;:::-;19195:25;;19244:1;19241;19237:9;19229:17;;19268:1;19262:4;19259:11;19256:37;;;19273:18;;:::i;:::-;19256:37;19106:194;;;;:::o;19306:173::-;19446:25;19442:1;19434:6;19430:14;19423:49;19306:173;:::o;19485:366::-;19627:3;19648:67;19712:2;19707:3;19648:67;:::i;:::-;19641:74;;19724:93;19813:3;19724:93;:::i;:::-;19842:2;19837:3;19833:12;19826:19;;19485:366;;;:::o;19857:419::-;20023:4;20061:2;20050:9;20046:18;20038:26;;20110:9;20104:4;20100:20;20096:1;20085:9;20081:17;20074:47;20138:131;20264:4;20138:131;:::i;:::-;20130:139;;19857:419;;;:::o;20282:191::-;20322:3;20341:20;20359:1;20341:20;:::i;:::-;20336:25;;20375:20;20393:1;20375:20;:::i;:::-;20370:25;;20418:1;20415;20411:9;20404:16;;20439:3;20436:1;20433:10;20430:36;;;20446:18;;:::i;:::-;20430:36;20282:191;;;;:::o;20479:177::-;20619:29;20615:1;20607:6;20603:14;20596:53;20479:177;:::o;20662:366::-;20804:3;20825:67;20889:2;20884:3;20825:67;:::i;:::-;20818:74;;20901:93;20990:3;20901:93;:::i;:::-;21019:2;21014:3;21010:12;21003:19;;20662:366;;;:::o;21034:419::-;21200:4;21238:2;21227:9;21223:18;21215:26;;21287:9;21281:4;21277:20;21273:1;21262:9;21258:17;21251:47;21315:131;21441:4;21315:131;:::i;:::-;21307:139;;21034:419;;;:::o;21459:220::-;21599:34;21595:1;21587:6;21583:14;21576:58;21668:3;21663:2;21655:6;21651:15;21644:28;21459:220;:::o;21685:366::-;21827:3;21848:67;21912:2;21907:3;21848:67;:::i;:::-;21841:74;;21924:93;22013:3;21924:93;:::i;:::-;22042:2;22037:3;22033:12;22026:19;;21685:366;;;:::o;22057:419::-;22223:4;22261:2;22250:9;22246:18;22238:26;;22310:9;22304:4;22300:20;22296:1;22285:9;22281:17;22274:47;22338:131;22464:4;22338:131;:::i;:::-;22330:139;;22057:419;;;:::o;22482:249::-;22622:34;22618:1;22610:6;22606:14;22599:58;22691:32;22686:2;22678:6;22674:15;22667:57;22482:249;:::o;22737:366::-;22879:3;22900:67;22964:2;22959:3;22900:67;:::i;:::-;22893:74;;22976:93;23065:3;22976:93;:::i;:::-;23094:2;23089:3;23085:12;23078:19;;22737:366;;;:::o;23109:419::-;23275:4;23313:2;23302:9;23298:18;23290:26;;23362:9;23356:4;23352:20;23348:1;23337:9;23333:17;23326:47;23390:131;23516:4;23390:131;:::i;:::-;23382:139;;23109:419;;;:::o;23534:178::-;23674:30;23670:1;23662:6;23658:14;23651:54;23534:178;:::o;23718:366::-;23860:3;23881:67;23945:2;23940:3;23881:67;:::i;:::-;23874:74;;23957:93;24046:3;23957:93;:::i;:::-;24075:2;24070:3;24066:12;24059:19;;23718:366;;;:::o;24090:419::-;24256:4;24294:2;24283:9;24279:18;24271:26;;24343:9;24337:4;24333:20;24329:1;24318:9;24314:17;24307:47;24371:131;24497:4;24371:131;:::i;:::-;24363:139;;24090:419;;;:::o;24515:167::-;24655:19;24651:1;24643:6;24639:14;24632:43;24515:167;:::o;24688:366::-;24830:3;24851:67;24915:2;24910:3;24851:67;:::i;:::-;24844:74;;24927:93;25016:3;24927:93;:::i;:::-;25045:2;25040:3;25036:12;25029:19;;24688:366;;;:::o;25060:419::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:180::-;25533:77;25530:1;25523:88;25630:4;25627:1;25620:15;25654:4;25651:1;25644:15;25671:180;25719:77;25716:1;25709:88;25816:4;25813:1;25806:15;25840:4;25837:1;25830:15;25857:114;25924:6;25958:5;25952:12;25942:22;;25857:114;;;:::o;25977:184::-;26076:11;26110:6;26105:3;26098:19;26150:4;26145:3;26141:14;26126:29;;25977:184;;;;:::o;26167:132::-;26234:4;26257:3;26249:11;;26287:4;26282:3;26278:14;26270:22;;26167:132;;;:::o;26305:108::-;26382:24;26400:5;26382:24;:::i;:::-;26377:3;26370:37;26305:108;;:::o;26419:179::-;26488:10;26509:46;26551:3;26543:6;26509:46;:::i;:::-;26587:4;26582:3;26578:14;26564:28;;26419:179;;;;:::o;26604:113::-;26674:4;26706;26701:3;26697:14;26689:22;;26604:113;;;:::o;26753:732::-;26872:3;26901:54;26949:5;26901:54;:::i;:::-;26971:86;27050:6;27045:3;26971:86;:::i;:::-;26964:93;;27081:56;27131:5;27081:56;:::i;:::-;27160:7;27191:1;27176:284;27201:6;27198:1;27195:13;27176:284;;;27277:6;27271:13;27304:63;27363:3;27348:13;27304:63;:::i;:::-;27297:70;;27390:60;27443:6;27390:60;:::i;:::-;27380:70;;27236:224;27223:1;27220;27216:9;27211:14;;27176:284;;;27180:14;27476:3;27469:10;;26877:608;;;26753:732;;;;:::o;27491:831::-;27754:4;27792:3;27781:9;27777:19;27769:27;;27806:71;27874:1;27863:9;27859:17;27850:6;27806:71;:::i;:::-;27887:80;27963:2;27952:9;27948:18;27939:6;27887:80;:::i;:::-;28014:9;28008:4;28004:20;27999:2;27988:9;27984:18;27977:48;28042:108;28145:4;28136:6;28042:108;:::i;:::-;28034:116;;28160:72;28228:2;28217:9;28213:18;28204:6;28160:72;:::i;:::-;28242:73;28310:3;28299:9;28295:19;28286:6;28242:73;:::i;:::-;27491:831;;;;;;;;:::o;28328:147::-;28429:11;28466:3;28451:18;;28328:147;;;;:::o;28481:114::-;;:::o;28601:398::-;28760:3;28781:83;28862:1;28857:3;28781:83;:::i;:::-;28774:90;;28873:93;28962:3;28873:93;:::i;:::-;28991:1;28986:3;28982:11;28975:18;;28601:398;;;:::o;29005:379::-;29189:3;29211:147;29354:3;29211:147;:::i;:::-;29204:154;;29375:3;29368:10;;29005:379;;;:::o;29390:227::-;29530:34;29526:1;29518:6;29514:14;29507:58;29599:10;29594:2;29586:6;29582:15;29575:35;29390:227;:::o;29623:366::-;29765:3;29786:67;29850:2;29845:3;29786:67;:::i;:::-;29779:74;;29862:93;29951:3;29862:93;:::i;:::-;29980:2;29975:3;29971:12;29964:19;;29623:366;;;:::o;29995:419::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:221::-;30560:34;30556:1;30548:6;30544:14;30537:58;30629:4;30624:2;30616:6;30612:15;30605:29;30420:221;:::o;30647:366::-;30789:3;30810:67;30874:2;30869:3;30810:67;:::i;:::-;30803:74;;30886:93;30975:3;30886:93;:::i;:::-;31004:2;30999:3;30995:12;30988:19;;30647:366;;;:::o;31019:419::-;31185:4;31223:2;31212:9;31208:18;31200:26;;31272:9;31266:4;31262:20;31258:1;31247:9;31243:17;31236:47;31300:131;31426:4;31300:131;:::i;:::-;31292:139;;31019:419;;;:::o;31444:807::-;31693:4;31731:3;31720:9;31716:19;31708:27;;31745:71;31813:1;31802:9;31798:17;31789:6;31745:71;:::i;:::-;31826:72;31894:2;31883:9;31879:18;31870:6;31826:72;:::i;:::-;31908:80;31984:2;31973:9;31969:18;31960:6;31908:80;:::i;:::-;31998;32074:2;32063:9;32059:18;32050:6;31998:80;:::i;:::-;32088:73;32156:3;32145:9;32141:19;32132:6;32088:73;:::i;:::-;32171;32239:3;32228:9;32224:19;32215:6;32171:73;:::i;:::-;31444:807;;;;;;;;;:::o;32257:663::-;32345:6;32353;32361;32410:2;32398:9;32389:7;32385:23;32381:32;32378:119;;;32416:79;;:::i;:::-;32378:119;32536:1;32561:64;32617:7;32608:6;32597:9;32593:22;32561:64;:::i;:::-;32551:74;;32507:128;32674:2;32700:64;32756:7;32747:6;32736:9;32732:22;32700:64;:::i;:::-;32690:74;;32645:129;32813:2;32839:64;32895:7;32886:6;32875:9;32871:22;32839:64;:::i;:::-;32829:74;;32784:129;32257:663;;;;;:::o
Metadata Hash
ipfs://62515403785a2f9f39b87a85777be4c6a1141946432fd3432d2b5486d4be7d50