More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 105 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21278289 | 18 hrs ago | IN | 0 ETH | 0.00038875 | ||||
Approve | 21275105 | 29 hrs ago | IN | 0 ETH | 0.00041482 | ||||
Approve | 21272437 | 38 hrs ago | IN | 0 ETH | 0.00076996 | ||||
Approve | 21272429 | 38 hrs ago | IN | 0 ETH | 0.00092742 | ||||
Approve | 21272361 | 38 hrs ago | IN | 0 ETH | 0.0007545 | ||||
Approve | 21269423 | 2 days ago | IN | 0 ETH | 0.00015913 | ||||
Approve | 21259257 | 3 days ago | IN | 0 ETH | 0.00057966 | ||||
Approve | 21251774 | 4 days ago | IN | 0 ETH | 0.00094725 | ||||
Set Distribution | 21250781 | 4 days ago | IN | 0 ETH | 0.00042183 | ||||
Approve | 21214898 | 9 days ago | IN | 0 ETH | 0.000698 | ||||
Approve | 21208996 | 10 days ago | IN | 0 ETH | 0.00064719 | ||||
Approve | 21208280 | 10 days ago | IN | 0 ETH | 0.00052808 | ||||
Approve | 21193723 | 12 days ago | IN | 0 ETH | 0.00134711 | ||||
Approve | 21193705 | 12 days ago | IN | 0 ETH | 0.00149192 | ||||
Approve | 21193171 | 12 days ago | IN | 0 ETH | 0.0007613 | ||||
Approve | 21193148 | 12 days ago | IN | 0 ETH | 0.00078088 | ||||
Approve | 21193114 | 12 days ago | IN | 0 ETH | 0.00081085 | ||||
Approve | 21184141 | 13 days ago | IN | 0 ETH | 0.00196397 | ||||
Approve | 21179557 | 14 days ago | IN | 0 ETH | 0.0043413 | ||||
Approve | 21178892 | 14 days ago | IN | 0 ETH | 0.00147787 | ||||
Approve | 21178724 | 14 days ago | IN | 0 ETH | 0.00159247 | ||||
Approve | 21177241 | 14 days ago | IN | 0 ETH | 0.0009017 | ||||
Approve | 21172925 | 15 days ago | IN | 0 ETH | 0.00158875 | ||||
Approve | 21163443 | 16 days ago | IN | 0 ETH | 0.00071543 | ||||
Approve | 21145963 | 19 days ago | IN | 0 ETH | 0.00045839 |
Latest 20 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
21102284 | 25 days ago | 0.13878044 ETH | ||||
21102284 | 25 days ago | 0.13878044 ETH | ||||
21102284 | 25 days ago | 0.27756089 ETH | ||||
21042846 | 33 days ago | 0.14008382 ETH | ||||
21042846 | 33 days ago | 0.14008382 ETH | ||||
21042846 | 33 days ago | 0.28016764 ETH | ||||
20978053 | 42 days ago | 0.13832222 ETH | ||||
20978053 | 42 days ago | 0.13832222 ETH | ||||
20978053 | 42 days ago | 0.27664445 ETH | ||||
20978050 | 42 days ago | 0.13880877 ETH | ||||
20978050 | 42 days ago | 0.13880877 ETH | ||||
20978050 | 42 days ago | 0.27761755 ETH | ||||
20862791 | 58 days ago | 0.13873893 ETH | ||||
20862791 | 58 days ago | 0.13873893 ETH | ||||
20862791 | 58 days ago | 0.27747786 ETH | ||||
20841663 | 61 days ago | 0.14072872 ETH | ||||
20841663 | 61 days ago | 0.14072872 ETH | ||||
20841663 | 61 days ago | 0.28145744 ETH | ||||
20839947 | 61 days ago | 7.87 ETH | ||||
20839523 | 62 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
NECTRai
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-27 */ pragma solidity ^0.8.20; // SPDX-License-Identifier: Unlicensed /* NECTR signals give you a trading edge. Find out how at http://nectr-ai.com/ X https://x.com/NECTR_ai Community https://t.me/NECTR_ai Annoucements https://t.me/NECTRannouncements */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != - 1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } 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; } return a * b; } 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) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly {codehash := extcodehash(account)} return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success,) = recipient.call{value : amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value : weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable { address private _owner = msg.sender; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function factory() external pure returns (address); function WETH() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts); } contract NECTRai is IERC20, Ownable { using SafeMath for uint256; using Address for address; event HolderBuySell(address holder, string actionType, uint256 ethAmount, uint256 ethBalance); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } struct Distribution { uint256 development; uint256 rewards; } struct TaxFees { uint256 buyFee; uint256 sellFee; } struct BuySellHistory { string actionType; uint amount; } IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromRewards; mapping(address => BuySellHistory[]) private buySellHistoryMapping; string private _name = "NECTRai"; string private _symbol = "NECTR"; uint8 private _decimals = 9; uint256 private _tTotal = 100_000_000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public ethPriceToSwap = .3 ether; uint256 public _maxWalletAmount = 2_000_000 * 10 ** _decimals; address developmentAddress = 0x12FEAa83C120349E9129D4a84BA9606959E2B502; address public deadWallet = address(0xdead); event ProcessedRewards(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, address indexed processor); event SendRewards(uint256 EthAmount); IterableMapping private holderBalanceMap = new IterableMapping(); TaxFees public taxFees; RewardsTracker public rewardsTracker; Distribution public distribution = Distribution(50,50); constructor () { _balances[address(this)] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[0xC61Ec46C142dd8b64063A09a217172EaeBe73847] = true; _isExcludedFromFee[0x9c0D07510936C426D81d3d5549Ad66Cd3257Eb59] = true; _isExcludedFromFee[0x320aD2d83faB9a8242706a56350b7835561b8A8b] = true; _isExcludedFromFee[0x7969dE392cE5bFC347c8a35170956D34a6fFDa20] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[deadWallet] = true; _isExcludedFromRewards[uniswapV2Pair] = true; taxFees = TaxFees(5, 5); emit Transfer(address(0), msg.sender, _tTotal); } function openTrading() external onlyOwner() { require(uniswapV2Pair == address(0),"14"); _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "1")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "2")); return true; } function ethHolderBalance(address account) public view returns (uint) { return holderBalanceMap.get(account); } function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() { _maxWalletAmount = maxWalletAmount * 10 ** 9; } function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner { addRemoveFee(addresses, isExcludeFromFee); } function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner { addRemoveRewards(addresses, isExcluded); } function isExcludedFromRewards(address addr) public view returns (bool) { return _isExcludedFromRewards[addr]; } function addRemoveRewards(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromRewards[addr] = flag; } } function getBuySellHistory(address account) public view returns(BuySellHistory[] memory) { return buySellHistoryMapping[account]; } function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner { ethPriceToSwap = ethPriceToSwap_; } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setTaxFees(uint256 buyFee, uint256 sellFee) external onlyOwner { require(buyFee <= 5, "3"); require(sellFee <= 5, "4"); taxFees.buyFee = buyFee; taxFees.sellFee = sellFee; } receive() external payable {} function getTokenAmountByEthPrice() public view returns (uint256) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1]; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "5"); require(spender != address(0), "6"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "7"); require(to != address(0), "8"); require(amount > 0, "9"); bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); uint256 holderBalance = balanceOf(to).add(amount); uint256 taxAmount = 0; //block the bots, but allow them to transfer to dead wallet if they are blocked if (from != owner() && to != owner() && to != deadWallet && from != address(this) && to != address(this)) { if (from == uniswapV2Pair) { if(takeFees) { require(holderBalance <= _maxWalletAmount, "10"); } taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0; uint ethBuy = getEthValueFromTokens(amount); uint newBalance = holderBalanceMap.get(to).add(ethBuy); holderBalanceMap.set(to, newBalance); buySellHistoryMapping[to].push(BuySellHistory("BUY", ethBuy)); emit HolderBuySell(to, "BUY", ethBuy, newBalance); } if (from != uniswapV2Pair && to == uniswapV2Pair) { taxAmount = takeFees ? amount.mul(taxFees.sellFee).div(100) : 0; uint ethSell = getEthValueFromTokens(amount); int val = int(holderBalanceMap.get(from)) - int(ethSell); uint256 newBalance = val <= 0 ? 0 : uint256(val); holderBalanceMap.set(from, newBalance); buySellHistoryMapping[from].push(BuySellHistory("SELL", ethSell)); emit HolderBuySell(from, "SELL", ethSell, newBalance); swapTokens(); } if (from != uniswapV2Pair && to != uniswapV2Pair) { if(from != to) { uint ethVal = uint(holderBalanceMap.get(from)); if(Address.isContract(from)) { uint newBalance = holderBalanceMap.get(to).add(ethVal); holderBalanceMap.set(to, newBalance); buySellHistoryMapping[to].push(BuySellHistory("BUY", ethVal)); emit HolderBuySell(to, "BUY", ethVal, newBalance); } else { holderBalanceMap.set(to, ethVal); } holderBalanceMap.set(from, 0); } } syncRewards(from, to); } uint256 transferAmount = amount.sub(taxAmount); _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(transferAmount); _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(from, to, amount); } function airDrops(address[] calldata holders, uint256[] calldata amounts, uint256[] calldata ethSaleValues) external onlyOwner { require(holders.length == amounts.length && holders.length == ethSaleValues.length, "holders and amounts don't match"); require(address(rewardsTracker) != address(0), "13"); address from = address(this); for(uint256 i=0; i < holders.length; i++) { address to = holders[i]; uint256 amount = amounts[i]; _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(amount); holderBalanceMap.set(to, ethSaleValues[i]); syncRewards(from, to); emit Transfer(from, to, amount); } } function updateHolderBalances(address[] calldata holders, uint256[] calldata ethAmounts) external onlyOwner { require(holders.length == ethAmounts.length, "holders and amounts don't match"); for(uint256 i=0; i < holders.length; i++) { uint256 ethAmount = ethAmounts[i]; address holder = holders[i]; holderBalanceMap.set(holder, ethAmount); } } function syncRewards(address from, address to) private { try rewardsTracker.setTokenBalance(from) {} catch{} try rewardsTracker.setTokenBalance(to) {} catch{} try rewardsTracker.process() returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedRewards(iterations, claims, lastProcessedIndex, true, tx.origin); }catch {} } function swapTokens() private { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { uint256 tokenAmount = getTokenAmountByEthPrice(); if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) { //send eth to wallets investment and dev swapTokensForEth(tokenAmount); distributeShares(); } } } function getEthValueFromTokens(uint tokenAmount) public view returns (uint) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); return uniswapV2Router.getAmountsIn(tokenAmount, path)[0]; } function distributeShares() private lockTheSwap { uint256 ethBalance = address(this).balance; uint256 development = ethBalance.mul(distribution.development).div(100); uint256 rewards = ethBalance.mul(distribution.rewards).div(100); payable(developmentAddress).transfer(development); sendEthRewards(rewards); } function manualSwap() external { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { if (!inSwapAndLiquify) { swapTokensForEth(contractTokenBalance); distributeShares(); } } } function setDistribution(uint256 development, uint256 rewards) external onlyOwner { distribution.development = development; distribution.rewards = rewards; } function setRewardsTracker(address rewardsContractAddress) external onlyOwner { rewardsTracker = RewardsTracker(payable(rewardsContractAddress)); } function sendEthRewards(uint256 rewards) private { (bool success,) = address(rewardsTracker).call{value : rewards}(""); if (success) { emit SendRewards(rewards); } } function removeEthFromContract() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } } contract IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } Map private map; function get(address key) public view returns (uint) { return map.values[key]; } function keyExists(address key) public view returns (bool) { return (getIndexOfKey(key) != - 1); } function getIndexOfKey(address key) public view returns (int) { if (!map.inserted[key]) { return - 1; } return int(map.indexOf[key]); } function getKeyAtIndex(uint index) public view returns (address) { return map.keys[index]; } function size() public view returns (uint) { return map.keys.length; } function set(address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract RewardsTracker is IERC20, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2 ** 128; uint256 internal magnifiedRewardPerShare; mapping(address => int256) internal magnifiedRewardCorrections; mapping(address => uint256) internal withdrawnRewards; mapping(address => uint256) internal claimedRewards; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "NECTRai Rewards"; string private _symbol = "NECTREWARDS"; uint8 private _decimals = 9; uint256 public totalRewardsDistributed; IterableMapping private tokenHoldersMap = new IterableMapping(); uint256 public gasForProcessing = 50000; NECTRai private nectraiErc20; event updateBalance(address addr, uint256 amount); event RewardsDistributed(address indexed from, uint256 weiAmount); event RewardsWithdrawn(address indexed to, uint256 weiAmount); uint256 public lastProcessedIndex; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait = 3600; event ExcludeFromRewards(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); struct UpdateRewardsTiers { uint Scout; uint Gatherer; uint Guardian; uint Royal; } UpdateRewardsTiers public updateRewardsTiers; constructor() { updateRewardsTiers = UpdateRewardsTiers( .2 ether, 1 ether, 2 ether, 5 ether); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function getRewardsLevel(uint256 amount) public view returns (uint) { uint tierLevel = 0; if(amount >= updateRewardsTiers.Scout) { tierLevel = 100_000_000_000; } if(amount >= updateRewardsTiers.Gatherer) { tierLevel = 1_000_000_000_000; } if(amount >= updateRewardsTiers.Guardian) { tierLevel = 5_000_000_000_000; } if(amount >= updateRewardsTiers.Royal) { tierLevel = 20_000_000_000_000; } return tierLevel; } function transfer(address, uint256) public pure returns (bool) { require(false, "No transfers allowed in reward tracker"); return true; } function transferFrom(address, address, uint256) public pure override returns (bool) { require(false, "No transfers allowed in reward tracker"); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value"); gasForProcessing = newValue; } function setTokenBalance(address account) public { uint256 balance = nectraiErc20.ethHolderBalance(account); if (!nectraiErc20.isExcludedFromRewards(account)) { uint tierLevel = getRewardsLevel(balance); if (tierLevel > 100_000_000_000) { _setBalance(account, tierLevel); tokenHoldersMap.set(account, tierLevel); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } } else { if (balanceOf(account) > 0) { _setBalance(account, 0); tokenHoldersMap.remove(account); } } processAccount(payable(account), true); } function updateTokenBalances(address[] memory accounts) external { uint256 index = 0; while (index < accounts.length) { setTokenBalance(accounts[index]); index += 1; } } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); magnifiedRewardCorrections[account] = magnifiedRewardCorrections[account] .sub((magnifiedRewardPerShare.mul(amount)).toInt256Safe()); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); magnifiedRewardCorrections[account] = magnifiedRewardCorrections[account] .add((magnifiedRewardPerShare.mul(amount)).toInt256Safe()); } receive() external payable { distributeRewards(); } function setDATContract(address contractAddr) external onlyOwner { nectraiErc20 = NECTRai(payable(contractAddr)); } function excludeFromRewards(address account) external onlyOwner { _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromRewards(account); } function distributeRewards() public payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedRewardPerShare = magnifiedRewardPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit RewardsDistributed(msg.sender, msg.value); totalRewardsDistributed = totalRewardsDistributed.add(msg.value); } } function withdrawReward() public virtual { _withdrawRewardOfUser(payable(msg.sender)); } function _withdrawRewardOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableReward = withdrawableRewardOf(user); if (_withdrawableReward > 0) { withdrawnRewards[user] = withdrawnRewards[user].add(_withdrawableReward); emit RewardsWithdrawn(user, _withdrawableReward); (bool success,) = user.call{value : _withdrawableReward, gas : 3000}(""); if (!success) { withdrawnRewards[user] = withdrawnRewards[user].sub(_withdrawableReward); return 0; } return _withdrawableReward; } return 0; } function rewardOf(address _owner) public view returns (uint256) { return withdrawableRewardOf(_owner); } function withdrawableRewardOf(address _owner) public view returns (uint256) { return accumulativeRewardOf(_owner).sub(withdrawnRewards[_owner]); } function withdrawnRewardOf(address _owner) public view returns (uint256) { return withdrawnRewards[_owner]; } function accumulativeRewardOf(address _owner) public view returns (uint256) { return magnifiedRewardPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedRewardCorrections[_owner]).toUint256Safe() / magnitude; } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.size(); } function getNumberOfTokenHoldersByLevel(uint amount) external view returns (uint256) { uint256 total = 0; for(uint256 i=0; i < tokenHoldersMap.size(); i++) { address account = tokenHoldersMap.getKeyAtIndex(i); uint256 balance = balanceOf(account); if(balance == amount) { total += 1; } } return total; } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableRewards, uint256 totalRewards, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = - 1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ? tokenHoldersMap.size().sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableRewards = withdrawableRewardOf(account); totalRewards = accumulativeRewardOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function process() public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.size(); if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gasForProcessing && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.size()) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex); if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccountByDeployer(address payable account, bool automatic) external onlyOwner { processAccount(account, automatic); } function totalRewardClaimed(address account) public view returns (uint256) { return claimedRewards[account]; } function processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawRewardOfUser(account); if (amount > 0) { uint256 totalClaimed = claimedRewards[account]; claimedRewards[account] = amount.add(totalClaimed); lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } //This should never be used, but available in case of unforseen issues function sendEthBack() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } }
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":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"string","name":"actionType","type":"string"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethBalance","type":"uint256"}],"name":"HolderBuySell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"ethSaleValues","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ethHolderBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBuySellHistory","outputs":[{"components":[{"internalType":"string","name":"actionType","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct NECTRai.BuySellHistory[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthValueFromTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEthFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsTracker","outputs":[{"internalType":"contract RewardsTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardsContractAddress","type":"address"}],"name":"setRewardsTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"ethAmounts","type":"uint256[]"}],"name":"updateHolderBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f4e45435452616900000000000000000000000000000000000000000000000000815250600890816200011d919062000a12565b506040518060400160405280600581526020017f4e454354520000000000000000000000000000000000000000000000000000008152506009908162000164919062000a12565b506009600a5f6101000a81548160ff021916908360ff160217905550600a5f9054906101000a900460ff16600a6200019d919062000c7f565b6305f5e100620001ae919062000ccf565b600b556001600c60016101000a81548160ff021916908315150217905550670429d069189e0000600d55600a5f9054906101000a900460ff16600a620001f5919062000c7f565b621e848062000205919062000ccf565b600e557312feaa83c120349e9129d4a84ba9606959e2b502600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620002ac90620007a0565b604051809103905ff080158015620002c6573d5f803e3d5ffd5b5060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806040016040528060328152602001603281525060155f820151815f01556020820151816001015550503480156200033f575f80fd5b50600b5460035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160055f620003996200077960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73c61ec46c142dd8b64063a09a217172eaebe7384773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f739c0d07510936c426d81d3d5549ad66cd3257eb5973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73320ad2d83fab9a8242706a56350b7835561b8a8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f737969de392ce5bfc347c8a35170956d34a6ffda2073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f620005a16200077960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550604051806040016040528060058152602001600581525060125f820151815f0155602082015181600101559050503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200076b919062000d2a565b60405180910390a362000d45565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a968062006d2a83390190565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200082a57607f821691505b60208210810362000840576200083f620007e5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000867565b620008b0868362000867565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620008fa620008f4620008ee84620008c8565b620008d1565b620008c8565b9050919050565b5f819050919050565b6200091583620008da565b6200092d620009248262000901565b84845462000873565b825550505050565b5f90565b6200094362000935565b620009508184846200090a565b505050565b5b8181101562000977576200096b5f8262000939565b60018101905062000956565b5050565b601f821115620009c657620009908162000846565b6200099b8462000858565b81016020851015620009ab578190505b620009c3620009ba8562000858565b83018262000955565b50505b505050565b5f82821c905092915050565b5f620009e85f1984600802620009cb565b1980831691505092915050565b5f62000a028383620009d7565b9150826002028217905092915050565b62000a1d82620007ae565b67ffffffffffffffff81111562000a395762000a38620007b8565b5b62000a45825462000812565b62000a528282856200097b565b5f60209050601f83116001811462000a88575f841562000a73578287015190505b62000a7f8582620009f5565b86555062000aee565b601f19841662000a988662000846565b5f5b8281101562000ac15784890151825560018201915060208501945060208101905062000a9a565b8683101562000ae1578489015162000add601f891682620009d7565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000b805780860481111562000b585762000b5762000af6565b5b600185161562000b685780820291505b808102905062000b788562000b23565b945062000b38565b94509492505050565b5f8262000b9a576001905062000c6c565b8162000ba9575f905062000c6c565b816001811462000bc2576002811462000bcd5762000c03565b600191505062000c6c565b60ff84111562000be25762000be162000af6565b5b8360020a91508482111562000bfc5762000bfb62000af6565b5b5062000c6c565b5060208310610133831016604e8410600b841016171562000c3d5782820a90508381111562000c375762000c3662000af6565b5b62000c6c565b62000c4c848484600162000b2f565b9250905081840481111562000c665762000c6562000af6565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000c8b82620008c8565b915062000c988362000c73565b925062000cc77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b89565b905092915050565b5f62000cdb82620008c8565b915062000ce883620008c8565b925082820262000cf881620008c8565b9150828204841483151762000d125762000d1162000af6565b5b5092915050565b62000d2481620008c8565b82525050565b5f60208201905062000d3f5f83018462000d19565b92915050565b615fd78062000d535f395ff3fe608060405260043610610249575f3560e01c80635342acb4116101385780638da5cb5b116100b5578063b2abbbc411610079578063b2abbbc414610892578063ba385abb146108ba578063c9567bf9146108e2578063dd62ed3e146108f8578063f18dba2614610934578063f2fde38b1461095c57610250565b80638da5cb5b1461079c57806395d89b41146107c657806397995706146107f0578063a457c2d71461081a578063a9059cbb1461085657610250565b806370a08231116100fc57806370a08231146106d0578063715018a61461070c57806371cd56af1461072257806381230a831461074a57806385141a771461077257610250565b80635342acb4146105eb57806354a5df1f1461062757806359a05f89146106515780635ee58efc1461067b5780636c0a24eb146106a657610250565b806327a14fc2116101c6578063441d801f1161018a578063441d801f1461051d57806349bd5a5e146105455780634a74bb021461056f5780634fda2e121461059957806351bc3c85146105d557610250565b806327a14fc21461043d578063280d382114610465578063313ce5671461047b578063345487d0146104a557806339509351146104e157610250565b806311f0b5161161020d57806311f0b5161461034957806314f944bd146103715780631694505e146103ad57806318160ddd146103d757806323b872dd1461040157610250565b806304dccacb1461025457806306fdde031461027c578063095ea7b3146102a65780630ddc0976146102e25780630e8322731461030d57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061027a60048036038101906102759190614759565b610984565b005b348015610287575f80fd5b50610290610b53565b60405161029d9190614861565b60405180910390f35b3480156102b1575f80fd5b506102cc60048036038101906102c7919061490e565b610be3565b6040516102d99190614966565b60405180910390f35b3480156102ed575f80fd5b506102f6610bf9565b60405161030492919061498e565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e91906149b5565b610c0a565b6040516103409190614966565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a91906149e0565b610c5c565b005b34801561037c575f80fd5b5061039760048036038101906103929190614a90565b61107c565b6040516103a49190614abb565b60405180910390f35b3480156103b8575f80fd5b506103c16112b4565b6040516103ce9190614b2f565b60405180910390f35b3480156103e2575f80fd5b506103eb6112d9565b6040516103f89190614abb565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614b48565b6112e2565b6040516104349190614966565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190614a90565b6113c5565b005b348015610470575f80fd5b5061047961146b565b005b348015610486575f80fd5b5061048f61154a565b60405161049c9190614bb3565b60405180910390f35b3480156104b0575f80fd5b506104cb60048036038101906104c691906149b5565b61155f565b6040516104d89190614abb565b60405180910390f35b3480156104ec575f80fd5b506105076004803603810190610502919061490e565b611600565b6040516105149190614966565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190614bf6565b6116a0565b005b348015610550575f80fd5b5061055961173d565b6040516105669190614c62565b60405180910390f35b34801561057a575f80fd5b50610583611762565b6040516105909190614966565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba91906149b5565b611775565b6040516105cc9190614dc7565b60405180910390f35b3480156105e0575f80fd5b506105e96118a7565b005b3480156105f6575f80fd5b50610611600480360381019061060c91906149b5565b6118e4565b60405161061e9190614966565b60405180910390f35b348015610632575f80fd5b5061063b611936565b6040516106489190614abb565b60405180910390f35b34801561065c575f80fd5b5061066561193c565b6040516106729190614e18565b60405180910390f35b348015610686575f80fd5b5061068f611961565b60405161069d92919061498e565b60405180910390f35b3480156106b1575f80fd5b506106ba611972565b6040516106c79190614abb565b60405180910390f35b3480156106db575f80fd5b506106f660048036038101906106f191906149b5565b611978565b6040516107039190614abb565b60405180910390f35b348015610717575f80fd5b506107206119be565b005b34801561072d575f80fd5b5061074860048036038101906107439190614bf6565b611b05565b005b348015610755575f80fd5b50610770600480360381019061076b9190614e31565b611ba2565b005b34801561077d575f80fd5b50610786611cce565b6040516107939190614c62565b60405180910390f35b3480156107a7575f80fd5b506107b0611cf3565b6040516107bd9190614c62565b60405180910390f35b3480156107d1575f80fd5b506107da611d1a565b6040516107e79190614861565b60405180910390f35b3480156107fb575f80fd5b50610804611daa565b6040516108119190614abb565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b919061490e565b611fe3565b60405161084d9190614966565b60405180910390f35b348015610861575f80fd5b5061087c6004803603810190610877919061490e565b6120ba565b6040516108899190614966565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b39190614a90565b6120d0565b005b3480156108c5575f80fd5b506108e060048036038101906108db91906149b5565b612167565b005b3480156108ed575f80fd5b506108f6612237565b005b348015610903575f80fd5b5061091e60048036038101906109199190614e6f565b6126ed565b60405161092b9190614abb565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190614e31565b61276f565b005b348015610967575f80fd5b50610982600480360381019061097d91906149b5565b612813565b005b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890614ef7565b60405180910390fd5b818190508484905014610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090614f5f565b60405180910390fd5b5f5b84849050811015610b4c575f838383818110610a7a57610a79614f7d565b5b9050602002013590505f868684818110610a9757610a96614f7d565b5b9050602002016020810190610aac91906149b5565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82882846040518363ffffffff1660e01b8152600401610b0a929190614faa565b5f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b5050505050508080610b4490614ffe565b915050610a5b565b5050505050565b606060088054610b6290615072565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90615072565b8015610bd95780601f10610bb057610100808354040283529160200191610bd9565b820191905f5260205f20905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b5f610bef3384846129c9565b6001905092915050565b6012805f0154908060010154905082565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614ef7565b60405180910390fd5b8383905086869050148015610d0357508181905086869050145b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990614f5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906150ec565b60405180910390fd5b5f3090505f5b87879050811015611072575f888883818110610df657610df5614f7d565b5b9050602002016020810190610e0b91906149b5565b90505f878784818110610e2157610e20614f7d565b5b905060200201359050610e7a8160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610f0b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883888887818110610f9d57610f9c614f7d565b5b905060200201356040518363ffffffff1660e01b8152600401610fc1929190614faa565b5f604051808303815f87803b158015610fd8575f80fd5b505af1158015610fea573d5f803e3d5ffd5b50505050610ff88483612c32565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110559190614abb565b60405180910390a35050808061106a90614ffe565b915050610dd7565b5050505050505050565b5f80600267ffffffffffffffff8111156110995761109861510a565b5b6040519080825280602002602001820160405280156110c75781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611134573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611158919061514b565b815f8151811061116b5761116a614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111ba576111b9614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b815260040161125092919061522d565b5f60405180830381865afa15801561126a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611292919061537a565b5f815181106112a4576112a3614f7d565b5b6020026020010151915050919050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b54905090565b5f6112ee848484612e25565b6113ba84336113b5856040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613f5e9092919063ffffffff16565b6129c9565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614ef7565b60405180910390fd5b633b9aca008161146291906153c1565b600e8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614ef7565b60405180910390fd5b5f479050611504611cf3565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611546573d5f803e3d5ffd5b5050565b5f600a5f9054906101000a900460ff16905090565b5f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016115ba9190614c62565b602060405180830381865afa1580156115d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f99190615402565b9050919050565b5f61169633846116918560045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b6129c9565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614ef7565b60405180910390fd5b611738838383613fc0565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b606060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561189c578382905f5260205f2090600202016040518060400160405290815f8201805461180390615072565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90615072565b801561187a5780601f106118515761010080835404028352916020019161187a565b820191905f5260205f20905b81548152906001019060200180831161185d57829003601f168201915b50505050508152602001600182015481525050815260200190600101906117d3565b505050509050919050565b5f6118b130611978565b90505f8111156118e157600c5f9054906101000a900460ff166118e0576118d781614066565b6118df61429c565b5b5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015805f0154908060010154905082565b600e5481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990614ef7565b60405180910390fd5b611b9d8383836143a1565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614ef7565b60405180910390fd5b6005821115611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90615477565b60405180910390fd5b6005811115611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae906154df565b60405180910390fd5b8160125f0181905550806012600101819055505050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611d2990615072565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5590615072565b8015611da05780601f10611d7757610100808354040283529160200191611da0565b820191905f5260205f20905b815481529060010190602001808311611d8357829003601f168201915b5050505050905090565b5f80600267ffffffffffffffff811115611dc757611dc661510a565b5b604051908082528060200260200182016040528015611df55781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e86919061514b565b815f81518110611e9957611e98614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ee857611ee7614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611f8092919061522d565b5f60405180830381865afa158015611f9a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc2919061537a565b600181518110611fd557611fd4614f7d565b5b602002602001015191505090565b5f6120b033846120ab856040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613f5e9092919063ffffffff16565b6129c9565b6001905092915050565b5f6120c6338484612e25565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614ef7565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90614ef7565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a90615547565b60405180910390fd5b6123813060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f919061514b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b9919061514b565b6040518363ffffffff1660e01b81526004016124d6929190615565565b6020604051808303815f875af11580156124f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612516919061514b565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061259d30611978565b5f806125a7611cf3565b426040518863ffffffff1660e01b81526004016125c9969594939291906155c5565b60606040518083038185885af11580156125e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061260a9190615624565b50505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126aa929190614faa565b6020604051808303815f875af11580156126c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ea9190615688565b50565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614ef7565b60405180910390fd5b8160155f0181905550806015600101819055505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590615723565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061578b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c906157f3565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b7f9190614abb565b60405180910390a3505050565b5f612bcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f5e565b905092915050565b5f808284612be39190615811565b905083811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061588e565b60405180910390fd5b8091505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1836040518263ffffffff1660e01b8152600401612c8c9190614c62565b5f604051808303815f87803b158015612ca3575f80fd5b505af1925050508015612cb4575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1826040518263ffffffff1660e01b8152600401612d0f9190614c62565b5f604051808303815f87803b158015612d26575f80fd5b505af1925050508015612d37575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b81526004016060604051808303815f875af1925050508015612dc257506040513d601f19601f82011682018060405250810190612dbf9190615624565b60015b15612e21573273ffffffffffffffffffffffffffffffffffffffff16600115157fd401621dbefa4e4b58dfded2f6ce557f2bf581dde5dca5670c9993d2fb1bee0d858585604051612e15939291906158ac565b60405180910390a35050505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a9061592b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615993565b60405180910390fd5b5f8111612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a906159fb565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612fe2575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130215750612ff1611cf3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130605750613030611cf3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90505f61307e8361307086611978565b612bd590919063ffffffff16565b90505f613089611cf3565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130f757506130c7611cf3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613150575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561318857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156131c057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d275760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036134eb57821561326557600e54821115613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90615a63565b60405180910390fd5b5b82613270575f61329b565b61329a606461328c60125f01548761444790919063ffffffff16565b61446c90919063ffffffff16565b5b90505f6132a78561107c565b90505f6133558260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b81526004016133089190614c62565b602060405180830381865afa158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190615402565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b81526004016133b3929190614faa565b5f604051808303815f87803b1580156133ca575f80fd5b505af11580156133dc573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816134a09190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038783836040516134e093929190615d2e565b60405180910390a150505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015613594575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561383557826135a4575f6135d0565b6135cf60646135c16012600101548761444790919063ffffffff16565b61446c90919063ffffffff16565b5b90505f6135dc8561107c565b90505f8160115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161363a9190614c62565b602060405180830381865afa158015613655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136799190615402565b6136839190615d7f565b90505f808213156136945781613696565b5f5b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016136f4929190614faa565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b5050505060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600481526020017f53454c4c00000000000000000000000000000000000000000000000000000000815250815260200185815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816137e19190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c0389848360405161382193929190615e09565b60405180910390a16138316144b5565b5050505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156138df575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d1c578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613d1b575f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc886040518263ffffffff1660e01b81526004016139729190614c62565b602060405180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b19190615402565b90506139bc87614524565b15613c06575f613a6d8260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401613a209190614c62565b602060405180830381865afa158015613a3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5f9190615402565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401613acb929190614faa565b5f604051808303815f87803b158015613ae2575f80fd5b505af1158015613af4573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f019081613bb89190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051613bf893929190615d2e565b60405180910390a150613c90565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82887836040518363ffffffff1660e01b8152600401613c62929190614faa565b5f604051808303815f87803b158015613c79575f80fd5b505af1158015613c8b573d5f803e3d5ffd5b505050505b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d828885f6040518363ffffffff1660e01b8152600401613cec929190615e51565b5f604051808303815f87803b158015613d03575f80fd5b505af1158015613d15573d5f803e3d5ffd5b50505050505b5b613d268686612c32565b5b5f613d3b8286612b8c90919063ffffffff16565b9050613d8d8560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613e1e8160035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613eaf8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613f4d9190614abb565b60405180910390a350505050505050565b5f838311158290613fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9c9190614861565b60405180910390fd5b505f8385613fb39190615e78565b9050809150509392505050565b5f5b83839050811015614060575f848483818110613fe157613fe0614f7d565b5b9050602002016020810190613ff691906149b5565b90508260055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061405890614ffe565b915050613fc2565b50505050565b5f600267ffffffffffffffff8111156140825761408161510a565b5b6040519080825280602002602001820160405280156140b05781602001602082028036833780820191505090505b50905030815f815181106140c7576140c6614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561416b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061418f919061514b565b816001815181106141a3576141a2614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142093060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161426b959493929190615eab565b5f604051808303815f87803b158015614282575f80fd5b505af1158015614294573d5f803e3d5ffd5b505050505050565b6001600c5f6101000a81548160ff0219169083151502179055505f4790505f6142e560646142d760155f01548561444790919063ffffffff16565b61446c90919063ffffffff16565b90505f61431360646143056015600101548661444790919063ffffffff16565b61446c90919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015614379573d5f803e3d5ffd5b506143838161456b565b5050505f600c5f6101000a81548160ff021916908315150217905550565b5f5b83839050811015614441575f8484838181106143c2576143c1614f7d565b5b90506020020160208101906143d791906149b5565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061443990614ffe565b9150506143a3565b50505050565b5f808303614457575f9050614466565b818361446391906153c1565b90505b92915050565b5f6144ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614636565b905092915050565b5f6144bf30611978565b90505f811115614521575f6144d2611daa565b90508082101580156144f05750600c5f9054906101000a900460ff16155b80156145085750600c60019054906101000a900460ff165b1561451f5761451681614066565b61451e61429c565b5b505b50565b5f805f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f1b9050833f915080821415801561456257505f801b8214155b92505050919050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516145b190615f30565b5f6040518083038185875af1925050503d805f81146145eb576040519150601f19603f3d011682016040523d82523d5f602084013e6145f0565b606091505b505090508015614632577f8d506e73abc3fae6fd0fd6faac7b7ff03e47622fa1e4fa03fc1e8f9801769afa826040516146299190614abb565b60405180910390a15b5050565b5f808311829061467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146739190614861565b60405180910390fd5b5082846146899190615f71565b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126146c4576146c36146a3565b5b8235905067ffffffffffffffff8111156146e1576146e06146a7565b5b6020830191508360208202830111156146fd576146fc6146ab565b5b9250929050565b5f8083601f840112614719576147186146a3565b5b8235905067ffffffffffffffff811115614736576147356146a7565b5b602083019150836020820283011115614752576147516146ab565b5b9250929050565b5f805f80604085870312156147715761477061469b565b5b5f85013567ffffffffffffffff81111561478e5761478d61469f565b5b61479a878288016146af565b9450945050602085013567ffffffffffffffff8111156147bd576147bc61469f565b5b6147c987828801614704565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561480e5780820151818401526020810190506147f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614833826147d7565b61483d81856147e1565b935061484d8185602086016147f1565b61485681614819565b840191505092915050565b5f6020820190508181035f8301526148798184614829565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148aa82614881565b9050919050565b6148ba816148a0565b81146148c4575f80fd5b50565b5f813590506148d5816148b1565b92915050565b5f819050919050565b6148ed816148db565b81146148f7575f80fd5b50565b5f81359050614908816148e4565b92915050565b5f80604083850312156149245761492361469b565b5b5f614931858286016148c7565b9250506020614942858286016148fa565b9150509250929050565b5f8115159050919050565b6149608161494c565b82525050565b5f6020820190506149795f830184614957565b92915050565b614988816148db565b82525050565b5f6040820190506149a15f83018561497f565b6149ae602083018461497f565b9392505050565b5f602082840312156149ca576149c961469b565b5b5f6149d7848285016148c7565b91505092915050565b5f805f805f80606087890312156149fa576149f961469b565b5b5f87013567ffffffffffffffff811115614a1757614a1661469f565b5b614a2389828a016146af565b9650965050602087013567ffffffffffffffff811115614a4657614a4561469f565b5b614a5289828a01614704565b9450945050604087013567ffffffffffffffff811115614a7557614a7461469f565b5b614a8189828a01614704565b92509250509295509295509295565b5f60208284031215614aa557614aa461469b565b5b5f614ab2848285016148fa565b91505092915050565b5f602082019050614ace5f83018461497f565b92915050565b5f819050919050565b5f614af7614af2614aed84614881565b614ad4565b614881565b9050919050565b5f614b0882614add565b9050919050565b5f614b1982614afe565b9050919050565b614b2981614b0f565b82525050565b5f602082019050614b425f830184614b20565b92915050565b5f805f60608486031215614b5f57614b5e61469b565b5b5f614b6c868287016148c7565b9350506020614b7d868287016148c7565b9250506040614b8e868287016148fa565b9150509250925092565b5f60ff82169050919050565b614bad81614b98565b82525050565b5f602082019050614bc65f830184614ba4565b92915050565b614bd58161494c565b8114614bdf575f80fd5b50565b5f81359050614bf081614bcc565b92915050565b5f805f60408486031215614c0d57614c0c61469b565b5b5f84013567ffffffffffffffff811115614c2a57614c2961469f565b5b614c36868287016146af565b93509350506020614c4986828701614be2565b9150509250925092565b614c5c816148a0565b82525050565b5f602082019050614c755f830184614c53565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f614cbe826147d7565b614cc88185614ca4565b9350614cd88185602086016147f1565b614ce181614819565b840191505092915050565b614cf5816148db565b82525050565b5f604083015f8301518482035f860152614d158282614cb4565b9150506020830151614d2a6020860182614cec565b508091505092915050565b5f614d408383614cfb565b905092915050565b5f602082019050919050565b5f614d5e82614c7b565b614d688185614c85565b935083602082028501614d7a85614c95565b805f5b85811015614db55784840389528151614d968582614d35565b9450614da183614d48565b925060208a01995050600181019050614d7d565b50829750879550505050505092915050565b5f6020820190508181035f830152614ddf8184614d54565b905092915050565b5f614df182614add565b9050919050565b5f614e0282614de7565b9050919050565b614e1281614df8565b82525050565b5f602082019050614e2b5f830184614e09565b92915050565b5f8060408385031215614e4757614e4661469b565b5b5f614e54858286016148fa565b9250506020614e65858286016148fa565b9150509250929050565b5f8060408385031215614e8557614e8461469b565b5b5f614e92858286016148c7565b9250506020614ea3858286016148c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ee16020836147e1565b9150614eec82614ead565b602082019050919050565b5f6020820190508181035f830152614f0e81614ed5565b9050919050565b7f686f6c6465727320616e6420616d6f756e747320646f6e2774206d61746368005f82015250565b5f614f49601f836147e1565b9150614f5482614f15565b602082019050919050565b5f6020820190508181035f830152614f7681614f3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050614fbd5f830185614c53565b614fca602083018461497f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615008826148db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361503a57615039614fd1565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061508957607f821691505b60208210810361509c5761509b615045565b5b50919050565b7f31330000000000000000000000000000000000000000000000000000000000005f82015250565b5f6150d66002836147e1565b91506150e1826150a2565b602082019050919050565b5f6020820190508181035f830152615103816150ca565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615145816148b1565b92915050565b5f602082840312156151605761515f61469b565b5b5f61516d84828501615137565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6151a8816148a0565b82525050565b5f6151b9838361519f565b60208301905092915050565b5f602082019050919050565b5f6151db82615176565b6151e58185615180565b93506151f083615190565b805f5b8381101561522057815161520788826151ae565b9750615212836151c5565b9250506001810190506151f3565b5085935050505092915050565b5f6040820190506152405f83018561497f565b818103602083015261525281846151d1565b90509392505050565b61526482614819565b810181811067ffffffffffffffff821117156152835761528261510a565b5b80604052505050565b5f615295614692565b90506152a1828261525b565b919050565b5f67ffffffffffffffff8211156152c0576152bf61510a565b5b602082029050602081019050919050565b5f815190506152df816148e4565b92915050565b5f6152f76152f2846152a6565b61528c565b9050808382526020820190506020840283018581111561531a576153196146ab565b5b835b81811015615343578061532f88826152d1565b84526020840193505060208101905061531c565b5050509392505050565b5f82601f830112615361576153606146a3565b5b81516153718482602086016152e5565b91505092915050565b5f6020828403121561538f5761538e61469b565b5b5f82015167ffffffffffffffff8111156153ac576153ab61469f565b5b6153b88482850161534d565b91505092915050565b5f6153cb826148db565b91506153d6836148db565b92508282026153e4816148db565b915082820484148315176153fb576153fa614fd1565b5b5092915050565b5f602082840312156154175761541661469b565b5b5f615424848285016152d1565b91505092915050565b7f33000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6154616001836147e1565b915061546c8261542d565b602082019050919050565b5f6020820190508181035f83015261548e81615455565b9050919050565b7f34000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c96001836147e1565b91506154d482615495565b602082019050919050565b5f6020820190508181035f8301526154f6816154bd565b9050919050565b7f31340000000000000000000000000000000000000000000000000000000000005f82015250565b5f6155316002836147e1565b915061553c826154fd565b602082019050919050565b5f6020820190508181035f83015261555e81615525565b9050919050565b5f6040820190506155785f830185614c53565b6155856020830184614c53565b9392505050565b5f819050919050565b5f6155af6155aa6155a58461558c565b614ad4565b6148db565b9050919050565b6155bf81615595565b82525050565b5f60c0820190506155d85f830189614c53565b6155e5602083018861497f565b6155f260408301876155b6565b6155ff60608301866155b6565b61560c6080830185614c53565b61561960a083018461497f565b979650505050505050565b5f805f6060848603121561563b5761563a61469b565b5b5f615648868287016152d1565b9350506020615659868287016152d1565b925050604061566a868287016152d1565b9150509250925092565b5f8151905061568281614bcc565b92915050565b5f6020828403121561569d5761569c61469b565b5b5f6156aa84828501615674565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61570d6026836147e1565b9150615718826156b3565b604082019050919050565b5f6020820190508181035f83015261573a81615701565b9050919050565b7f35000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157756001836147e1565b915061578082615741565b602082019050919050565b5f6020820190508181035f8301526157a281615769565b9050919050565b7f36000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157dd6001836147e1565b91506157e8826157a9565b602082019050919050565b5f6020820190508181035f83015261580a816157d1565b9050919050565b5f61581b826148db565b9150615826836148db565b925082820190508082111561583e5761583d614fd1565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615878601b836147e1565b915061588382615844565b602082019050919050565b5f6020820190508181035f8301526158a58161586c565b9050919050565b5f6060820190506158bf5f83018661497f565b6158cc602083018561497f565b6158d9604083018461497f565b949350505050565b7f37000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159156001836147e1565b9150615920826158e1565b602082019050919050565b5f6020820190508181035f83015261594281615909565b9050919050565b7f38000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61597d6001836147e1565b915061598882615949565b602082019050919050565b5f6020820190508181035f8301526159aa81615971565b9050919050565b7f39000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159e56001836147e1565b91506159f0826159b1565b602082019050919050565b5f6020820190508181035f830152615a12816159d9565b9050919050565b7f31300000000000000000000000000000000000000000000000000000000000005f82015250565b5f615a4d6002836147e1565b9150615a5882615a19565b602082019050919050565b5f6020820190508181035f830152615a7a81615a41565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615add7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615aa2565b615ae78683615aa2565b95508019841693508086168417925050509392505050565b5f615b19615b14615b0f846148db565b614ad4565b6148db565b9050919050565b5f819050919050565b615b3283615aff565b615b46615b3e82615b20565b848454615aae565b825550505050565b5f90565b615b5a615b4e565b615b65818484615b29565b505050565b5b81811015615b8857615b7d5f82615b52565b600181019050615b6b565b5050565b601f821115615bcd57615b9e81615a81565b615ba784615a93565b81016020851015615bb6578190505b615bca615bc285615a93565b830182615b6a565b50505b505050565b5f82821c905092915050565b5f615bed5f1984600802615bd2565b1980831691505092915050565b5f615c058383615bde565b9150826002028217905092915050565b615c1e826147d7565b67ffffffffffffffff811115615c3757615c3661510a565b5b615c418254615072565b615c4c828285615b8c565b5f60209050601f831160018114615c7d575f8415615c6b578287015190505b615c758582615bfa565b865550615cdc565b601f198416615c8b86615a81565b5f5b82811015615cb257848901518255600182019150602085019450602081019050615c8d565b86831015615ccf5784890151615ccb601f891682615bde565b8355505b6001600288020188555050505b505050505050565b7f42555900000000000000000000000000000000000000000000000000000000005f82015250565b5f615d186003836147e1565b9150615d2382615ce4565b602082019050919050565b5f608082019050615d415f830186614c53565b8181036020830152615d5281615d0c565b9050615d61604083018561497f565b615d6e606083018461497f565b949350505050565b5f819050919050565b5f615d8982615d76565b9150615d9483615d76565b925082820390508181125f8412168282135f851215161715615db957615db8614fd1565b5b92915050565b7f53454c4c000000000000000000000000000000000000000000000000000000005f82015250565b5f615df36004836147e1565b9150615dfe82615dbf565b602082019050919050565b5f608082019050615e1c5f830186614c53565b8181036020830152615e2d81615de7565b9050615e3c604083018561497f565b615e49606083018461497f565b949350505050565b5f604082019050615e645f830185614c53565b615e7160208301846155b6565b9392505050565b5f615e82826148db565b9150615e8d836148db565b9250828203905081811115615ea557615ea4614fd1565b5b92915050565b5f60a082019050615ebe5f83018861497f565b615ecb60208301876155b6565b8181036040830152615edd81866151d1565b9050615eec6060830185614c53565b615ef9608083018461497f565b9695505050505050565b5f81905092915050565b50565b5f615f1b5f83615f03565b9150615f2682615f0d565b5f82019050919050565b5f615f3a82615f10565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615f7b826148db565b9150615f86836148db565b925082615f9657615f95615f44565b5b82820490509291505056fea26469706673582212201e6997a55763f3b8485da5f90c60308d819a74e7ae816b5448a99c4cd7f95be964736f6c63430008140033608060405234801561000f575f80fd5b50610a798061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061007b575f3560e01c8063663037ac11610059578063663037ac146100e7578063949d225d14610117578063c2bc2efc14610135578063cd413329146101655761007b565b806329092d0e1461007f5780633825d8281461009b578063564c8d11146100b7575b5f80fd5b6100996004803603810190610094919061080e565b610195565b005b6100b560048036038101906100b0919061086c565b61043c565b005b6100d160048036038101906100cc919061080e565b610621565b6040516100de91906108c2565b60405180910390f35b61010160048036038101906100fc91906108db565b6106e2565b60405161010e9190610915565b60405180910390f35b61011f610727565b60405161012c919061093d565b60405180910390f35b61014f600480360381019061014a919061080e565b610734565b60405161015c919061093d565b60405180910390f35b61017f600480360381019061017a919061080e565b61077c565b60405161018c9190610970565b60405180910390f35b5f6003015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610439575f6003015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555f6001015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f90555f806002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60015f8001805490506102cd91906109b6565b90505f805f0182815481106102e5576102e46109e9565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050825f6002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6002015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055805f800184815481106103ab576103aa6109e9565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f800180548061040357610402610a16565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b5f6003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156104d657805f6001015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061061d565b60015f6003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550805f6001015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f8001805490505f6002015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f800182908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b5f806003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661069a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506106dd565b5f6002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505b919050565b5f805f0182815481106106f8576106f76109e9565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f805f0180549050905090565b5f806001015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107a783610621565b14159050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107dd826107b4565b9050919050565b6107ed816107d3565b81146107f7575f80fd5b50565b5f81359050610808816107e4565b92915050565b5f60208284031215610823576108226107b0565b5b5f610830848285016107fa565b91505092915050565b5f819050919050565b61084b81610839565b8114610855575f80fd5b50565b5f8135905061086681610842565b92915050565b5f8060408385031215610882576108816107b0565b5b5f61088f858286016107fa565b92505060206108a085828601610858565b9150509250929050565b5f819050919050565b6108bc816108aa565b82525050565b5f6020820190506108d55f8301846108b3565b92915050565b5f602082840312156108f0576108ef6107b0565b5b5f6108fd84828501610858565b91505092915050565b61090f816107d3565b82525050565b5f6020820190506109285f830184610906565b92915050565b61093781610839565b82525050565b5f6020820190506109505f83018461092e565b92915050565b5f8115159050919050565b61096a81610956565b82525050565b5f6020820190506109835f830184610961565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6109c082610839565b91506109cb83610839565b92508282039050818111156109e3576109e2610989565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220694dbe9ad258a3a5a7909c4a2460aad52c6b2e424116b070cbc77394ae92dafd64736f6c63430008140033
Deployed Bytecode
0x608060405260043610610249575f3560e01c80635342acb4116101385780638da5cb5b116100b5578063b2abbbc411610079578063b2abbbc414610892578063ba385abb146108ba578063c9567bf9146108e2578063dd62ed3e146108f8578063f18dba2614610934578063f2fde38b1461095c57610250565b80638da5cb5b1461079c57806395d89b41146107c657806397995706146107f0578063a457c2d71461081a578063a9059cbb1461085657610250565b806370a08231116100fc57806370a08231146106d0578063715018a61461070c57806371cd56af1461072257806381230a831461074a57806385141a771461077257610250565b80635342acb4146105eb57806354a5df1f1461062757806359a05f89146106515780635ee58efc1461067b5780636c0a24eb146106a657610250565b806327a14fc2116101c6578063441d801f1161018a578063441d801f1461051d57806349bd5a5e146105455780634a74bb021461056f5780634fda2e121461059957806351bc3c85146105d557610250565b806327a14fc21461043d578063280d382114610465578063313ce5671461047b578063345487d0146104a557806339509351146104e157610250565b806311f0b5161161020d57806311f0b5161461034957806314f944bd146103715780631694505e146103ad57806318160ddd146103d757806323b872dd1461040157610250565b806304dccacb1461025457806306fdde031461027c578063095ea7b3146102a65780630ddc0976146102e25780630e8322731461030d57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061027a60048036038101906102759190614759565b610984565b005b348015610287575f80fd5b50610290610b53565b60405161029d9190614861565b60405180910390f35b3480156102b1575f80fd5b506102cc60048036038101906102c7919061490e565b610be3565b6040516102d99190614966565b60405180910390f35b3480156102ed575f80fd5b506102f6610bf9565b60405161030492919061498e565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e91906149b5565b610c0a565b6040516103409190614966565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a91906149e0565b610c5c565b005b34801561037c575f80fd5b5061039760048036038101906103929190614a90565b61107c565b6040516103a49190614abb565b60405180910390f35b3480156103b8575f80fd5b506103c16112b4565b6040516103ce9190614b2f565b60405180910390f35b3480156103e2575f80fd5b506103eb6112d9565b6040516103f89190614abb565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614b48565b6112e2565b6040516104349190614966565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190614a90565b6113c5565b005b348015610470575f80fd5b5061047961146b565b005b348015610486575f80fd5b5061048f61154a565b60405161049c9190614bb3565b60405180910390f35b3480156104b0575f80fd5b506104cb60048036038101906104c691906149b5565b61155f565b6040516104d89190614abb565b60405180910390f35b3480156104ec575f80fd5b506105076004803603810190610502919061490e565b611600565b6040516105149190614966565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190614bf6565b6116a0565b005b348015610550575f80fd5b5061055961173d565b6040516105669190614c62565b60405180910390f35b34801561057a575f80fd5b50610583611762565b6040516105909190614966565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba91906149b5565b611775565b6040516105cc9190614dc7565b60405180910390f35b3480156105e0575f80fd5b506105e96118a7565b005b3480156105f6575f80fd5b50610611600480360381019061060c91906149b5565b6118e4565b60405161061e9190614966565b60405180910390f35b348015610632575f80fd5b5061063b611936565b6040516106489190614abb565b60405180910390f35b34801561065c575f80fd5b5061066561193c565b6040516106729190614e18565b60405180910390f35b348015610686575f80fd5b5061068f611961565b60405161069d92919061498e565b60405180910390f35b3480156106b1575f80fd5b506106ba611972565b6040516106c79190614abb565b60405180910390f35b3480156106db575f80fd5b506106f660048036038101906106f191906149b5565b611978565b6040516107039190614abb565b60405180910390f35b348015610717575f80fd5b506107206119be565b005b34801561072d575f80fd5b5061074860048036038101906107439190614bf6565b611b05565b005b348015610755575f80fd5b50610770600480360381019061076b9190614e31565b611ba2565b005b34801561077d575f80fd5b50610786611cce565b6040516107939190614c62565b60405180910390f35b3480156107a7575f80fd5b506107b0611cf3565b6040516107bd9190614c62565b60405180910390f35b3480156107d1575f80fd5b506107da611d1a565b6040516107e79190614861565b60405180910390f35b3480156107fb575f80fd5b50610804611daa565b6040516108119190614abb565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b919061490e565b611fe3565b60405161084d9190614966565b60405180910390f35b348015610861575f80fd5b5061087c6004803603810190610877919061490e565b6120ba565b6040516108899190614966565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b39190614a90565b6120d0565b005b3480156108c5575f80fd5b506108e060048036038101906108db91906149b5565b612167565b005b3480156108ed575f80fd5b506108f6612237565b005b348015610903575f80fd5b5061091e60048036038101906109199190614e6f565b6126ed565b60405161092b9190614abb565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190614e31565b61276f565b005b348015610967575f80fd5b50610982600480360381019061097d91906149b5565b612813565b005b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890614ef7565b60405180910390fd5b818190508484905014610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090614f5f565b60405180910390fd5b5f5b84849050811015610b4c575f838383818110610a7a57610a79614f7d565b5b9050602002013590505f868684818110610a9757610a96614f7d565b5b9050602002016020810190610aac91906149b5565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82882846040518363ffffffff1660e01b8152600401610b0a929190614faa565b5f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b5050505050508080610b4490614ffe565b915050610a5b565b5050505050565b606060088054610b6290615072565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90615072565b8015610bd95780601f10610bb057610100808354040283529160200191610bd9565b820191905f5260205f20905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b5f610bef3384846129c9565b6001905092915050565b6012805f0154908060010154905082565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614ef7565b60405180910390fd5b8383905086869050148015610d0357508181905086869050145b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990614f5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906150ec565b60405180910390fd5b5f3090505f5b87879050811015611072575f888883818110610df657610df5614f7d565b5b9050602002016020810190610e0b91906149b5565b90505f878784818110610e2157610e20614f7d565b5b905060200201359050610e7a8160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610f0b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883888887818110610f9d57610f9c614f7d565b5b905060200201356040518363ffffffff1660e01b8152600401610fc1929190614faa565b5f604051808303815f87803b158015610fd8575f80fd5b505af1158015610fea573d5f803e3d5ffd5b50505050610ff88483612c32565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110559190614abb565b60405180910390a35050808061106a90614ffe565b915050610dd7565b5050505050505050565b5f80600267ffffffffffffffff8111156110995761109861510a565b5b6040519080825280602002602001820160405280156110c75781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611134573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611158919061514b565b815f8151811061116b5761116a614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111ba576111b9614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b815260040161125092919061522d565b5f60405180830381865afa15801561126a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611292919061537a565b5f815181106112a4576112a3614f7d565b5b6020026020010151915050919050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b54905090565b5f6112ee848484612e25565b6113ba84336113b5856040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613f5e9092919063ffffffff16565b6129c9565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614ef7565b60405180910390fd5b633b9aca008161146291906153c1565b600e8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614ef7565b60405180910390fd5b5f479050611504611cf3565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611546573d5f803e3d5ffd5b5050565b5f600a5f9054906101000a900460ff16905090565b5f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016115ba9190614c62565b602060405180830381865afa1580156115d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f99190615402565b9050919050565b5f61169633846116918560045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b6129c9565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614ef7565b60405180910390fd5b611738838383613fc0565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b606060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561189c578382905f5260205f2090600202016040518060400160405290815f8201805461180390615072565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90615072565b801561187a5780601f106118515761010080835404028352916020019161187a565b820191905f5260205f20905b81548152906001019060200180831161185d57829003601f168201915b50505050508152602001600182015481525050815260200190600101906117d3565b505050509050919050565b5f6118b130611978565b90505f8111156118e157600c5f9054906101000a900460ff166118e0576118d781614066565b6118df61429c565b5b5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015805f0154908060010154905082565b600e5481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990614ef7565b60405180910390fd5b611b9d8383836143a1565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614ef7565b60405180910390fd5b6005821115611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90615477565b60405180910390fd5b6005811115611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae906154df565b60405180910390fd5b8160125f0181905550806012600101819055505050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611d2990615072565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5590615072565b8015611da05780601f10611d7757610100808354040283529160200191611da0565b820191905f5260205f20905b815481529060010190602001808311611d8357829003601f168201915b5050505050905090565b5f80600267ffffffffffffffff811115611dc757611dc661510a565b5b604051908082528060200260200182016040528015611df55781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e86919061514b565b815f81518110611e9957611e98614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ee857611ee7614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611f8092919061522d565b5f60405180830381865afa158015611f9a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc2919061537a565b600181518110611fd557611fd4614f7d565b5b602002602001015191505090565b5f6120b033846120ab856040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613f5e9092919063ffffffff16565b6129c9565b6001905092915050565b5f6120c6338484612e25565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614ef7565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90614ef7565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a90615547565b60405180910390fd5b6123813060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f919061514b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b9919061514b565b6040518363ffffffff1660e01b81526004016124d6929190615565565b6020604051808303815f875af11580156124f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612516919061514b565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061259d30611978565b5f806125a7611cf3565b426040518863ffffffff1660e01b81526004016125c9969594939291906155c5565b60606040518083038185885af11580156125e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061260a9190615624565b50505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126aa929190614faa565b6020604051808303815f875af11580156126c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ea9190615688565b50565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614ef7565b60405180910390fd5b8160155f0181905550806015600101819055505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ef7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590615723565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061578b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c906157f3565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b7f9190614abb565b60405180910390a3505050565b5f612bcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f5e565b905092915050565b5f808284612be39190615811565b905083811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061588e565b60405180910390fd5b8091505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1836040518263ffffffff1660e01b8152600401612c8c9190614c62565b5f604051808303815f87803b158015612ca3575f80fd5b505af1925050508015612cb4575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1826040518263ffffffff1660e01b8152600401612d0f9190614c62565b5f604051808303815f87803b158015612d26575f80fd5b505af1925050508015612d37575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b81526004016060604051808303815f875af1925050508015612dc257506040513d601f19601f82011682018060405250810190612dbf9190615624565b60015b15612e21573273ffffffffffffffffffffffffffffffffffffffff16600115157fd401621dbefa4e4b58dfded2f6ce557f2bf581dde5dca5670c9993d2fb1bee0d858585604051612e15939291906158ac565b60405180910390a35050505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a9061592b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615993565b60405180910390fd5b5f8111612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a906159fb565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612fe2575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130215750612ff1611cf3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130605750613030611cf3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90505f61307e8361307086611978565b612bd590919063ffffffff16565b90505f613089611cf3565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130f757506130c7611cf3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613150575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561318857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156131c057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d275760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036134eb57821561326557600e54821115613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90615a63565b60405180910390fd5b5b82613270575f61329b565b61329a606461328c60125f01548761444790919063ffffffff16565b61446c90919063ffffffff16565b5b90505f6132a78561107c565b90505f6133558260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b81526004016133089190614c62565b602060405180830381865afa158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190615402565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b81526004016133b3929190614faa565b5f604051808303815f87803b1580156133ca575f80fd5b505af11580156133dc573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816134a09190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038783836040516134e093929190615d2e565b60405180910390a150505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015613594575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561383557826135a4575f6135d0565b6135cf60646135c16012600101548761444790919063ffffffff16565b61446c90919063ffffffff16565b5b90505f6135dc8561107c565b90505f8160115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161363a9190614c62565b602060405180830381865afa158015613655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136799190615402565b6136839190615d7f565b90505f808213156136945781613696565b5f5b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016136f4929190614faa565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b5050505060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600481526020017f53454c4c00000000000000000000000000000000000000000000000000000000815250815260200185815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816137e19190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c0389848360405161382193929190615e09565b60405180910390a16138316144b5565b5050505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156138df575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d1c578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613d1b575f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc886040518263ffffffff1660e01b81526004016139729190614c62565b602060405180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b19190615402565b90506139bc87614524565b15613c06575f613a6d8260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401613a209190614c62565b602060405180830381865afa158015613a3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5f9190615402565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401613acb929190614faa565b5f604051808303815f87803b158015613ae2575f80fd5b505af1158015613af4573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f019081613bb89190615c15565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051613bf893929190615d2e565b60405180910390a150613c90565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82887836040518363ffffffff1660e01b8152600401613c62929190614faa565b5f604051808303815f87803b158015613c79575f80fd5b505af1158015613c8b573d5f803e3d5ffd5b505050505b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d828885f6040518363ffffffff1660e01b8152600401613cec929190615e51565b5f604051808303815f87803b158015613d03575f80fd5b505af1158015613d15573d5f803e3d5ffd5b50505050505b5b613d268686612c32565b5b5f613d3b8286612b8c90919063ffffffff16565b9050613d8d8560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613e1e8160035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613eaf8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613f4d9190614abb565b60405180910390a350505050505050565b5f838311158290613fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9c9190614861565b60405180910390fd5b505f8385613fb39190615e78565b9050809150509392505050565b5f5b83839050811015614060575f848483818110613fe157613fe0614f7d565b5b9050602002016020810190613ff691906149b5565b90508260055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061405890614ffe565b915050613fc2565b50505050565b5f600267ffffffffffffffff8111156140825761408161510a565b5b6040519080825280602002602001820160405280156140b05781602001602082028036833780820191505090505b50905030815f815181106140c7576140c6614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561416b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061418f919061514b565b816001815181106141a3576141a2614f7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142093060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161426b959493929190615eab565b5f604051808303815f87803b158015614282575f80fd5b505af1158015614294573d5f803e3d5ffd5b505050505050565b6001600c5f6101000a81548160ff0219169083151502179055505f4790505f6142e560646142d760155f01548561444790919063ffffffff16565b61446c90919063ffffffff16565b90505f61431360646143056015600101548661444790919063ffffffff16565b61446c90919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015614379573d5f803e3d5ffd5b506143838161456b565b5050505f600c5f6101000a81548160ff021916908315150217905550565b5f5b83839050811015614441575f8484838181106143c2576143c1614f7d565b5b90506020020160208101906143d791906149b5565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061443990614ffe565b9150506143a3565b50505050565b5f808303614457575f9050614466565b818361446391906153c1565b90505b92915050565b5f6144ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614636565b905092915050565b5f6144bf30611978565b90505f811115614521575f6144d2611daa565b90508082101580156144f05750600c5f9054906101000a900460ff16155b80156145085750600c60019054906101000a900460ff165b1561451f5761451681614066565b61451e61429c565b5b505b50565b5f805f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f1b9050833f915080821415801561456257505f801b8214155b92505050919050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516145b190615f30565b5f6040518083038185875af1925050503d805f81146145eb576040519150601f19603f3d011682016040523d82523d5f602084013e6145f0565b606091505b505090508015614632577f8d506e73abc3fae6fd0fd6faac7b7ff03e47622fa1e4fa03fc1e8f9801769afa826040516146299190614abb565b60405180910390a15b5050565b5f808311829061467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146739190614861565b60405180910390fd5b5082846146899190615f71565b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126146c4576146c36146a3565b5b8235905067ffffffffffffffff8111156146e1576146e06146a7565b5b6020830191508360208202830111156146fd576146fc6146ab565b5b9250929050565b5f8083601f840112614719576147186146a3565b5b8235905067ffffffffffffffff811115614736576147356146a7565b5b602083019150836020820283011115614752576147516146ab565b5b9250929050565b5f805f80604085870312156147715761477061469b565b5b5f85013567ffffffffffffffff81111561478e5761478d61469f565b5b61479a878288016146af565b9450945050602085013567ffffffffffffffff8111156147bd576147bc61469f565b5b6147c987828801614704565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561480e5780820151818401526020810190506147f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614833826147d7565b61483d81856147e1565b935061484d8185602086016147f1565b61485681614819565b840191505092915050565b5f6020820190508181035f8301526148798184614829565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148aa82614881565b9050919050565b6148ba816148a0565b81146148c4575f80fd5b50565b5f813590506148d5816148b1565b92915050565b5f819050919050565b6148ed816148db565b81146148f7575f80fd5b50565b5f81359050614908816148e4565b92915050565b5f80604083850312156149245761492361469b565b5b5f614931858286016148c7565b9250506020614942858286016148fa565b9150509250929050565b5f8115159050919050565b6149608161494c565b82525050565b5f6020820190506149795f830184614957565b92915050565b614988816148db565b82525050565b5f6040820190506149a15f83018561497f565b6149ae602083018461497f565b9392505050565b5f602082840312156149ca576149c961469b565b5b5f6149d7848285016148c7565b91505092915050565b5f805f805f80606087890312156149fa576149f961469b565b5b5f87013567ffffffffffffffff811115614a1757614a1661469f565b5b614a2389828a016146af565b9650965050602087013567ffffffffffffffff811115614a4657614a4561469f565b5b614a5289828a01614704565b9450945050604087013567ffffffffffffffff811115614a7557614a7461469f565b5b614a8189828a01614704565b92509250509295509295509295565b5f60208284031215614aa557614aa461469b565b5b5f614ab2848285016148fa565b91505092915050565b5f602082019050614ace5f83018461497f565b92915050565b5f819050919050565b5f614af7614af2614aed84614881565b614ad4565b614881565b9050919050565b5f614b0882614add565b9050919050565b5f614b1982614afe565b9050919050565b614b2981614b0f565b82525050565b5f602082019050614b425f830184614b20565b92915050565b5f805f60608486031215614b5f57614b5e61469b565b5b5f614b6c868287016148c7565b9350506020614b7d868287016148c7565b9250506040614b8e868287016148fa565b9150509250925092565b5f60ff82169050919050565b614bad81614b98565b82525050565b5f602082019050614bc65f830184614ba4565b92915050565b614bd58161494c565b8114614bdf575f80fd5b50565b5f81359050614bf081614bcc565b92915050565b5f805f60408486031215614c0d57614c0c61469b565b5b5f84013567ffffffffffffffff811115614c2a57614c2961469f565b5b614c36868287016146af565b93509350506020614c4986828701614be2565b9150509250925092565b614c5c816148a0565b82525050565b5f602082019050614c755f830184614c53565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f614cbe826147d7565b614cc88185614ca4565b9350614cd88185602086016147f1565b614ce181614819565b840191505092915050565b614cf5816148db565b82525050565b5f604083015f8301518482035f860152614d158282614cb4565b9150506020830151614d2a6020860182614cec565b508091505092915050565b5f614d408383614cfb565b905092915050565b5f602082019050919050565b5f614d5e82614c7b565b614d688185614c85565b935083602082028501614d7a85614c95565b805f5b85811015614db55784840389528151614d968582614d35565b9450614da183614d48565b925060208a01995050600181019050614d7d565b50829750879550505050505092915050565b5f6020820190508181035f830152614ddf8184614d54565b905092915050565b5f614df182614add565b9050919050565b5f614e0282614de7565b9050919050565b614e1281614df8565b82525050565b5f602082019050614e2b5f830184614e09565b92915050565b5f8060408385031215614e4757614e4661469b565b5b5f614e54858286016148fa565b9250506020614e65858286016148fa565b9150509250929050565b5f8060408385031215614e8557614e8461469b565b5b5f614e92858286016148c7565b9250506020614ea3858286016148c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ee16020836147e1565b9150614eec82614ead565b602082019050919050565b5f6020820190508181035f830152614f0e81614ed5565b9050919050565b7f686f6c6465727320616e6420616d6f756e747320646f6e2774206d61746368005f82015250565b5f614f49601f836147e1565b9150614f5482614f15565b602082019050919050565b5f6020820190508181035f830152614f7681614f3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050614fbd5f830185614c53565b614fca602083018461497f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615008826148db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361503a57615039614fd1565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061508957607f821691505b60208210810361509c5761509b615045565b5b50919050565b7f31330000000000000000000000000000000000000000000000000000000000005f82015250565b5f6150d66002836147e1565b91506150e1826150a2565b602082019050919050565b5f6020820190508181035f830152615103816150ca565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615145816148b1565b92915050565b5f602082840312156151605761515f61469b565b5b5f61516d84828501615137565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6151a8816148a0565b82525050565b5f6151b9838361519f565b60208301905092915050565b5f602082019050919050565b5f6151db82615176565b6151e58185615180565b93506151f083615190565b805f5b8381101561522057815161520788826151ae565b9750615212836151c5565b9250506001810190506151f3565b5085935050505092915050565b5f6040820190506152405f83018561497f565b818103602083015261525281846151d1565b90509392505050565b61526482614819565b810181811067ffffffffffffffff821117156152835761528261510a565b5b80604052505050565b5f615295614692565b90506152a1828261525b565b919050565b5f67ffffffffffffffff8211156152c0576152bf61510a565b5b602082029050602081019050919050565b5f815190506152df816148e4565b92915050565b5f6152f76152f2846152a6565b61528c565b9050808382526020820190506020840283018581111561531a576153196146ab565b5b835b81811015615343578061532f88826152d1565b84526020840193505060208101905061531c565b5050509392505050565b5f82601f830112615361576153606146a3565b5b81516153718482602086016152e5565b91505092915050565b5f6020828403121561538f5761538e61469b565b5b5f82015167ffffffffffffffff8111156153ac576153ab61469f565b5b6153b88482850161534d565b91505092915050565b5f6153cb826148db565b91506153d6836148db565b92508282026153e4816148db565b915082820484148315176153fb576153fa614fd1565b5b5092915050565b5f602082840312156154175761541661469b565b5b5f615424848285016152d1565b91505092915050565b7f33000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6154616001836147e1565b915061546c8261542d565b602082019050919050565b5f6020820190508181035f83015261548e81615455565b9050919050565b7f34000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c96001836147e1565b91506154d482615495565b602082019050919050565b5f6020820190508181035f8301526154f6816154bd565b9050919050565b7f31340000000000000000000000000000000000000000000000000000000000005f82015250565b5f6155316002836147e1565b915061553c826154fd565b602082019050919050565b5f6020820190508181035f83015261555e81615525565b9050919050565b5f6040820190506155785f830185614c53565b6155856020830184614c53565b9392505050565b5f819050919050565b5f6155af6155aa6155a58461558c565b614ad4565b6148db565b9050919050565b6155bf81615595565b82525050565b5f60c0820190506155d85f830189614c53565b6155e5602083018861497f565b6155f260408301876155b6565b6155ff60608301866155b6565b61560c6080830185614c53565b61561960a083018461497f565b979650505050505050565b5f805f6060848603121561563b5761563a61469b565b5b5f615648868287016152d1565b9350506020615659868287016152d1565b925050604061566a868287016152d1565b9150509250925092565b5f8151905061568281614bcc565b92915050565b5f6020828403121561569d5761569c61469b565b5b5f6156aa84828501615674565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61570d6026836147e1565b9150615718826156b3565b604082019050919050565b5f6020820190508181035f83015261573a81615701565b9050919050565b7f35000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157756001836147e1565b915061578082615741565b602082019050919050565b5f6020820190508181035f8301526157a281615769565b9050919050565b7f36000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157dd6001836147e1565b91506157e8826157a9565b602082019050919050565b5f6020820190508181035f83015261580a816157d1565b9050919050565b5f61581b826148db565b9150615826836148db565b925082820190508082111561583e5761583d614fd1565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615878601b836147e1565b915061588382615844565b602082019050919050565b5f6020820190508181035f8301526158a58161586c565b9050919050565b5f6060820190506158bf5f83018661497f565b6158cc602083018561497f565b6158d9604083018461497f565b949350505050565b7f37000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159156001836147e1565b9150615920826158e1565b602082019050919050565b5f6020820190508181035f83015261594281615909565b9050919050565b7f38000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61597d6001836147e1565b915061598882615949565b602082019050919050565b5f6020820190508181035f8301526159aa81615971565b9050919050565b7f39000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159e56001836147e1565b91506159f0826159b1565b602082019050919050565b5f6020820190508181035f830152615a12816159d9565b9050919050565b7f31300000000000000000000000000000000000000000000000000000000000005f82015250565b5f615a4d6002836147e1565b9150615a5882615a19565b602082019050919050565b5f6020820190508181035f830152615a7a81615a41565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615add7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615aa2565b615ae78683615aa2565b95508019841693508086168417925050509392505050565b5f615b19615b14615b0f846148db565b614ad4565b6148db565b9050919050565b5f819050919050565b615b3283615aff565b615b46615b3e82615b20565b848454615aae565b825550505050565b5f90565b615b5a615b4e565b615b65818484615b29565b505050565b5b81811015615b8857615b7d5f82615b52565b600181019050615b6b565b5050565b601f821115615bcd57615b9e81615a81565b615ba784615a93565b81016020851015615bb6578190505b615bca615bc285615a93565b830182615b6a565b50505b505050565b5f82821c905092915050565b5f615bed5f1984600802615bd2565b1980831691505092915050565b5f615c058383615bde565b9150826002028217905092915050565b615c1e826147d7565b67ffffffffffffffff811115615c3757615c3661510a565b5b615c418254615072565b615c4c828285615b8c565b5f60209050601f831160018114615c7d575f8415615c6b578287015190505b615c758582615bfa565b865550615cdc565b601f198416615c8b86615a81565b5f5b82811015615cb257848901518255600182019150602085019450602081019050615c8d565b86831015615ccf5784890151615ccb601f891682615bde565b8355505b6001600288020188555050505b505050505050565b7f42555900000000000000000000000000000000000000000000000000000000005f82015250565b5f615d186003836147e1565b9150615d2382615ce4565b602082019050919050565b5f608082019050615d415f830186614c53565b8181036020830152615d5281615d0c565b9050615d61604083018561497f565b615d6e606083018461497f565b949350505050565b5f819050919050565b5f615d8982615d76565b9150615d9483615d76565b925082820390508181125f8412168282135f851215161715615db957615db8614fd1565b5b92915050565b7f53454c4c000000000000000000000000000000000000000000000000000000005f82015250565b5f615df36004836147e1565b9150615dfe82615dbf565b602082019050919050565b5f608082019050615e1c5f830186614c53565b8181036020830152615e2d81615de7565b9050615e3c604083018561497f565b615e49606083018461497f565b949350505050565b5f604082019050615e645f830185614c53565b615e7160208301846155b6565b9392505050565b5f615e82826148db565b9150615e8d836148db565b9250828203905081811115615ea557615ea4614fd1565b5b92915050565b5f60a082019050615ebe5f83018861497f565b615ecb60208301876155b6565b8181036040830152615edd81866151d1565b9050615eec6060830185614c53565b615ef9608083018461497f565b9695505050505050565b5f81905092915050565b50565b5f615f1b5f83615f03565b9150615f2682615f0d565b5f82019050919050565b5f615f3a82615f10565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615f7b826148db565b9150615f86836148db565b925082615f9657615f95615f44565b5b82820490509291505056fea26469706673582212201e6997a55763f3b8485da5f90c60308d819a74e7ae816b5448a99c4cd7f95be964736f6c63430008140033
Deployed Bytecode Sourcemap
8592:14953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19919:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12015:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12846:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10580:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;14362:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19146:765;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21245:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9342:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12292:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13013:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13883:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22788:161;;;;;;;;;;;;;:::i;:::-;;12201:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13750:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13291:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14028:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9455:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10030:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14748:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21901:304;;;;;;;;;;;;;:::i;:::-;;15826:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10077:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10609:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10652:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10124:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12395:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6988:148;;;;;;;;;;;;;:::i;:::-;;14197:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15275:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10270:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6776:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12106:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15543:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13513:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12522:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14901:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22401:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11407:600;;;;;;;;;;;;;:::i;:::-;;12695:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22213:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7144:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19919:415;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20065:10:::1;;:17;;20047:7;;:14;;:35;20039:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20133:9;20129:198;20150:7;;:14;;20146:1;:18;20129:198;;;20186:17;20206:10;;20217:1;20206:13;;;;;;;:::i;:::-;;;;;;;;20186:33;;20234:14;20251:7;;20259:1;20251:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20234:27;;20276:16;;;;;;;;;;;:20;;;20297:6;20305:9;20276:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20171:156;;20166:3;;;;;:::i;:::-;;;;20129:198;;;;19919:415:::0;;;;:::o;12015:83::-;12052:13;12085:5;12078:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12015:83;:::o;12846:159::-;12921:4;12938:37;12947:10;12959:7;12968:6;12938:8;:37::i;:::-;12993:4;12986:11;;12846:159;;;;:::o;10580:22::-;;;;;;;;;;;;;;:::o;14362:126::-;14428:4;14452:22;:28;14475:4;14452:28;;;;;;;;;;;;;;;;;;;;;;;;;14445:35;;14362:126;;;:::o;19146:765::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19310:7:::1;;:14;;19292:7;;:14;;:32;:74;;;;;19346:13;;:20;;19328:7;;:14;;:38;19292:74;19284:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;19456:1;19421:37;;19429:14;;;;;;;;;;;19421:37;;::::0;19413:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19476:12;19499:4;19476:28;;19519:9;19515:389;19536:7;;:14;;19532:1;:18;19515:389;;;19572:10;19585:7;;19593:1;19585:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19572:23;;19610:14;19627:7;;19635:1;19627:10;;;;;;;:::i;:::-;;;;;;;;19610:27;;19670;19690:6;19670:9;:15;19680:4;19670:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;19652:9;:15;19662:4;19652:15;;;;;;;;;;;;;;;:45;;;;19728:25;19746:6;19728:9;:13;19738:2;19728:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;19712:9;:13;19722:2;19712:13;;;;;;;;;;;;;;;:41;;;;19768:16;;;;;;;;;;;:20;;;19789:2;19793:13;;19807:1;19793:16;;;;;;;:::i;:::-;;;;;;;;19768:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19825:21;19837:4;19843:2;19825:11;:21::i;:::-;19881:2;19866:26;;19875:4;19866:26;;;19885:6;19866:26;;;;;;:::i;:::-;;;;;;;;19557:347;;19552:3;;;;;:::i;:::-;;;;19515:389;;;;19273:638;19146:765:::0;;;;;;:::o;21245:281::-;21315:4;21333:21;21371:1;21357:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21333:40;;21394:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21384:4;21389:1;21384:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21445:4;21427;21432:1;21427:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21468:15;;;;;;;;;;;:28;;;21497:11;21510:4;21468:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21516:1;21468:50;;;;;;;;:::i;:::-;;;;;;;;21461:57;;;21245:281;;;:::o;9342:106::-;;;;;;;;;;;;;:::o;12292:95::-;12345:7;12372;;12365:14;;12292:95;:::o;13013:270::-;13111:4;13128:36;13138:6;13146:9;13157:6;13128:9;:36::i;:::-;13175:78;13184:6;13192:10;13204:48;13240:6;13204:48;;;;;;;;;;;;;;;;;:11;:19;13216:6;13204:19;;;;;;;;;;;;;;;:31;13224:10;13204:31;;;;;;;;;;;;;;;;:35;;:48;;;;;:::i;:::-;13175:8;:78::i;:::-;13271:4;13264:11;;13013:270;;;;;:::o;13883:137::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14005:7:::1;13987:15;:25;;;;:::i;:::-;13968:16;:44;;;;13883:137:::0;:::o;22788:161::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22851:18:::1;22872:21;22851:42;;22912:7;:5;:7::i;:::-;22904:25;;:37;22930:10;22904:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22840:109;22788:161::o:0;12201:83::-;12242:5;12267:9;;;;;;;;;;;12260:16;;12201:83;:::o;13750:125::-;13814:4;13838:16;;;;;;;;;;;:20;;;13859:7;13838:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13831:36;;13750:125;;;:::o;13291:214::-;13379:4;13396:79;13405:10;13417:7;13426:48;13463:10;13426:11;:23;13438:10;13426:23;;;;;;;;;;;;;;;:32;13450:7;13426:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;13396:8;:79::i;:::-;13493:4;13486:11;;13291:214;;;;:::o;14028:161::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14140:41:::1;14153:9;;14164:16;14140:12;:41::i;:::-;14028:161:::0;;;:::o;9455:41::-;;;;;;;;;;;;;:::o;10030:40::-;;;;;;;;;;;;;:::o;14748:145::-;14812:23;14855:21;:30;14877:7;14855:30;;;;;;;;;;;;;;;14848:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14748:145;;;:::o;21901:304::-;21943:28;21974:24;21992:4;21974:9;:24::i;:::-;21943:55;;22036:1;22013:20;:24;22009:189;;;22059:16;;;;;;;;;;;22054:133;;22096:38;22113:20;22096:16;:38::i;:::-;22153:18;:16;:18::i;:::-;22054:133;22009:189;21932:273;21901:304::o;15826:124::-;15891:4;15915:18;:27;15934:7;15915:27;;;;;;;;;;;;;;;;;;;;;;;;;15908:34;;15826:124;;;:::o;10077:40::-;;;;:::o;10609:36::-;;;;;;;;;;;;;:::o;10652:54::-;;;;;;;;;;;;;;:::o;10124:61::-;;;;:::o;12395:119::-;12461:7;12488:9;:18;12498:7;12488:18;;;;;;;;;;;;;;;;12481:25;;12395:119;;;:::o;6988:148::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7095:1:::1;7058:40;;7079:6;::::0;::::1;;;;;;;;7058:40;;;;;;;;;;;;7126:1;7109:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6988:148::o:0;14197:157::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14307:39:::1;14324:9;;14335:10;14307:16;:39::i;:::-;14197:157:::0;;;:::o;15275:223::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15376:1:::1;15366:6;:11;;15358:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;15413:1;15402:7;:12;;15394:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;15448:6;15431:7;:14;;:23;;;;15483:7;15465;:15;;:25;;;;15275:223:::0;;:::o;10270:43::-;;;;;;;;;;;;;:::o;6776:79::-;6814:7;6841:6;;;;;;;;;;;6834:13;;6776:79;:::o;12106:87::-;12145:13;12178:7;12171:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12106:87;:::o;15543:275::-;15600:7;15621:21;15659:1;15645:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15621:40;;15682:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15672:4;15677:1;15672:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15733:4;15715;15720:1;15715:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15756:15;;;;;;;;;;;:29;;;15786:14;;15802:4;15756:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15808:1;15756:54;;;;;;;;:::i;:::-;;;;;;;;15749:61;;;15543:275;:::o;13513:229::-;13606:4;13623:89;13632:10;13644:7;13653:58;13690:15;13653:58;;;;;;;;;;;;;;;;;:11;:23;13665:10;13653:23;;;;;;;;;;;;;;;:32;13677:7;13653:32;;;;;;;;;;;;;;;;:36;;:58;;;;;:::i;:::-;13623:8;:89::i;:::-;13730:4;13723:11;;13513:229;;;;:::o;12522:165::-;12600:4;12617:40;12627:10;12639:9;12650:6;12617:9;:40::i;:::-;12675:4;12668:11;;12522:165;;;;:::o;14901:122::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15000:15:::1;14983:14;:32;;;;14901:122:::0;:::o;22401:161::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22530:22:::1;22490:14;;:64;;;;;;;;;;;;;;;;;;22401:161:::0;:::o;11407:600::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11495:1:::1;11470:27;;:13;;;;;;;;;;;:27;;;11462:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11514:58;11531:4;11546:15;;;;;;;;;;;11564:7;;11514:8;:58::i;:::-;11617:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11599:55;;;11663:4;11670:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11599:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11583:13;;:110;;;;;;;;;;;;;;;;;;11704:15;;;;;;;;;;;:31;;;11743:21;11788:4;11808:24;11826:4;11808:9;:24::i;:::-;11847:1;11863::::0;11879:7:::1;:5;:7::i;:::-;11901:15;11704:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11935:13;;;;;;;;;;;11928:29;;;11966:15;;;;;;;;;;;11984:14;11928:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11407:600::o:0;12695:143::-;12776:7;12803:11;:18;12815:5;12803:18;;;;;;;;;;;;;;;:27;12822:7;12803:27;;;;;;;;;;;;;;;;12796:34;;12695:143;;;;:::o;22213:180::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22333:11:::1;22306:12;:24;;:38;;;;22378:7;22355:12;:20;;:30;;;;22213:180:::0;;:::o;7144:244::-;6913:10;6903:20;;:6;;;;;;;;;;:20;;;6895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7253:1:::1;7233:22;;:8;:22;;::::0;7225:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7343:8;7314:38;;7335:6;::::0;::::1;;;;;;;;7314:38;;;;;;;;;;;;7372:8;7363:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7144:244:::0;:::o;15958:267::-;16068:1;16051:19;;:5;:19;;;16043:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;16114:1;16095:21;;:7;:21;;;16087:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;16163:6;16133:11;:18;16145:5;16133:18;;;;;;;;;;;;;;;:27;16152:7;16133:27;;;;;;;;;;;;;;;:36;;;;16201:7;16185:32;;16194:5;16185:32;;;16210:6;16185:32;;;;;;:::i;:::-;;;;;;;;15958:267;;;:::o;2718:136::-;2776:7;2803:43;2807:1;2810;2803:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2796:50;;2718:136;;;;:::o;2529:181::-;2587:7;2607:9;2623:1;2619;:5;;;;:::i;:::-;2607:17;;2648:1;2643;:6;;2635:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2701:1;2694:8;;;2529:181;;;;:::o;20342:408::-;20412:14;;;;;;;;;;;:30;;;20443:4;20412:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20408:51;20473:14;;;;;;;;;;;:30;;;20504:2;20473:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20469:49;20532:14;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20528:215;;;20713:9;20650:73;;20707:4;20650:73;;;20667:10;20679:6;20687:18;20650:73;;;;;;;;:::i;:::-;;;;;;;;20557:178;;;20528:215;20342:408;;:::o;16233:2905::-;16337:1;16321:18;;:4;:18;;;16313:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;16378:1;16364:16;;:2;:16;;;16356:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;16414:1;16405:6;:10;16397:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:13;16449:18;:24;16468:4;16449:24;;;;;;;;;;;;;;;;;;;;;;;;;16448:25;:52;;;;;16478:18;:22;16497:2;16478:22;;;;;;;;;;;;;;;;;;;;;;;;;16477:23;16448:52;:71;;;;;16512:7;:5;:7::i;:::-;16504:15;;:4;:15;;;;16448:71;:88;;;;;16529:7;:5;:7::i;:::-;16523:13;;:2;:13;;;;16448:88;16432:104;;16547:21;16571:25;16589:6;16571:13;16581:2;16571:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;16547:49;;16607:17;16740:7;:5;:7::i;:::-;16732:15;;:4;:15;;;;:32;;;;;16757:7;:5;:7::i;:::-;16751:13;;:2;:13;;;;16732:32;:52;;;;;16774:10;;;;;;;;;;;16768:16;;:2;:16;;;;16732:52;:77;;;;;16804:4;16788:21;;:4;:21;;;;16732:77;:100;;;;;16827:4;16813:19;;:2;:19;;;;16732:100;16728:2111;;;16861:13;;;;;;;;;;;16853:21;;:4;:21;;;16849:586;;16898:8;16895:104;;;16956:16;;16939:13;:33;;16931:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16895:104;17029:8;:51;;17079:1;17029:51;;;17040:35;17071:3;17040:26;17051:7;:14;;;17040:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;17029:51;17017:63;;17099:11;17113:29;17135:6;17113:21;:29::i;:::-;17099:43;;17161:15;17179:36;17208:6;17179:16;;;;;;;;;;;:20;;;17200:2;17179:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;17161:54;;17234:16;;;;;;;;;;;:20;;;17255:2;17259:10;17234:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17289:21;:25;17311:2;17289:25;;;;;;;;;;;;;;;17320:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17342:6;17320:29;;;17289:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;17374:45;17388:2;17399:6;17408:10;17374:45;;;;;;;;:::i;:::-;;;;;;;;16876:559;;16849:586;17461:13;;;;;;;;;;;17453:21;;:4;:21;;;;:44;;;;;17484:13;;;;;;;;;;;17478:19;;:2;:19;;;17453:44;17449:598;;;17530:8;:51;;17580:1;17530:51;;;17541:36;17573:3;17541:27;17552:7;:15;;;17541:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;17530:51;17518:63;;17600:12;17615:29;17637:6;17615:21;:29::i;:::-;17600:44;;17663:7;17711;17677:16;;;;;;;;;;;:20;;;17698:4;17677:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17673:46;;;;:::i;:::-;17663:56;;17738:18;17766:1;17759:3;:8;;:27;;17782:3;17759:27;;;17770:1;17759:27;17738:48;;17805:16;;;;;;;;;;;:20;;;17826:4;17832:10;17805:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17862:21;:27;17884:4;17862:27;;;;;;;;;;;;;;;17895:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17918:7;17895:31;;;17862:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;17951:49;17965:4;17979:7;17989:10;17951:49;;;;;;;;:::i;:::-;;;;;;;;18019:12;:10;:12::i;:::-;17499:548;;;17449:598;18073:13;;;;;;;;;;;18065:21;;:4;:21;;;;:44;;;;;18096:13;;;;;;;;;;;18090:19;;:2;:19;;;;18065:44;18061:731;;;18141:2;18133:10;;:4;:10;;;18130:629;;18168:11;18187:16;;;;;;;;;;;:20;;;18208:4;18187:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18168:46;;18240:24;18259:4;18240:18;:24::i;:::-;18237:451;;;18293:15;18311:36;18340:6;18311:16;;;;;;;;;;;:20;;;18332:2;18311:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;18293:54;;18374:16;;;;;;;;;;;:20;;;18395:2;18399:10;18374:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18437:21;:25;18459:2;18437:25;;;;;;;;;;;;;;;18468:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18490:6;18468:29;;;18437:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;18530:45;18544:2;18555:6;18564:10;18530:45;;;;;;;;:::i;:::-;;;;;;;;18266:333;18237:451;;;18632:16;;;;;;;;;;;:20;;;18653:2;18657:6;18632:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18237:451;18710:16;;;;;;;;;;;:20;;;18731:4;18737:1;18710:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18145:614;18130:629;18061:731;18806:21;18818:4;18824:2;18806:11;:21::i;:::-;16728:2111;18849:22;18874:21;18885:9;18874:6;:10;;:21;;;;:::i;:::-;18849:46;;18924:27;18944:6;18924:9;:15;18934:4;18924:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;18906:9;:15;18916:4;18906:15;;;;;;;;;;;;;;;:45;;;;18978:33;18996:14;18978:9;:13;18988:2;18978:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;18962:9;:13;18972:2;18962:13;;;;;;;;;;;;;;;:49;;;;19049:39;19078:9;19049;:24;19067:4;19049:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;19022:9;:24;19040:4;19022:24;;;;;;;;;;;;;;;:66;;;;19119:2;19104:26;;19113:4;19104:26;;;19123:6;19104:26;;;;;;:::i;:::-;;;;;;;;16302:2836;;;;16233:2905;;;:::o;2862:192::-;2948:7;2981:1;2976;:6;;2984:12;2968:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3008:9;3024:1;3020;:5;;;;:::i;:::-;3008:17;;3045:1;3038:8;;;2862:192;;;;;:::o;15031:236::-;15118:9;15113:147;15137:9;;:16;;15133:1;:20;15113:147;;;15175:12;15190:9;;15200:1;15190:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15175:27;;15244:4;15217:18;:24;15236:4;15217:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;15160:100;15155:3;;;;;:::i;:::-;;;;15113:147;;;;15031:236;;;:::o;22957:585::-;23083:21;23121:1;23107:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23083:40;;23152:4;23134;23139:1;23134:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23178:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23168:4;23173:1;23168:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23211:62;23228:4;23243:15;;;;;;;;;;;23261:11;23211:8;:62::i;:::-;23310:15;;;;;;;;;;;:66;;;23391:11;23417:1;23461:4;23488;23508:15;23310:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23012:530;22957:585;:::o;21534:359::-;9032:4;9013:16;;:23;;;;;;;;;;;;;;;;;;21593:18:::1;21614:21;21593:42;;21646:19;21668:49;21713:3;21668:40;21683:12;:24;;;21668:10;:14;;:40;;;;:::i;:::-;:44;;:49;;;;:::i;:::-;21646:71;;21728:15;21746:45;21787:3;21746:36;21761:12;:20;;;21746:10;:14;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;21728:63;;21810:18;;;;;;;;;;;21802:36;;:49;21839:11;21802:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21862:23;21877:7;21862:14;:23::i;:::-;21582:311;;;9060:5:::0;9041:16;;:24;;;;;;;;;;;;;;;;;;21534:359::o;14496:244::-;14587:9;14582:151;14606:9;;:16;;14602:1;:20;14582:151;;;14644:12;14659:9;;14669:1;14659:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14644:27;;14717:4;14686:22;:28;14709:4;14686:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14629:104;14624:3;;;;;:::i;:::-;;;;14582:151;;;;14496:244;;;:::o;3062:155::-;3120:7;3149:1;3144;:6;3140:47;;3174:1;3167:8;;;;3140:47;3208:1;3204;:5;;;;:::i;:::-;3197:12;;3062:155;;;;;:::o;3225:132::-;3283:7;3310:39;3314:1;3317;3310:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3303:46;;3225:132;;;;:::o;20758:479::-;20799:28;20830:24;20848:4;20830:9;:24::i;:::-;20799:55;;20892:1;20869:20;:24;20865:365;;;20910:19;20932:26;:24;:26::i;:::-;20910:48;;21001:11;20977:20;:35;;:56;;;;;21017:16;;;;;;;;;;;21016:17;20977:56;:81;;;;;21037:21;;;;;;;;;;;20977:81;20973:246;;;21137:29;21154:11;21137:16;:29::i;:::-;21185:18;:16;:18::i;:::-;20973:246;20895:335;20865:365;20788:449;20758:479::o;3872:372::-;3932:4;3949:16;3976:19;3998:66;3976:88;;;;4166:7;4154:20;4142:32;;4205:11;4193:8;:23;;:42;;;;;4232:3;4220:15;;:8;:15;;4193:42;4185:51;;;;3872:372;;;:::o;22570:210::-;22631:12;22656:14;;;;;;;;;;;22648:28;;22685:7;22648:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22630:67;;;22712:7;22708:65;;;22741:20;22753:7;22741:20;;;;;;:::i;:::-;;;;;;;;22708:65;22619:161;22570:210;:::o;3365:165::-;3451:7;3483:1;3479;:5;3486:12;3471:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3521:1;3517;:5;;;;:::i;:::-;3510:12;;3365:165;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1311:::-;1384:8;1394:6;1444:3;1437:4;1429:6;1425:17;1421:27;1411:122;;1452:79;;:::i;:::-;1411:122;1565:6;1552:20;1542:30;;1595:18;1587:6;1584:30;1581:117;;;1617:79;;:::i;:::-;1581:117;1731:4;1723:6;1719:17;1707:29;;1785:3;1777:4;1769:6;1765:17;1755:8;1751:32;1748:41;1745:128;;;1792:79;;:::i;:::-;1745:128;1311:568;;;;;:::o;1885:934::-;2007:6;2015;2023;2031;2080:2;2068:9;2059:7;2055:23;2051:32;2048:119;;;2086:79;;:::i;:::-;2048:119;2234:1;2223:9;2219:17;2206:31;2264:18;2256:6;2253:30;2250:117;;;2286:79;;:::i;:::-;2250:117;2399:80;2471:7;2462:6;2451:9;2447:22;2399:80;:::i;:::-;2381:98;;;;2177:312;2556:2;2545:9;2541:18;2528:32;2587:18;2579:6;2576:30;2573:117;;;2609:79;;:::i;:::-;2573:117;2722:80;2794:7;2785:6;2774:9;2770:22;2722:80;:::i;:::-;2704:98;;;;2499:313;1885:934;;;;;;;:::o;2825:99::-;2877:6;2911:5;2905:12;2895:22;;2825:99;;;:::o;2930:169::-;3014:11;3048:6;3043:3;3036:19;3088:4;3083:3;3079:14;3064:29;;2930:169;;;;:::o;3105:246::-;3186:1;3196:113;3210:6;3207:1;3204:13;3196:113;;;3295:1;3290:3;3286:11;3280:18;3276:1;3271:3;3267:11;3260:39;3232:2;3229:1;3225:10;3220:15;;3196:113;;;3343:1;3334:6;3329:3;3325:16;3318:27;3167:184;3105:246;;;:::o;3357:102::-;3398:6;3449:2;3445:7;3440:2;3433:5;3429:14;3425:28;3415:38;;3357:102;;;:::o;3465:377::-;3553:3;3581:39;3614:5;3581:39;:::i;:::-;3636:71;3700:6;3695:3;3636:71;:::i;:::-;3629:78;;3716:65;3774:6;3769:3;3762:4;3755:5;3751:16;3716:65;:::i;:::-;3806:29;3828:6;3806:29;:::i;:::-;3801:3;3797:39;3790:46;;3557:285;3465:377;;;;:::o;3848:313::-;3961:4;3999:2;3988:9;3984:18;3976:26;;4048:9;4042:4;4038:20;4034:1;4023:9;4019:17;4012:47;4076:78;4149:4;4140:6;4076:78;:::i;:::-;4068:86;;3848:313;;;;:::o;4167:126::-;4204:7;4244:42;4237:5;4233:54;4222:65;;4167:126;;;:::o;4299:96::-;4336:7;4365:24;4383:5;4365:24;:::i;:::-;4354:35;;4299:96;;;:::o;4401:122::-;4474:24;4492:5;4474:24;:::i;:::-;4467:5;4464:35;4454:63;;4513:1;4510;4503:12;4454:63;4401:122;:::o;4529:139::-;4575:5;4613:6;4600:20;4591:29;;4629:33;4656:5;4629:33;:::i;:::-;4529:139;;;;:::o;4674:77::-;4711:7;4740:5;4729:16;;4674:77;;;:::o;4757:122::-;4830:24;4848:5;4830:24;:::i;:::-;4823:5;4820:35;4810:63;;4869:1;4866;4859:12;4810:63;4757:122;:::o;4885:139::-;4931:5;4969:6;4956:20;4947:29;;4985:33;5012:5;4985:33;:::i;:::-;4885:139;;;;:::o;5030:474::-;5098:6;5106;5155:2;5143:9;5134:7;5130:23;5126:32;5123:119;;;5161:79;;:::i;:::-;5123:119;5281:1;5306:53;5351:7;5342:6;5331:9;5327:22;5306:53;:::i;:::-;5296:63;;5252:117;5408:2;5434:53;5479:7;5470:6;5459:9;5455:22;5434:53;:::i;:::-;5424:63;;5379:118;5030:474;;;;;:::o;5510:90::-;5544:7;5587:5;5580:13;5573:21;5562:32;;5510:90;;;:::o;5606:109::-;5687:21;5702:5;5687:21;:::i;:::-;5682:3;5675:34;5606:109;;:::o;5721:210::-;5808:4;5846:2;5835:9;5831:18;5823:26;;5859:65;5921:1;5910:9;5906:17;5897:6;5859:65;:::i;:::-;5721:210;;;;:::o;5937:118::-;6024:24;6042:5;6024:24;:::i;:::-;6019:3;6012:37;5937:118;;:::o;6061:332::-;6182:4;6220:2;6209:9;6205:18;6197:26;;6233:71;6301:1;6290:9;6286:17;6277:6;6233:71;:::i;:::-;6314:72;6382:2;6371:9;6367:18;6358:6;6314:72;:::i;:::-;6061:332;;;;;:::o;6399:329::-;6458:6;6507:2;6495:9;6486:7;6482:23;6478:32;6475:119;;;6513:79;;:::i;:::-;6475:119;6633:1;6658:53;6703:7;6694:6;6683:9;6679:22;6658:53;:::i;:::-;6648:63;;6604:117;6399:329;;;;:::o;6734:1309::-;6892:6;6900;6908;6916;6924;6932;6981:2;6969:9;6960:7;6956:23;6952:32;6949:119;;;6987:79;;:::i;:::-;6949:119;7135:1;7124:9;7120:17;7107:31;7165:18;7157:6;7154:30;7151:117;;;7187:79;;:::i;:::-;7151:117;7300:80;7372:7;7363:6;7352:9;7348:22;7300:80;:::i;:::-;7282:98;;;;7078:312;7457:2;7446:9;7442:18;7429:32;7488:18;7480:6;7477:30;7474:117;;;7510:79;;:::i;:::-;7474:117;7623:80;7695:7;7686:6;7675:9;7671:22;7623:80;:::i;:::-;7605:98;;;;7400:313;7780:2;7769:9;7765:18;7752:32;7811:18;7803:6;7800:30;7797:117;;;7833:79;;:::i;:::-;7797:117;7946:80;8018:7;8009:6;7998:9;7994:22;7946:80;:::i;:::-;7928:98;;;;7723:313;6734:1309;;;;;;;;:::o;8049:329::-;8108:6;8157:2;8145:9;8136:7;8132:23;8128:32;8125:119;;;8163:79;;:::i;:::-;8125:119;8283:1;8308:53;8353:7;8344:6;8333:9;8329:22;8308:53;:::i;:::-;8298:63;;8254:117;8049:329;;;;:::o;8384:222::-;8477:4;8515:2;8504:9;8500:18;8492:26;;8528:71;8596:1;8585:9;8581:17;8572:6;8528:71;:::i;:::-;8384:222;;;;:::o;8612:60::-;8640:3;8661:5;8654:12;;8612:60;;;:::o;8678:142::-;8728:9;8761:53;8779:34;8788:24;8806:5;8788:24;:::i;:::-;8779:34;:::i;:::-;8761:53;:::i;:::-;8748:66;;8678:142;;;:::o;8826:126::-;8876:9;8909:37;8940:5;8909:37;:::i;:::-;8896:50;;8826:126;;;:::o;8958:152::-;9034:9;9067:37;9098:5;9067:37;:::i;:::-;9054:50;;8958:152;;;:::o;9116:183::-;9229:63;9286:5;9229:63;:::i;:::-;9224:3;9217:76;9116:183;;:::o;9305:274::-;9424:4;9462:2;9451:9;9447:18;9439:26;;9475:97;9569:1;9558:9;9554:17;9545:6;9475:97;:::i;:::-;9305:274;;;;:::o;9585:619::-;9662:6;9670;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9853:1;9878:53;9923:7;9914:6;9903:9;9899:22;9878:53;:::i;:::-;9868:63;;9824:117;9980:2;10006:53;10051:7;10042:6;10031:9;10027:22;10006:53;:::i;:::-;9996:63;;9951:118;10108:2;10134:53;10179:7;10170:6;10159:9;10155:22;10134:53;:::i;:::-;10124:63;;10079:118;9585:619;;;;;:::o;10210:86::-;10245:7;10285:4;10278:5;10274:16;10263:27;;10210:86;;;:::o;10302:112::-;10385:22;10401:5;10385:22;:::i;:::-;10380:3;10373:35;10302:112;;:::o;10420:214::-;10509:4;10547:2;10536:9;10532:18;10524:26;;10560:67;10624:1;10613:9;10609:17;10600:6;10560:67;:::i;:::-;10420:214;;;;:::o;10640:116::-;10710:21;10725:5;10710:21;:::i;:::-;10703:5;10700:32;10690:60;;10746:1;10743;10736:12;10690:60;10640:116;:::o;10762:133::-;10805:5;10843:6;10830:20;10821:29;;10859:30;10883:5;10859:30;:::i;:::-;10762:133;;;;:::o;10901:698::-;10993:6;11001;11009;11058:2;11046:9;11037:7;11033:23;11029:32;11026:119;;;11064:79;;:::i;:::-;11026:119;11212:1;11201:9;11197:17;11184:31;11242:18;11234:6;11231:30;11228:117;;;11264:79;;:::i;:::-;11228:117;11377:80;11449:7;11440:6;11429:9;11425:22;11377:80;:::i;:::-;11359:98;;;;11155:312;11506:2;11532:50;11574:7;11565:6;11554:9;11550:22;11532:50;:::i;:::-;11522:60;;11477:115;10901:698;;;;;:::o;11605:118::-;11692:24;11710:5;11692:24;:::i;:::-;11687:3;11680:37;11605:118;;:::o;11729:222::-;11822:4;11860:2;11849:9;11845:18;11837:26;;11873:71;11941:1;11930:9;11926:17;11917:6;11873:71;:::i;:::-;11729:222;;;;:::o;11957:145::-;12055:6;12089:5;12083:12;12073:22;;11957:145;;;:::o;12108:215::-;12238:11;12272:6;12267:3;12260:19;12312:4;12307:3;12303:14;12288:29;;12108:215;;;;:::o;12329:163::-;12427:4;12450:3;12442:11;;12480:4;12475:3;12471:14;12463:22;;12329:163;;;:::o;12498:159::-;12572:11;12606:6;12601:3;12594:19;12646:4;12641:3;12637:14;12622:29;;12498:159;;;;:::o;12663:357::-;12741:3;12769:39;12802:5;12769:39;:::i;:::-;12824:61;12878:6;12873:3;12824:61;:::i;:::-;12817:68;;12894:65;12952:6;12947:3;12940:4;12933:5;12929:16;12894:65;:::i;:::-;12984:29;13006:6;12984:29;:::i;:::-;12979:3;12975:39;12968:46;;12745:275;12663:357;;;;:::o;13026:108::-;13103:24;13121:5;13103:24;:::i;:::-;13098:3;13091:37;13026:108;;:::o;13210:616::-;13331:3;13367:4;13362:3;13358:14;13460:4;13453:5;13449:16;13443:23;13513:3;13507:4;13503:14;13496:4;13491:3;13487:14;13480:38;13539:73;13607:4;13593:12;13539:73;:::i;:::-;13531:81;;13382:241;13707:4;13700:5;13696:16;13690:23;13726:63;13783:4;13778:3;13774:14;13760:12;13726:63;:::i;:::-;13633:166;13816:4;13809:11;;13336:490;13210:616;;;;:::o;13832:280::-;13963:10;13998:108;14102:3;14094:6;13998:108;:::i;:::-;13984:122;;13832:280;;;;:::o;14118:144::-;14219:4;14251;14246:3;14242:14;14234:22;;14118:144;;;:::o;14342:1159::-;14523:3;14552:85;14631:5;14552:85;:::i;:::-;14653:117;14763:6;14758:3;14653:117;:::i;:::-;14646:124;;14796:3;14841:4;14833:6;14829:17;14824:3;14820:27;14871:87;14952:5;14871:87;:::i;:::-;14981:7;15012:1;14997:459;15022:6;15019:1;15016:13;14997:459;;;15093:9;15087:4;15083:20;15078:3;15071:33;15144:6;15138:13;15172:126;15293:4;15278:13;15172:126;:::i;:::-;15164:134;;15321:91;15405:6;15321:91;:::i;:::-;15311:101;;15441:4;15436:3;15432:14;15425:21;;15057:399;15044:1;15041;15037:9;15032:14;;14997:459;;;15001:14;15472:4;15465:11;;15492:3;15485:10;;14528:973;;;;;14342:1159;;;;:::o;15507:497::-;15712:4;15750:2;15739:9;15735:18;15727:26;;15799:9;15793:4;15789:20;15785:1;15774:9;15770:17;15763:47;15827:170;15992:4;15983:6;15827:170;:::i;:::-;15819:178;;15507:497;;;;:::o;16010:134::-;16068:9;16101:37;16132:5;16101:37;:::i;:::-;16088:50;;16010:134;;;:::o;16150:165::-;16231:9;16264:45;16303:5;16264:45;:::i;:::-;16251:58;;16150:165;;;:::o;16321:193::-;16439:68;16501:5;16439:68;:::i;:::-;16434:3;16427:81;16321:193;;:::o;16520:284::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16695:102;16794:1;16783:9;16779:17;16770:6;16695:102;:::i;:::-;16520:284;;;;:::o;16810:474::-;16878:6;16886;16935:2;16923:9;16914:7;16910:23;16906:32;16903:119;;;16941:79;;:::i;:::-;16903:119;17061:1;17086:53;17131:7;17122:6;17111:9;17107:22;17086:53;:::i;:::-;17076:63;;17032:117;17188:2;17214:53;17259:7;17250:6;17239:9;17235:22;17214:53;:::i;:::-;17204:63;;17159:118;16810:474;;;;;:::o;17290:::-;17358:6;17366;17415:2;17403:9;17394:7;17390:23;17386:32;17383:119;;;17421:79;;:::i;:::-;17383:119;17541:1;17566:53;17611:7;17602:6;17591:9;17587:22;17566:53;:::i;:::-;17556:63;;17512:117;17668:2;17694:53;17739:7;17730:6;17719:9;17715:22;17694:53;:::i;:::-;17684:63;;17639:118;17290:474;;;;;:::o;17770:182::-;17910:34;17906:1;17898:6;17894:14;17887:58;17770:182;:::o;17958:366::-;18100:3;18121:67;18185:2;18180:3;18121:67;:::i;:::-;18114:74;;18197:93;18286:3;18197:93;:::i;:::-;18315:2;18310:3;18306:12;18299:19;;17958:366;;;:::o;18330:419::-;18496:4;18534:2;18523:9;18519:18;18511:26;;18583:9;18577:4;18573:20;18569:1;18558:9;18554:17;18547:47;18611:131;18737:4;18611:131;:::i;:::-;18603:139;;18330:419;;;:::o;18755:181::-;18895:33;18891:1;18883:6;18879:14;18872:57;18755:181;:::o;18942:366::-;19084:3;19105:67;19169:2;19164:3;19105:67;:::i;:::-;19098:74;;19181:93;19270:3;19181:93;:::i;:::-;19299:2;19294:3;19290:12;19283:19;;18942:366;;;:::o;19314:419::-;19480:4;19518:2;19507:9;19503:18;19495:26;;19567:9;19561:4;19557:20;19553:1;19542:9;19538:17;19531:47;19595:131;19721:4;19595:131;:::i;:::-;19587:139;;19314:419;;;:::o;19739:180::-;19787:77;19784:1;19777:88;19884:4;19881:1;19874:15;19908:4;19905:1;19898:15;19925:332;20046:4;20084:2;20073:9;20069:18;20061:26;;20097:71;20165:1;20154:9;20150:17;20141:6;20097:71;:::i;:::-;20178:72;20246:2;20235:9;20231:18;20222:6;20178:72;:::i;:::-;19925:332;;;;;:::o;20263:180::-;20311:77;20308:1;20301:88;20408:4;20405:1;20398:15;20432:4;20429:1;20422:15;20449:233;20488:3;20511:24;20529:5;20511:24;:::i;:::-;20502:33;;20557:66;20550:5;20547:77;20544:103;;20627:18;;:::i;:::-;20544:103;20674:1;20667:5;20663:13;20656:20;;20449:233;;;:::o;20688:180::-;20736:77;20733:1;20726:88;20833:4;20830:1;20823:15;20857:4;20854:1;20847:15;20874:320;20918:6;20955:1;20949:4;20945:12;20935:22;;21002:1;20996:4;20992:12;21023:18;21013:81;;21079:4;21071:6;21067:17;21057:27;;21013:81;21141:2;21133:6;21130:14;21110:18;21107:38;21104:84;;21160:18;;:::i;:::-;21104:84;20925:269;20874:320;;;:::o;21200:152::-;21340:4;21336:1;21328:6;21324:14;21317:28;21200:152;:::o;21358:365::-;21500:3;21521:66;21585:1;21580:3;21521:66;:::i;:::-;21514:73;;21596:93;21685:3;21596:93;:::i;:::-;21714:2;21709:3;21705:12;21698:19;;21358:365;;;:::o;21729:419::-;21895:4;21933:2;21922:9;21918:18;21910:26;;21982:9;21976:4;21972:20;21968:1;21957:9;21953:17;21946:47;22010:131;22136:4;22010:131;:::i;:::-;22002:139;;21729:419;;;:::o;22154:180::-;22202:77;22199:1;22192:88;22299:4;22296:1;22289:15;22323:4;22320:1;22313:15;22340:143;22397:5;22428:6;22422:13;22413:22;;22444:33;22471:5;22444:33;:::i;:::-;22340:143;;;;:::o;22489:351::-;22559:6;22608:2;22596:9;22587:7;22583:23;22579:32;22576:119;;;22614:79;;:::i;:::-;22576:119;22734:1;22759:64;22815:7;22806:6;22795:9;22791:22;22759:64;:::i;:::-;22749:74;;22705:128;22489:351;;;;:::o;22846:114::-;22913:6;22947:5;22941:12;22931:22;;22846:114;;;:::o;22966:184::-;23065:11;23099:6;23094:3;23087:19;23139:4;23134:3;23130:14;23115:29;;22966:184;;;;:::o;23156:132::-;23223:4;23246:3;23238:11;;23276:4;23271:3;23267:14;23259:22;;23156:132;;;:::o;23294:108::-;23371:24;23389:5;23371:24;:::i;:::-;23366:3;23359:37;23294:108;;:::o;23408:179::-;23477:10;23498:46;23540:3;23532:6;23498:46;:::i;:::-;23576:4;23571:3;23567:14;23553:28;;23408:179;;;;:::o;23593:113::-;23663:4;23695;23690:3;23686:14;23678:22;;23593:113;;;:::o;23742:732::-;23861:3;23890:54;23938:5;23890:54;:::i;:::-;23960:86;24039:6;24034:3;23960:86;:::i;:::-;23953:93;;24070:56;24120:5;24070:56;:::i;:::-;24149:7;24180:1;24165:284;24190:6;24187:1;24184:13;24165:284;;;24266:6;24260:13;24293:63;24352:3;24337:13;24293:63;:::i;:::-;24286:70;;24379:60;24432:6;24379:60;:::i;:::-;24369:70;;24225:224;24212:1;24209;24205:9;24200:14;;24165:284;;;24169:14;24465:3;24458:10;;23866:608;;;23742:732;;;;:::o;24480:483::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24702:71;24770:1;24759:9;24755:17;24746:6;24702:71;:::i;:::-;24820:9;24814:4;24810:20;24805:2;24794:9;24790:18;24783:48;24848:108;24951:4;24942:6;24848:108;:::i;:::-;24840:116;;24480:483;;;;;:::o;24969:281::-;25052:27;25074:4;25052:27;:::i;:::-;25044:6;25040:40;25182:6;25170:10;25167:22;25146:18;25134:10;25131:34;25128:62;25125:88;;;25193:18;;:::i;:::-;25125:88;25233:10;25229:2;25222:22;25012:238;24969:281;;:::o;25256:129::-;25290:6;25317:20;;:::i;:::-;25307:30;;25346:33;25374:4;25366:6;25346:33;:::i;:::-;25256:129;;;:::o;25391:311::-;25468:4;25558:18;25550:6;25547:30;25544:56;;;25580:18;;:::i;:::-;25544:56;25630:4;25622:6;25618:17;25610:25;;25690:4;25684;25680:15;25672:23;;25391:311;;;:::o;25708:143::-;25765:5;25796:6;25790:13;25781:22;;25812:33;25839:5;25812:33;:::i;:::-;25708:143;;;;:::o;25874:732::-;25981:5;26006:81;26022:64;26079:6;26022:64;:::i;:::-;26006:81;:::i;:::-;25997:90;;26107:5;26136:6;26129:5;26122:21;26170:4;26163:5;26159:16;26152:23;;26223:4;26215:6;26211:17;26203:6;26199:30;26252:3;26244:6;26241:15;26238:122;;;26271:79;;:::i;:::-;26238:122;26386:6;26369:231;26403:6;26398:3;26395:15;26369:231;;;26478:3;26507:48;26551:3;26539:10;26507:48;:::i;:::-;26502:3;26495:61;26585:4;26580:3;26576:14;26569:21;;26445:155;26429:4;26424:3;26420:14;26413:21;;26369:231;;;26373:21;25987:619;;25874:732;;;;;:::o;26629:385::-;26711:5;26760:3;26753:4;26745:6;26741:17;26737:27;26727:122;;26768:79;;:::i;:::-;26727:122;26878:6;26872:13;26903:105;27004:3;26996:6;26989:4;26981:6;26977:17;26903:105;:::i;:::-;26894:114;;26717:297;26629:385;;;;:::o;27020:554::-;27115:6;27164:2;27152:9;27143:7;27139:23;27135:32;27132:119;;;27170:79;;:::i;:::-;27132:119;27311:1;27300:9;27296:17;27290:24;27341:18;27333:6;27330:30;27327:117;;;27363:79;;:::i;:::-;27327:117;27468:89;27549:7;27540:6;27529:9;27525:22;27468:89;:::i;:::-;27458:99;;27261:306;27020:554;;;;:::o;27580:410::-;27620:7;27643:20;27661:1;27643:20;:::i;:::-;27638:25;;27677:20;27695:1;27677:20;:::i;:::-;27672:25;;27732:1;27729;27725:9;27754:30;27772:11;27754:30;:::i;:::-;27743:41;;27933:1;27924:7;27920:15;27917:1;27914:22;27894:1;27887:9;27867:83;27844:139;;27963:18;;:::i;:::-;27844:139;27628:362;27580:410;;;;:::o;27996:351::-;28066:6;28115:2;28103:9;28094:7;28090:23;28086:32;28083:119;;;28121:79;;:::i;:::-;28083:119;28241:1;28266:64;28322:7;28313:6;28302:9;28298:22;28266:64;:::i;:::-;28256:74;;28212:128;27996:351;;;;:::o;28353:151::-;28493:3;28489:1;28481:6;28477:14;28470:27;28353:151;:::o;28510:365::-;28652:3;28673:66;28737:1;28732:3;28673:66;:::i;:::-;28666:73;;28748:93;28837:3;28748:93;:::i;:::-;28866:2;28861:3;28857:12;28850:19;;28510:365;;;:::o;28881:419::-;29047:4;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;28881:419;;;:::o;29306:151::-;29446:3;29442:1;29434:6;29430:14;29423:27;29306:151;:::o;29463:365::-;29605:3;29626:66;29690:1;29685:3;29626:66;:::i;:::-;29619:73;;29701:93;29790:3;29701:93;:::i;:::-;29819:2;29814:3;29810:12;29803:19;;29463:365;;;:::o;29834:419::-;30000:4;30038:2;30027:9;30023:18;30015:26;;30087:9;30081:4;30077:20;30073:1;30062:9;30058:17;30051:47;30115:131;30241:4;30115:131;:::i;:::-;30107:139;;29834:419;;;:::o;30259:152::-;30399:4;30395:1;30387:6;30383:14;30376:28;30259:152;:::o;30417:365::-;30559:3;30580:66;30644:1;30639:3;30580:66;:::i;:::-;30573:73;;30655:93;30744:3;30655:93;:::i;:::-;30773:2;30768:3;30764:12;30757:19;;30417:365;;;:::o;30788:419::-;30954:4;30992:2;30981:9;30977:18;30969:26;;31041:9;31035:4;31031:20;31027:1;31016:9;31012:17;31005:47;31069:131;31195:4;31069:131;:::i;:::-;31061:139;;30788:419;;;:::o;31213:332::-;31334:4;31372:2;31361:9;31357:18;31349:26;;31385:71;31453:1;31442:9;31438:17;31429:6;31385:71;:::i;:::-;31466:72;31534:2;31523:9;31519:18;31510:6;31466:72;:::i;:::-;31213:332;;;;;:::o;31551:85::-;31596:7;31625:5;31614:16;;31551:85;;;:::o;31642:158::-;31700:9;31733:61;31751:42;31760:32;31786:5;31760:32;:::i;:::-;31751:42;:::i;:::-;31733:61;:::i;:::-;31720:74;;31642:158;;;:::o;31806:147::-;31901:45;31940:5;31901:45;:::i;:::-;31896:3;31889:58;31806:147;;:::o;31959:807::-;32208:4;32246:3;32235:9;32231:19;32223:27;;32260:71;32328:1;32317:9;32313:17;32304:6;32260:71;:::i;:::-;32341:72;32409:2;32398:9;32394:18;32385:6;32341:72;:::i;:::-;32423:80;32499:2;32488:9;32484:18;32475:6;32423:80;:::i;:::-;32513;32589:2;32578:9;32574:18;32565:6;32513:80;:::i;:::-;32603:73;32671:3;32660:9;32656:19;32647:6;32603:73;:::i;:::-;32686;32754:3;32743:9;32739:19;32730:6;32686:73;:::i;:::-;31959:807;;;;;;;;;:::o;32772:663::-;32860:6;32868;32876;32925:2;32913:9;32904:7;32900:23;32896:32;32893:119;;;32931:79;;:::i;:::-;32893:119;33051:1;33076:64;33132:7;33123:6;33112:9;33108:22;33076:64;:::i;:::-;33066:74;;33022:128;33189:2;33215:64;33271:7;33262:6;33251:9;33247:22;33215:64;:::i;:::-;33205:74;;33160:129;33328:2;33354:64;33410:7;33401:6;33390:9;33386:22;33354:64;:::i;:::-;33344:74;;33299:129;32772:663;;;;;:::o;33441:137::-;33495:5;33526:6;33520:13;33511:22;;33542:30;33566:5;33542:30;:::i;:::-;33441:137;;;;:::o;33584:345::-;33651:6;33700:2;33688:9;33679:7;33675:23;33671:32;33668:119;;;33706:79;;:::i;:::-;33668:119;33826:1;33851:61;33904:7;33895:6;33884:9;33880:22;33851:61;:::i;:::-;33841:71;;33797:125;33584:345;;;;:::o;33935:225::-;34075:34;34071:1;34063:6;34059:14;34052:58;34144:8;34139:2;34131:6;34127:15;34120:33;33935:225;:::o;34166:366::-;34308:3;34329:67;34393:2;34388:3;34329:67;:::i;:::-;34322:74;;34405:93;34494:3;34405:93;:::i;:::-;34523:2;34518:3;34514:12;34507:19;;34166:366;;;:::o;34538:419::-;34704:4;34742:2;34731:9;34727:18;34719:26;;34791:9;34785:4;34781:20;34777:1;34766:9;34762:17;34755:47;34819:131;34945:4;34819:131;:::i;:::-;34811:139;;34538:419;;;:::o;34963:151::-;35103:3;35099:1;35091:6;35087:14;35080:27;34963:151;:::o;35120:365::-;35262:3;35283:66;35347:1;35342:3;35283:66;:::i;:::-;35276:73;;35358:93;35447:3;35358:93;:::i;:::-;35476:2;35471:3;35467:12;35460:19;;35120:365;;;:::o;35491:419::-;35657:4;35695:2;35684:9;35680:18;35672:26;;35744:9;35738:4;35734:20;35730:1;35719:9;35715:17;35708:47;35772:131;35898:4;35772:131;:::i;:::-;35764:139;;35491:419;;;:::o;35916:151::-;36056:3;36052:1;36044:6;36040:14;36033:27;35916:151;:::o;36073:365::-;36215:3;36236:66;36300:1;36295:3;36236:66;:::i;:::-;36229:73;;36311:93;36400:3;36311:93;:::i;:::-;36429:2;36424:3;36420:12;36413:19;;36073:365;;;:::o;36444:419::-;36610:4;36648:2;36637:9;36633:18;36625:26;;36697:9;36691:4;36687:20;36683:1;36672:9;36668:17;36661:47;36725:131;36851:4;36725:131;:::i;:::-;36717:139;;36444:419;;;:::o;36869:191::-;36909:3;36928:20;36946:1;36928:20;:::i;:::-;36923:25;;36962:20;36980:1;36962:20;:::i;:::-;36957:25;;37005:1;37002;36998:9;36991:16;;37026:3;37023:1;37020:10;37017:36;;;37033:18;;:::i;:::-;37017:36;36869:191;;;;:::o;37066:177::-;37206:29;37202:1;37194:6;37190:14;37183:53;37066:177;:::o;37249:366::-;37391:3;37412:67;37476:2;37471:3;37412:67;:::i;:::-;37405:74;;37488:93;37577:3;37488:93;:::i;:::-;37606:2;37601:3;37597:12;37590:19;;37249:366;;;:::o;37621:419::-;37787:4;37825:2;37814:9;37810:18;37802:26;;37874:9;37868:4;37864:20;37860:1;37849:9;37845:17;37838:47;37902:131;38028:4;37902:131;:::i;:::-;37894:139;;37621:419;;;:::o;38046:442::-;38195:4;38233:2;38222:9;38218:18;38210:26;;38246:71;38314:1;38303:9;38299:17;38290:6;38246:71;:::i;:::-;38327:72;38395:2;38384:9;38380:18;38371:6;38327:72;:::i;:::-;38409;38477:2;38466:9;38462:18;38453:6;38409:72;:::i;:::-;38046:442;;;;;;:::o;38494:151::-;38634:3;38630:1;38622:6;38618:14;38611:27;38494:151;:::o;38651:365::-;38793:3;38814:66;38878:1;38873:3;38814:66;:::i;:::-;38807:73;;38889:93;38978:3;38889:93;:::i;:::-;39007:2;39002:3;38998:12;38991:19;;38651:365;;;:::o;39022:419::-;39188:4;39226:2;39215:9;39211:18;39203:26;;39275:9;39269:4;39265:20;39261:1;39250:9;39246:17;39239:47;39303:131;39429:4;39303:131;:::i;:::-;39295:139;;39022:419;;;:::o;39447:151::-;39587:3;39583:1;39575:6;39571:14;39564:27;39447:151;:::o;39604:365::-;39746:3;39767:66;39831:1;39826:3;39767:66;:::i;:::-;39760:73;;39842:93;39931:3;39842:93;:::i;:::-;39960:2;39955:3;39951:12;39944:19;;39604:365;;;:::o;39975:419::-;40141:4;40179:2;40168:9;40164:18;40156:26;;40228:9;40222:4;40218:20;40214:1;40203:9;40199:17;40192:47;40256:131;40382:4;40256:131;:::i;:::-;40248:139;;39975:419;;;:::o;40400:151::-;40540:3;40536:1;40528:6;40524:14;40517:27;40400:151;:::o;40557:365::-;40699:3;40720:66;40784:1;40779:3;40720:66;:::i;:::-;40713:73;;40795:93;40884:3;40795:93;:::i;:::-;40913:2;40908:3;40904:12;40897:19;;40557:365;;;:::o;40928:419::-;41094:4;41132:2;41121:9;41117:18;41109:26;;41181:9;41175:4;41171:20;41167:1;41156:9;41152:17;41145:47;41209:131;41335:4;41209:131;:::i;:::-;41201:139;;40928:419;;;:::o;41353:152::-;41493:4;41489:1;41481:6;41477:14;41470:28;41353:152;:::o;41511:365::-;41653:3;41674:66;41738:1;41733:3;41674:66;:::i;:::-;41667:73;;41749:93;41838:3;41749:93;:::i;:::-;41867:2;41862:3;41858:12;41851:19;;41511:365;;;:::o;41882:419::-;42048:4;42086:2;42075:9;42071:18;42063:26;;42135:9;42129:4;42125:20;42121:1;42110:9;42106:17;42099:47;42163:131;42289:4;42163:131;:::i;:::-;42155:139;;41882:419;;;:::o;42307:141::-;42356:4;42379:3;42371:11;;42402:3;42399:1;42392:14;42436:4;42433:1;42423:18;42415:26;;42307:141;;;:::o;42454:93::-;42491:6;42538:2;42533;42526:5;42522:14;42518:23;42508:33;;42454:93;;;:::o;42553:107::-;42597:8;42647:5;42641:4;42637:16;42616:37;;42553:107;;;;:::o;42666:393::-;42735:6;42785:1;42773:10;42769:18;42808:97;42838:66;42827:9;42808:97;:::i;:::-;42926:39;42956:8;42945:9;42926:39;:::i;:::-;42914:51;;42998:4;42994:9;42987:5;42983:21;42974:30;;43047:4;43037:8;43033:19;43026:5;43023:30;43013:40;;42742:317;;42666:393;;;;;:::o;43065:142::-;43115:9;43148:53;43166:34;43175:24;43193:5;43175:24;:::i;:::-;43166:34;:::i;:::-;43148:53;:::i;:::-;43135:66;;43065:142;;;:::o;43213:75::-;43256:3;43277:5;43270:12;;43213:75;;;:::o;43294:269::-;43404:39;43435:7;43404:39;:::i;:::-;43465:91;43514:41;43538:16;43514:41;:::i;:::-;43506:6;43499:4;43493:11;43465:91;:::i;:::-;43459:4;43452:105;43370:193;43294:269;;;:::o;43569:73::-;43614:3;43569:73;:::o;43648:189::-;43725:32;;:::i;:::-;43766:65;43824:6;43816;43810:4;43766:65;:::i;:::-;43701:136;43648:189;;:::o;43843:186::-;43903:120;43920:3;43913:5;43910:14;43903:120;;;43974:39;44011:1;44004:5;43974:39;:::i;:::-;43947:1;43940:5;43936:13;43927:22;;43903:120;;;43843:186;;:::o;44035:543::-;44136:2;44131:3;44128:11;44125:446;;;44170:38;44202:5;44170:38;:::i;:::-;44254:29;44272:10;44254:29;:::i;:::-;44244:8;44240:44;44437:2;44425:10;44422:18;44419:49;;;44458:8;44443:23;;44419:49;44481:80;44537:22;44555:3;44537:22;:::i;:::-;44527:8;44523:37;44510:11;44481:80;:::i;:::-;44140:431;;44125:446;44035:543;;;:::o;44584:117::-;44638:8;44688:5;44682:4;44678:16;44657:37;;44584:117;;;;:::o;44707:169::-;44751:6;44784:51;44832:1;44828:6;44820:5;44817:1;44813:13;44784:51;:::i;:::-;44780:56;44865:4;44859;44855:15;44845:25;;44758:118;44707:169;;;;:::o;44881:295::-;44957:4;45103:29;45128:3;45122:4;45103:29;:::i;:::-;45095:37;;45165:3;45162:1;45158:11;45152:4;45149:21;45141:29;;44881:295;;;;:::o;45181:1395::-;45298:37;45331:3;45298:37;:::i;:::-;45400:18;45392:6;45389:30;45386:56;;;45422:18;;:::i;:::-;45386:56;45466:38;45498:4;45492:11;45466:38;:::i;:::-;45551:67;45611:6;45603;45597:4;45551:67;:::i;:::-;45645:1;45669:4;45656:17;;45701:2;45693:6;45690:14;45718:1;45713:618;;;;46375:1;46392:6;46389:77;;;46441:9;46436:3;46432:19;46426:26;46417:35;;46389:77;46492:67;46552:6;46545:5;46492:67;:::i;:::-;46486:4;46479:81;46348:222;45683:887;;45713:618;45765:4;45761:9;45753:6;45749:22;45799:37;45831:4;45799:37;:::i;:::-;45858:1;45872:208;45886:7;45883:1;45880:14;45872:208;;;45965:9;45960:3;45956:19;45950:26;45942:6;45935:42;46016:1;46008:6;46004:14;45994:24;;46063:2;46052:9;46048:18;46035:31;;45909:4;45906:1;45902:12;45897:17;;45872:208;;;46108:6;46099:7;46096:19;46093:179;;;46166:9;46161:3;46157:19;46151:26;46209:48;46251:4;46243:6;46239:17;46228:9;46209:48;:::i;:::-;46201:6;46194:64;46116:156;46093:179;46318:1;46314;46306:6;46302:14;46298:22;46292:4;46285:36;45720:611;;;45683:887;;45273:1303;;;45181:1395;;:::o;46582:153::-;46722:5;46718:1;46710:6;46706:14;46699:29;46582:153;:::o;46741:365::-;46883:3;46904:66;46968:1;46963:3;46904:66;:::i;:::-;46897:73;;46979:93;47068:3;46979:93;:::i;:::-;47097:2;47092:3;47088:12;47081:19;;46741:365;;;:::o;47112:750::-;47362:4;47400:3;47389:9;47385:19;47377:27;;47414:71;47482:1;47471:9;47467:17;47458:6;47414:71;:::i;:::-;47532:9;47526:4;47522:20;47517:2;47506:9;47502:18;47495:48;47560:131;47686:4;47560:131;:::i;:::-;47552:139;;47701:72;47769:2;47758:9;47754:18;47745:6;47701:72;:::i;:::-;47783;47851:2;47840:9;47836:18;47827:6;47783:72;:::i;:::-;47112:750;;;;;;:::o;47868:76::-;47904:7;47933:5;47922:16;;47868:76;;;:::o;47950:372::-;47989:4;48009:19;48026:1;48009:19;:::i;:::-;48004:24;;48042:19;48059:1;48042:19;:::i;:::-;48037:24;;48085:1;48082;48078:9;48070:17;;48279:1;48273:4;48269:12;48265:1;48262;48258:9;48254:28;48237:1;48231:4;48227:12;48222:1;48219;48215:9;48208:17;48204:36;48188:104;48185:130;;;48295:18;;:::i;:::-;48185:130;47950:372;;;;:::o;48328:154::-;48468:6;48464:1;48456:6;48452:14;48445:30;48328:154;:::o;48488:365::-;48630:3;48651:66;48715:1;48710:3;48651:66;:::i;:::-;48644:73;;48726:93;48815:3;48726:93;:::i;:::-;48844:2;48839:3;48835:12;48828:19;;48488:365;;;:::o;48859:750::-;49109:4;49147:3;49136:9;49132:19;49124:27;;49161:71;49229:1;49218:9;49214:17;49205:6;49161:71;:::i;:::-;49279:9;49273:4;49269:20;49264:2;49253:9;49249:18;49242:48;49307:131;49433:4;49307:131;:::i;:::-;49299:139;;49448:72;49516:2;49505:9;49501:18;49492:6;49448:72;:::i;:::-;49530;49598:2;49587:9;49583:18;49574:6;49530:72;:::i;:::-;48859:750;;;;;;:::o;49615:348::-;49744:4;49782:2;49771:9;49767:18;49759:26;;49795:71;49863:1;49852:9;49848:17;49839:6;49795:71;:::i;:::-;49876:80;49952:2;49941:9;49937:18;49928:6;49876:80;:::i;:::-;49615:348;;;;;:::o;49969:194::-;50009:4;50029:20;50047:1;50029:20;:::i;:::-;50024:25;;50063:20;50081:1;50063:20;:::i;:::-;50058:25;;50107:1;50104;50100:9;50092:17;;50131:1;50125:4;50122:11;50119:37;;;50136:18;;:::i;:::-;50119:37;49969:194;;;;:::o;50169:831::-;50432:4;50470:3;50459:9;50455:19;50447:27;;50484:71;50552:1;50541:9;50537:17;50528:6;50484:71;:::i;:::-;50565:80;50641:2;50630:9;50626:18;50617:6;50565:80;:::i;:::-;50692:9;50686:4;50682:20;50677:2;50666:9;50662:18;50655:48;50720:108;50823:4;50814:6;50720:108;:::i;:::-;50712:116;;50838:72;50906:2;50895:9;50891:18;50882:6;50838:72;:::i;:::-;50920:73;50988:3;50977:9;50973:19;50964:6;50920:73;:::i;:::-;50169:831;;;;;;;;:::o;51006:147::-;51107:11;51144:3;51129:18;;51006:147;;;;:::o;51159:114::-;;:::o;51279:398::-;51438:3;51459:83;51540:1;51535:3;51459:83;:::i;:::-;51452:90;;51551:93;51640:3;51551:93;:::i;:::-;51669:1;51664:3;51660:11;51653:18;;51279:398;;;:::o;51683:379::-;51867:3;51889:147;52032:3;51889:147;:::i;:::-;51882:154;;52053:3;52046:10;;51683:379;;;:::o;52068:180::-;52116:77;52113:1;52106:88;52213:4;52210:1;52203:15;52237:4;52234:1;52227:15;52254:185;52294:1;52311:20;52329:1;52311:20;:::i;:::-;52306:25;;52345:20;52363:1;52345:20;:::i;:::-;52340:25;;52384:1;52374:35;;52389:18;;:::i;:::-;52374:35;52431:1;52428;52424:9;52419:14;;52254:185;;;;:::o
Swarm Source
ipfs://694dbe9ad258a3a5a7909c4a2460aad52c6b2e424116b070cbc77394ae92dafd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.