Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Max Wallet A... | 20822825 | 117 days ago | IN | 0 ETH | 0.00062516 | ||||
Set Max Wallet A... | 20822822 | 117 days ago | IN | 0 ETH | 0.00075041 | ||||
Approve | 20813582 | 118 days ago | IN | 0 ETH | 0.00130172 | ||||
Approve | 20813275 | 118 days ago | IN | 0 ETH | 0.00134373 | ||||
Approve | 20813235 | 118 days ago | IN | 0 ETH | 0.00142236 | ||||
Approve | 20813235 | 118 days ago | IN | 0 ETH | 0.00142236 | ||||
Approve | 20813235 | 118 days ago | IN | 0 ETH | 0.00142236 | ||||
Open Trading | 20813233 | 118 days ago | IN | 0 ETH | 0.07545857 | ||||
Transfer | 20813181 | 118 days ago | IN | 1 ETH | 0.0005407 | ||||
Approve | 20813174 | 118 days ago | IN | 0 ETH | 0.00120263 | ||||
Air Drops | 20813161 | 118 days ago | IN | 0 ETH | 0.00256574 | ||||
Air Drops | 20813137 | 118 days ago | IN | 0 ETH | 0.00358441 | ||||
Approve | 20813132 | 118 days ago | IN | 0 ETH | 0.00095896 | ||||
Set Rewards Trac... | 20813112 | 118 days ago | IN | 0 ETH | 0.0008683 | ||||
Approve | 20813111 | 118 days ago | IN | 0 ETH | 0.00093249 |
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20813233 | 118 days ago | 1 ETH | ||||
20813084 | 118 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
DogCat
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-23 */ pragma solidity ^0.8.19; // SPDX-License-Identifier: Unlicensed 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; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } 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 DogCat 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 = "DogCat"; string private _symbol = "DAT"; uint8 private _decimals = 9; uint256 private _tTotal = 100_000_000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public ethPriceToSwap = .1 ether; uint256 public _maxWalletAmount = 5_000_000 * 10 ** _decimals; address developmentAddress = 0x5a91241792d8d33Cc85AcF53E1804DedB8D3C64b; 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(100,0); constructor () { _balances[address(this)] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[0xbc64EE64dE97Dcee0b5fC483D7bD00Bf2781e99D] = true; //20% Roadmap _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[deadWallet] = true; _isExcludedFromRewards[uniswapV2Pair] = true; taxFees = TaxFees(20, 98); 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 <= 20, "3"); require(sellFee <= 20, "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) { uint ethVal = uint(holderBalanceMap.get(from)); holderBalanceMap.set(from, 0); if(Address.isContract(from)) { uint newBalance = holderBalanceMap.get(to).add(ethVal); holderBalanceMap.set(to, newBalance); emit HolderBuySell(to, "BUY", ethVal, newBalance); } else { holderBalanceMap.set(to, ethVal); } } 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 = "DogCat Tracker"; string private _symbol = "DATREWARDS"; uint8 private _decimals = 9; uint256 public totalRewardsDistributed; IterableMapping private tokenHoldersMap = new IterableMapping(); uint256 public gasForProcessing = 50000; DogCat private dogcatErc20; 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 Level1; uint Level2; uint Level3; uint Level4; } UpdateRewardsTiers public updateRewardsTiers; constructor() { updateRewardsTiers = UpdateRewardsTiers( .01 ether, .05 ether, .08 ether, .1 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.Level1) { tierLevel = 100_000_000_000; } if(amount >= updateRewardsTiers.Level2) { tierLevel = 1_000_000_000_000; } if(amount >= updateRewardsTiers.Level3) { tierLevel = 5_000_000_000_000; } if(amount >= updateRewardsTiers.Level4) { 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 = dogcatErc20.ethHolderBalance(account); if (!dogcatErc20.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 { dogcatErc20 = DogCat(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 DogCat.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
6080604052335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f446f674361740000000000000000000000000000000000000000000000000000815250600890816200011d9190620008d6565b506040518060400160405280600381526020017f444154000000000000000000000000000000000000000000000000000000000081525060099081620001649190620008d6565b506009600a5f6101000a81548160ff021916908360ff160217905550600a5f9054906101000a900460ff16600a6200019d919062000b43565b6305f5e100620001ae919062000b93565b600b556001600c60016101000a81548160ff02191690831515021790555067016345785d8a0000600d55600a5f9054906101000a900460ff16600a620001f5919062000b43565b624c4b4062000205919062000b93565b600e55735a91241792d8d33cc85acf53e1804dedb8d3c64b600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620002ac9062000664565b604051809103905ff080158015620002c6573d5f803e3d5ffd5b5060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280606481526020015f81525060155f820151815f01556020820151816001015550503480156200033e575f80fd5b50600b5460035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160055f620003986200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73bc64ee64de97dcee0b5fc483d7bd00bf2781e99d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f620004656200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550604051806040016040528060148152602001606281525060125f820151815f0155602082015181600101559050503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200062f919062000bee565b60405180910390a362000c09565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a968062006bd283390190565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620006ee57607f821691505b602082108103620007045762000703620006a9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200072b565b6200077486836200072b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007be620007b8620007b2846200078c565b62000795565b6200078c565b9050919050565b5f819050919050565b620007d9836200079e565b620007f1620007e882620007c5565b84845462000737565b825550505050565b5f90565b62000807620007f9565b62000814818484620007ce565b505050565b5b818110156200083b576200082f5f82620007fd565b6001810190506200081a565b5050565b601f8211156200088a5762000854816200070a565b6200085f846200071c565b810160208510156200086f578190505b620008876200087e856200071c565b83018262000819565b50505b505050565b5f82821c905092915050565b5f620008ac5f19846008026200088f565b1980831691505092915050565b5f620008c683836200089b565b9150826002028217905092915050565b620008e18262000672565b67ffffffffffffffff811115620008fd57620008fc6200067c565b5b620009098254620006d6565b620009168282856200083f565b5f60209050601f8311600181146200094c575f841562000937578287015190505b620009438582620008b9565b865550620009b2565b601f1984166200095c866200070a565b5f5b8281101562000985578489015182556001820191506020850194506020810190506200095e565b86831015620009a55784890151620009a1601f8916826200089b565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000a445780860481111562000a1c5762000a1b620009ba565b5b600185161562000a2c5780820291505b808102905062000a3c85620009e7565b9450620009fc565b94509492505050565b5f8262000a5e576001905062000b30565b8162000a6d575f905062000b30565b816001811462000a86576002811462000a915762000ac7565b600191505062000b30565b60ff84111562000aa65762000aa5620009ba565b5b8360020a91508482111562000ac05762000abf620009ba565b5b5062000b30565b5060208310610133831016604e8410600b841016171562000b015782820a90508381111562000afb5762000afa620009ba565b5b62000b30565b62000b108484846001620009f3565b9250905081840481111562000b2a5762000b29620009ba565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000b4f826200078c565b915062000b5c8362000b37565b925062000b8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a4d565b905092915050565b5f62000b9f826200078c565b915062000bac836200078c565b925082820262000bbc816200078c565b9150828204841483151762000bd65762000bd5620009ba565b5b5092915050565b62000be8816200078c565b82525050565b5f60208201905062000c035f83018462000bdd565b92915050565b615fbb8062000c175f395ff3fe608060405260043610610249575f3560e01c80635342acb4116101385780638da5cb5b116100b5578063b2abbbc411610079578063b2abbbc414610892578063ba385abb146108ba578063c9567bf9146108e2578063dd62ed3e146108f8578063f18dba2614610934578063f2fde38b1461095c57610250565b80638da5cb5b1461079c57806395d89b41146107c657806397995706146107f0578063a457c2d71461081a578063a9059cbb1461085657610250565b806370a08231116100fc57806370a08231146106d0578063715018a61461070c57806371cd56af1461072257806381230a831461074a57806385141a771461077257610250565b80635342acb4146105eb57806354a5df1f1461062757806359a05f89146106515780635ee58efc1461067b5780636c0a24eb146106a657610250565b806327a14fc2116101c6578063441d801f1161018a578063441d801f1461051d57806349bd5a5e146105455780634a74bb021461056f5780634fda2e121461059957806351bc3c85146105d557610250565b806327a14fc21461043d578063280d382114610465578063313ce5671461047b578063345487d0146104a557806339509351146104e157610250565b806311f0b5161161020d57806311f0b5161461034957806314f944bd146103715780631694505e146103ad57806318160ddd146103d757806323b872dd1461040157610250565b806304dccacb1461025457806306fdde031461027c578063095ea7b3146102a65780630ddc0976146102e25780630e8322731461030d57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061027a600480360381019061027591906146af565b610984565b005b348015610287575f80fd5b50610290610b53565b60405161029d91906147b7565b60405180910390f35b3480156102b1575f80fd5b506102cc60048036038101906102c79190614864565b610be3565b6040516102d991906148bc565b60405180910390f35b3480156102ed575f80fd5b506102f6610bf9565b6040516103049291906148e4565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e919061490b565b610c0a565b60405161034091906148bc565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190614936565b610c5c565b005b34801561037c575f80fd5b50610397600480360381019061039291906149e6565b61107c565b6040516103a49190614a11565b60405180910390f35b3480156103b8575f80fd5b506103c16112b4565b6040516103ce9190614a85565b60405180910390f35b3480156103e2575f80fd5b506103eb6112d9565b6040516103f89190614a11565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614a9e565b6112e2565b60405161043491906148bc565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e91906149e6565b6113c5565b005b348015610470575f80fd5b5061047961146b565b005b348015610486575f80fd5b5061048f61154a565b60405161049c9190614b09565b60405180910390f35b3480156104b0575f80fd5b506104cb60048036038101906104c6919061490b565b61155f565b6040516104d89190614a11565b60405180910390f35b3480156104ec575f80fd5b5061050760048036038101906105029190614864565b611600565b60405161051491906148bc565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190614b4c565b6116a0565b005b348015610550575f80fd5b5061055961173d565b6040516105669190614bb8565b60405180910390f35b34801561057a575f80fd5b50610583611762565b60405161059091906148bc565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba919061490b565b611775565b6040516105cc9190614d1d565b60405180910390f35b3480156105e0575f80fd5b506105e96118a7565b005b3480156105f6575f80fd5b50610611600480360381019061060c919061490b565b6118e4565b60405161061e91906148bc565b60405180910390f35b348015610632575f80fd5b5061063b611936565b6040516106489190614a11565b60405180910390f35b34801561065c575f80fd5b5061066561193c565b6040516106729190614d6e565b60405180910390f35b348015610686575f80fd5b5061068f611961565b60405161069d9291906148e4565b60405180910390f35b3480156106b1575f80fd5b506106ba611972565b6040516106c79190614a11565b60405180910390f35b3480156106db575f80fd5b506106f660048036038101906106f1919061490b565b611978565b6040516107039190614a11565b60405180910390f35b348015610717575f80fd5b506107206119be565b005b34801561072d575f80fd5b5061074860048036038101906107439190614b4c565b611b05565b005b348015610755575f80fd5b50610770600480360381019061076b9190614d87565b611ba2565b005b34801561077d575f80fd5b50610786611cce565b6040516107939190614bb8565b60405180910390f35b3480156107a7575f80fd5b506107b0611cf3565b6040516107bd9190614bb8565b60405180910390f35b3480156107d1575f80fd5b506107da611d1a565b6040516107e791906147b7565b60405180910390f35b3480156107fb575f80fd5b50610804611daa565b6040516108119190614a11565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b9190614864565b611fe3565b60405161084d91906148bc565b60405180910390f35b348015610861575f80fd5b5061087c60048036038101906108779190614864565b6120ba565b60405161088991906148bc565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b391906149e6565b6120d0565b005b3480156108c5575f80fd5b506108e060048036038101906108db919061490b565b612167565b005b3480156108ed575f80fd5b506108f6612237565b005b348015610903575f80fd5b5061091e60048036038101906109199190614dc5565b6126ed565b60405161092b9190614a11565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190614d87565b61276f565b005b348015610967575f80fd5b50610982600480360381019061097d919061490b565b612813565b005b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890614e4d565b60405180910390fd5b818190508484905014610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090614eb5565b60405180910390fd5b5f5b84849050811015610b4c575f838383818110610a7a57610a79614ed3565b5b9050602002013590505f868684818110610a9757610a96614ed3565b5b9050602002016020810190610aac919061490b565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82882846040518363ffffffff1660e01b8152600401610b0a929190614f00565b5f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b5050505050508080610b4490614f54565b915050610a5b565b5050505050565b606060088054610b6290614fc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90614fc8565b8015610bd95780601f10610bb057610100808354040283529160200191610bd9565b820191905f5260205f20905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b5f610bef3384846129c9565b6001905092915050565b6012805f0154908060010154905082565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614e4d565b60405180910390fd5b8383905086869050148015610d0357508181905086869050145b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990614eb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890615042565b60405180910390fd5b5f3090505f5b87879050811015611072575f888883818110610df657610df5614ed3565b5b9050602002016020810190610e0b919061490b565b90505f878784818110610e2157610e20614ed3565b5b905060200201359050610e7a8160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610f0b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883888887818110610f9d57610f9c614ed3565b5b905060200201356040518363ffffffff1660e01b8152600401610fc1929190614f00565b5f604051808303815f87803b158015610fd8575f80fd5b505af1158015610fea573d5f803e3d5ffd5b50505050610ff88483612c32565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110559190614a11565b60405180910390a35050808061106a90614f54565b915050610dd7565b5050505050505050565b5f80600267ffffffffffffffff81111561109957611098615060565b5b6040519080825280602002602001820160405280156110c75781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611134573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115891906150a1565b815f8151811061116b5761116a614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111ba576111b9614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b8152600401611250929190615183565b5f60405180830381865afa15801561126a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061129291906152d0565b5f815181106112a4576112a3614ed3565b5b6020026020010151915050919050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b54905090565b5f6112ee848484612e25565b6113ba84336113b5856040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e5d9092919063ffffffff16565b6129c9565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614e4d565b60405180910390fd5b633b9aca00816114629190615317565b600e8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614e4d565b60405180910390fd5b5f479050611504611cf3565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611546573d5f803e3d5ffd5b5050565b5f600a5f9054906101000a900460ff16905090565b5f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016115ba9190614bb8565b602060405180830381865afa1580156115d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f99190615358565b9050919050565b5f61169633846116918560045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b6129c9565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e4d565b60405180910390fd5b611738838383613ebf565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b606060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561189c578382905f5260205f2090600202016040518060400160405290815f8201805461180390614fc8565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90614fc8565b801561187a5780601f106118515761010080835404028352916020019161187a565b820191905f5260205f20905b81548152906001019060200180831161185d57829003601f168201915b50505050508152602001600182015481525050815260200190600101906117d3565b505050509050919050565b5f6118b130611978565b90505f8111156118e157600c5f9054906101000a900460ff166118e0576118d781613f65565b6118df61419b565b5b5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015805f0154908060010154905082565b600e5481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990614e4d565b60405180910390fd5b611b9d8383836142a0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614e4d565b60405180910390fd5b6014821115611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906153cd565b60405180910390fd5b6014811115611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90615435565b60405180910390fd5b8160125f0181905550806012600101819055505050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611d2990614fc8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5590614fc8565b8015611da05780601f10611d7757610100808354040283529160200191611da0565b820191905f5260205f20905b815481529060010190602001808311611d8357829003601f168201915b5050505050905090565b5f80600267ffffffffffffffff811115611dc757611dc6615060565b5b604051908082528060200260200182016040528015611df55781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8691906150a1565b815f81518110611e9957611e98614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ee857611ee7614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611f80929190615183565b5f60405180830381865afa158015611f9a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc291906152d0565b600181518110611fd557611fd4614ed3565b5b602002602001015191505090565b5f6120b033846120ab856040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e5d9092919063ffffffff16565b6129c9565b6001905092915050565b5f6120c6338484612e25565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614e4d565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90614e4d565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a9061549d565b60405180910390fd5b6123813060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f91906150a1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b991906150a1565b6040518363ffffffff1660e01b81526004016124d69291906154bb565b6020604051808303815f875af11580156124f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251691906150a1565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061259d30611978565b5f806125a7611cf3565b426040518863ffffffff1660e01b81526004016125c99695949392919061551b565b60606040518083038185885af11580156125e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061260a919061557a565b50505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126aa929190614f00565b6020604051808303815f875af11580156126c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ea91906155de565b50565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614e4d565b60405180910390fd5b8160155f0181905550806015600101819055505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590615679565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e906156e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c90615749565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b7f9190614a11565b60405180910390a3505050565b5f612bcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613e5d565b905092915050565b5f808284612be39190615767565b905083811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f906157e4565b60405180910390fd5b8091505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1836040518263ffffffff1660e01b8152600401612c8c9190614bb8565b5f604051808303815f87803b158015612ca3575f80fd5b505af1925050508015612cb4575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1826040518263ffffffff1660e01b8152600401612d0f9190614bb8565b5f604051808303815f87803b158015612d26575f80fd5b505af1925050508015612d37575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b81526004016060604051808303815f875af1925050508015612dc257506040513d601f19601f82011682018060405250810190612dbf919061557a565b60015b15612e21573273ffffffffffffffffffffffffffffffffffffffff16600115157fd401621dbefa4e4b58dfded2f6ce557f2bf581dde5dca5670c9993d2fb1bee0d858585604051612e1593929190615802565b60405180910390a35050505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a90615881565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906158e9565b60405180910390fd5b5f8111612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90615951565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612fe2575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130215750612ff1611cf3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130605750613030611cf3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90505f61307e8361307086611978565b612bd590919063ffffffff16565b90505f613089611cf3565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130f757506130c7611cf3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613150575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561318857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156131c057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613c265760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036134eb57821561326557600e54821115613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b906159b9565b60405180910390fd5b5b82613270575f61329b565b61329a606461328c60125f01548761434690919063ffffffff16565b6143bd90919063ffffffff16565b5b90505f6132a78561107c565b90505f6133558260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b81526004016133089190614bb8565b602060405180830381865afa158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190615358565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b81526004016133b3929190614f00565b5f604051808303815f87803b1580156133ca575f80fd5b505af11580156133dc573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816134a09190615b6b565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038783836040516134e093929190615c84565b60405180910390a150505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015613594575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561383557826135a4575f6135d0565b6135cf60646135c16012600101548761434690919063ffffffff16565b6143bd90919063ffffffff16565b5b90505f6135dc8561107c565b90505f8160115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161363a9190614bb8565b602060405180830381865afa158015613655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136799190615358565b6136839190615cd5565b90505f808213156136945781613696565b5f5b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016136f4929190614f00565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b5050505060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600481526020017f53454c4c00000000000000000000000000000000000000000000000000000000815250815260200185815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816137e19190615b6b565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c0389848360405161382193929190615d5f565b60405180910390a1613831614406565b5050505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156138df575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613c1b575f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc886040518263ffffffff1660e01b815260040161393f9190614bb8565b602060405180830381865afa15801561395a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397e9190615358565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d828885f6040518363ffffffff1660e01b81526004016139dc929190615da7565b5f604051808303815f87803b1580156139f3575f80fd5b505af1158015613a05573d5f803e3d5ffd5b50505050613a1287614475565b15613b8f575f613ac38260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401613a769190614bb8565b602060405180830381865afa158015613a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ab59190615358565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401613b21929190614f00565b5f604051808303815f87803b158015613b38575f80fd5b505af1158015613b4a573d5f803e3d5ffd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051613b8193929190615c84565b60405180910390a150613c19565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82887836040518363ffffffff1660e01b8152600401613beb929190614f00565b5f604051808303815f87803b158015613c02575f80fd5b505af1158015613c14573d5f803e3d5ffd5b505050505b505b613c258686612c32565b5b5f613c3a8286612b8c90919063ffffffff16565b9050613c8c8560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d1d8160035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613dae8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e4c9190614a11565b60405180910390a350505050505050565b5f838311158290613ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9b91906147b7565b60405180910390fd5b505f8385613eb29190615dce565b9050809150509392505050565b5f5b83839050811015613f5f575f848483818110613ee057613edf614ed3565b5b9050602002016020810190613ef5919061490b565b90508260055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550508080613f5790614f54565b915050613ec1565b50505050565b5f600267ffffffffffffffff811115613f8157613f80615060565b5b604051908082528060200260200182016040528015613faf5781602001602082028036833780820191505090505b50905030815f81518110613fc657613fc5614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561406a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061408e91906150a1565b816001815181106140a2576140a1614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141083060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161416a959493929190615e01565b5f604051808303815f87803b158015614181575f80fd5b505af1158015614193573d5f803e3d5ffd5b505050505050565b6001600c5f6101000a81548160ff0219169083151502179055505f4790505f6141e460646141d660155f01548561434690919063ffffffff16565b6143bd90919063ffffffff16565b90505f61421260646142046015600101548661434690919063ffffffff16565b6143bd90919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015614278573d5f803e3d5ffd5b50614282816144bc565b5050505f600c5f6101000a81548160ff021916908315150217905550565b5f5b83839050811015614340575f8484838181106142c1576142c0614ed3565b5b90506020020160208101906142d6919061490b565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061433890614f54565b9150506142a2565b50505050565b5f808303614356575f90506143b7565b5f82846143639190615317565b90508284826143729190615e86565b146143b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143a990615f26565b60405180910390fd5b809150505b92915050565b5f6143fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614587565b905092915050565b5f61441030611978565b90505f811115614472575f614423611daa565b90508082101580156144415750600c5f9054906101000a900460ff16155b80156144595750600c60019054906101000a900460ff165b156144705761446781613f65565b61446f61419b565b5b505b50565b5f805f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f1b9050833f91508082141580156144b357505f801b8214155b92505050919050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161450290615f71565b5f6040518083038185875af1925050503d805f811461453c576040519150601f19603f3d011682016040523d82523d5f602084013e614541565b606091505b505090508015614583577f8d506e73abc3fae6fd0fd6faac7b7ff03e47622fa1e4fa03fc1e8f9801769afa8260405161457a9190614a11565b60405180910390a15b5050565b5f80831182906145cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145c491906147b7565b60405180910390fd5b505f83856145db9190615e86565b9050809150509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261461a576146196145f9565b5b8235905067ffffffffffffffff811115614637576146366145fd565b5b60208301915083602082028301111561465357614652614601565b5b9250929050565b5f8083601f84011261466f5761466e6145f9565b5b8235905067ffffffffffffffff81111561468c5761468b6145fd565b5b6020830191508360208202830111156146a8576146a7614601565b5b9250929050565b5f805f80604085870312156146c7576146c66145f1565b5b5f85013567ffffffffffffffff8111156146e4576146e36145f5565b5b6146f087828801614605565b9450945050602085013567ffffffffffffffff811115614713576147126145f5565b5b61471f8782880161465a565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614764578082015181840152602081019050614749565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6147898261472d565b6147938185614737565b93506147a3818560208601614747565b6147ac8161476f565b840191505092915050565b5f6020820190508181035f8301526147cf818461477f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614800826147d7565b9050919050565b614810816147f6565b811461481a575f80fd5b50565b5f8135905061482b81614807565b92915050565b5f819050919050565b61484381614831565b811461484d575f80fd5b50565b5f8135905061485e8161483a565b92915050565b5f806040838503121561487a576148796145f1565b5b5f6148878582860161481d565b925050602061489885828601614850565b9150509250929050565b5f8115159050919050565b6148b6816148a2565b82525050565b5f6020820190506148cf5f8301846148ad565b92915050565b6148de81614831565b82525050565b5f6040820190506148f75f8301856148d5565b61490460208301846148d5565b9392505050565b5f602082840312156149205761491f6145f1565b5b5f61492d8482850161481d565b91505092915050565b5f805f805f80606087890312156149505761494f6145f1565b5b5f87013567ffffffffffffffff81111561496d5761496c6145f5565b5b61497989828a01614605565b9650965050602087013567ffffffffffffffff81111561499c5761499b6145f5565b5b6149a889828a0161465a565b9450945050604087013567ffffffffffffffff8111156149cb576149ca6145f5565b5b6149d789828a0161465a565b92509250509295509295509295565b5f602082840312156149fb576149fa6145f1565b5b5f614a0884828501614850565b91505092915050565b5f602082019050614a245f8301846148d5565b92915050565b5f819050919050565b5f614a4d614a48614a43846147d7565b614a2a565b6147d7565b9050919050565b5f614a5e82614a33565b9050919050565b5f614a6f82614a54565b9050919050565b614a7f81614a65565b82525050565b5f602082019050614a985f830184614a76565b92915050565b5f805f60608486031215614ab557614ab46145f1565b5b5f614ac28682870161481d565b9350506020614ad38682870161481d565b9250506040614ae486828701614850565b9150509250925092565b5f60ff82169050919050565b614b0381614aee565b82525050565b5f602082019050614b1c5f830184614afa565b92915050565b614b2b816148a2565b8114614b35575f80fd5b50565b5f81359050614b4681614b22565b92915050565b5f805f60408486031215614b6357614b626145f1565b5b5f84013567ffffffffffffffff811115614b8057614b7f6145f5565b5b614b8c86828701614605565b93509350506020614b9f86828701614b38565b9150509250925092565b614bb2816147f6565b82525050565b5f602082019050614bcb5f830184614ba9565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f614c148261472d565b614c1e8185614bfa565b9350614c2e818560208601614747565b614c378161476f565b840191505092915050565b614c4b81614831565b82525050565b5f604083015f8301518482035f860152614c6b8282614c0a565b9150506020830151614c806020860182614c42565b508091505092915050565b5f614c968383614c51565b905092915050565b5f602082019050919050565b5f614cb482614bd1565b614cbe8185614bdb565b935083602082028501614cd085614beb565b805f5b85811015614d0b5784840389528151614cec8582614c8b565b9450614cf783614c9e565b925060208a01995050600181019050614cd3565b50829750879550505050505092915050565b5f6020820190508181035f830152614d358184614caa565b905092915050565b5f614d4782614a33565b9050919050565b5f614d5882614d3d565b9050919050565b614d6881614d4e565b82525050565b5f602082019050614d815f830184614d5f565b92915050565b5f8060408385031215614d9d57614d9c6145f1565b5b5f614daa85828601614850565b9250506020614dbb85828601614850565b9150509250929050565b5f8060408385031215614ddb57614dda6145f1565b5b5f614de88582860161481d565b9250506020614df98582860161481d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614e37602083614737565b9150614e4282614e03565b602082019050919050565b5f6020820190508181035f830152614e6481614e2b565b9050919050565b7f686f6c6465727320616e6420616d6f756e747320646f6e2774206d61746368005f82015250565b5f614e9f601f83614737565b9150614eaa82614e6b565b602082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050614f135f830185614ba9565b614f2060208301846148d5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f5e82614831565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f9057614f8f614f27565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614fdf57607f821691505b602082108103614ff257614ff1614f9b565b5b50919050565b7f31330000000000000000000000000000000000000000000000000000000000005f82015250565b5f61502c600283614737565b915061503782614ff8565b602082019050919050565b5f6020820190508181035f83015261505981615020565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061509b81614807565b92915050565b5f602082840312156150b6576150b56145f1565b5b5f6150c38482850161508d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150fe816147f6565b82525050565b5f61510f83836150f5565b60208301905092915050565b5f602082019050919050565b5f615131826150cc565b61513b81856150d6565b9350615146836150e6565b805f5b8381101561517657815161515d8882615104565b97506151688361511b565b925050600181019050615149565b5085935050505092915050565b5f6040820190506151965f8301856148d5565b81810360208301526151a88184615127565b90509392505050565b6151ba8261476f565b810181811067ffffffffffffffff821117156151d9576151d8615060565b5b80604052505050565b5f6151eb6145e8565b90506151f782826151b1565b919050565b5f67ffffffffffffffff82111561521657615215615060565b5b602082029050602081019050919050565b5f815190506152358161483a565b92915050565b5f61524d615248846151fc565b6151e2565b905080838252602082019050602084028301858111156152705761526f614601565b5b835b8181101561529957806152858882615227565b845260208401935050602081019050615272565b5050509392505050565b5f82601f8301126152b7576152b66145f9565b5b81516152c784826020860161523b565b91505092915050565b5f602082840312156152e5576152e46145f1565b5b5f82015167ffffffffffffffff811115615302576153016145f5565b5b61530e848285016152a3565b91505092915050565b5f61532182614831565b915061532c83614831565b925082820261533a81614831565b9150828204841483151761535157615350614f27565b5b5092915050565b5f6020828403121561536d5761536c6145f1565b5b5f61537a84828501615227565b91505092915050565b7f33000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6153b7600183614737565b91506153c282615383565b602082019050919050565b5f6020820190508181035f8301526153e4816153ab565b9050919050565b7f34000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61541f600183614737565b915061542a826153eb565b602082019050919050565b5f6020820190508181035f83015261544c81615413565b9050919050565b7f31340000000000000000000000000000000000000000000000000000000000005f82015250565b5f615487600283614737565b915061549282615453565b602082019050919050565b5f6020820190508181035f8301526154b48161547b565b9050919050565b5f6040820190506154ce5f830185614ba9565b6154db6020830184614ba9565b9392505050565b5f819050919050565b5f6155056155006154fb846154e2565b614a2a565b614831565b9050919050565b615515816154eb565b82525050565b5f60c08201905061552e5f830189614ba9565b61553b60208301886148d5565b615548604083018761550c565b615555606083018661550c565b6155626080830185614ba9565b61556f60a08301846148d5565b979650505050505050565b5f805f60608486031215615591576155906145f1565b5b5f61559e86828701615227565b93505060206155af86828701615227565b92505060406155c086828701615227565b9150509250925092565b5f815190506155d881614b22565b92915050565b5f602082840312156155f3576155f26145f1565b5b5f615600848285016155ca565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f615663602683614737565b915061566e82615609565b604082019050919050565b5f6020820190508181035f83015261569081615657565b9050919050565b7f35000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6156cb600183614737565b91506156d682615697565b602082019050919050565b5f6020820190508181035f8301526156f8816156bf565b9050919050565b7f36000000000000000000000000000000000000000000000000000000000000005f82015250565b5f615733600183614737565b915061573e826156ff565b602082019050919050565b5f6020820190508181035f83015261576081615727565b9050919050565b5f61577182614831565b915061577c83614831565b925082820190508082111561579457615793614f27565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6157ce601b83614737565b91506157d98261579a565b602082019050919050565b5f6020820190508181035f8301526157fb816157c2565b9050919050565b5f6060820190506158155f8301866148d5565b61582260208301856148d5565b61582f60408301846148d5565b949350505050565b7f37000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61586b600183614737565b915061587682615837565b602082019050919050565b5f6020820190508181035f8301526158988161585f565b9050919050565b7f38000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6158d3600183614737565b91506158de8261589f565b602082019050919050565b5f6020820190508181035f830152615900816158c7565b9050919050565b7f39000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61593b600183614737565b915061594682615907565b602082019050919050565b5f6020820190508181035f8301526159688161592f565b9050919050565b7f31300000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159a3600283614737565b91506159ae8261596f565b602082019050919050565b5f6020820190508181035f8301526159d081615997565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615a337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826159f8565b615a3d86836159f8565b95508019841693508086168417925050509392505050565b5f615a6f615a6a615a6584614831565b614a2a565b614831565b9050919050565b5f819050919050565b615a8883615a55565b615a9c615a9482615a76565b848454615a04565b825550505050565b5f90565b615ab0615aa4565b615abb818484615a7f565b505050565b5b81811015615ade57615ad35f82615aa8565b600181019050615ac1565b5050565b601f821115615b2357615af4816159d7565b615afd846159e9565b81016020851015615b0c578190505b615b20615b18856159e9565b830182615ac0565b50505b505050565b5f82821c905092915050565b5f615b435f1984600802615b28565b1980831691505092915050565b5f615b5b8383615b34565b9150826002028217905092915050565b615b748261472d565b67ffffffffffffffff811115615b8d57615b8c615060565b5b615b978254614fc8565b615ba2828285615ae2565b5f60209050601f831160018114615bd3575f8415615bc1578287015190505b615bcb8582615b50565b865550615c32565b601f198416615be1866159d7565b5f5b82811015615c0857848901518255600182019150602085019450602081019050615be3565b86831015615c255784890151615c21601f891682615b34565b8355505b6001600288020188555050505b505050505050565b7f42555900000000000000000000000000000000000000000000000000000000005f82015250565b5f615c6e600383614737565b9150615c7982615c3a565b602082019050919050565b5f608082019050615c975f830186614ba9565b8181036020830152615ca881615c62565b9050615cb760408301856148d5565b615cc460608301846148d5565b949350505050565b5f819050919050565b5f615cdf82615ccc565b9150615cea83615ccc565b925082820390508181125f8412168282135f851215161715615d0f57615d0e614f27565b5b92915050565b7f53454c4c000000000000000000000000000000000000000000000000000000005f82015250565b5f615d49600483614737565b9150615d5482615d15565b602082019050919050565b5f608082019050615d725f830186614ba9565b8181036020830152615d8381615d3d565b9050615d9260408301856148d5565b615d9f60608301846148d5565b949350505050565b5f604082019050615dba5f830185614ba9565b615dc7602083018461550c565b9392505050565b5f615dd882614831565b9150615de383614831565b9250828203905081811115615dfb57615dfa614f27565b5b92915050565b5f60a082019050615e145f8301886148d5565b615e21602083018761550c565b8181036040830152615e338186615127565b9050615e426060830185614ba9565b615e4f60808301846148d5565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615e9082614831565b9150615e9b83614831565b925082615eab57615eaa615e59565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615f10602183614737565b9150615f1b82615eb6565b604082019050919050565b5f6020820190508181035f830152615f3d81615f04565b9050919050565b5f81905092915050565b50565b5f615f5c5f83615f44565b9150615f6782615f4e565b5f82019050919050565b5f615f7b82615f51565b915081905091905056fea26469706673582212207bb4b3bee3f52c35ebbf3a0981b1f017594f6f5a1340a1df8f2e41165bced57264736f6c63430008140033608060405234801561000f575f80fd5b50610a798061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061007b575f3560e01c8063663037ac11610059578063663037ac146100e7578063949d225d14610117578063c2bc2efc14610135578063cd413329146101655761007b565b806329092d0e1461007f5780633825d8281461009b578063564c8d11146100b7575b5f80fd5b6100996004803603810190610094919061080e565b610195565b005b6100b560048036038101906100b0919061086c565b61043c565b005b6100d160048036038101906100cc919061080e565b610621565b6040516100de91906108c2565b60405180910390f35b61010160048036038101906100fc91906108db565b6106e2565b60405161010e9190610915565b60405180910390f35b61011f610727565b60405161012c919061093d565b60405180910390f35b61014f600480360381019061014a919061080e565b610734565b60405161015c919061093d565b60405180910390f35b61017f600480360381019061017a919061080e565b61077c565b60405161018c9190610970565b60405180910390f35b5f6003015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610439575f6003015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555f6001015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f90555f806002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60015f8001805490506102cd91906109b6565b90505f805f0182815481106102e5576102e46109e9565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050825f6002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6002015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055805f800184815481106103ab576103aa6109e9565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f800180548061040357610402610a16565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b5f6003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156104d657805f6001015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061061d565b60015f6003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550805f6001015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f8001805490505f6002015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f800182908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b5f806003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661069a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506106dd565b5f6002015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505b919050565b5f805f0182815481106106f8576106f76109e9565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f805f0180549050905090565b5f806001015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107a783610621565b14159050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107dd826107b4565b9050919050565b6107ed816107d3565b81146107f7575f80fd5b50565b5f81359050610808816107e4565b92915050565b5f60208284031215610823576108226107b0565b5b5f610830848285016107fa565b91505092915050565b5f819050919050565b61084b81610839565b8114610855575f80fd5b50565b5f8135905061086681610842565b92915050565b5f8060408385031215610882576108816107b0565b5b5f61088f858286016107fa565b92505060206108a085828601610858565b9150509250929050565b5f819050919050565b6108bc816108aa565b82525050565b5f6020820190506108d55f8301846108b3565b92915050565b5f602082840312156108f0576108ef6107b0565b5b5f6108fd84828501610858565b91505092915050565b61090f816107d3565b82525050565b5f6020820190506109285f830184610906565b92915050565b61093781610839565b82525050565b5f6020820190506109505f83018461092e565b92915050565b5f8115159050919050565b61096a81610956565b82525050565b5f6020820190506109835f830184610961565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6109c082610839565b91506109cb83610839565b92508282039050818111156109e3576109e2610989565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220b015f0b0d052b2a266a48a0eb239838dcd605253b696c5b60686a63457e7283364736f6c63430008140033
Deployed Bytecode
0x608060405260043610610249575f3560e01c80635342acb4116101385780638da5cb5b116100b5578063b2abbbc411610079578063b2abbbc414610892578063ba385abb146108ba578063c9567bf9146108e2578063dd62ed3e146108f8578063f18dba2614610934578063f2fde38b1461095c57610250565b80638da5cb5b1461079c57806395d89b41146107c657806397995706146107f0578063a457c2d71461081a578063a9059cbb1461085657610250565b806370a08231116100fc57806370a08231146106d0578063715018a61461070c57806371cd56af1461072257806381230a831461074a57806385141a771461077257610250565b80635342acb4146105eb57806354a5df1f1461062757806359a05f89146106515780635ee58efc1461067b5780636c0a24eb146106a657610250565b806327a14fc2116101c6578063441d801f1161018a578063441d801f1461051d57806349bd5a5e146105455780634a74bb021461056f5780634fda2e121461059957806351bc3c85146105d557610250565b806327a14fc21461043d578063280d382114610465578063313ce5671461047b578063345487d0146104a557806339509351146104e157610250565b806311f0b5161161020d57806311f0b5161461034957806314f944bd146103715780631694505e146103ad57806318160ddd146103d757806323b872dd1461040157610250565b806304dccacb1461025457806306fdde031461027c578063095ea7b3146102a65780630ddc0976146102e25780630e8322731461030d57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061027a600480360381019061027591906146af565b610984565b005b348015610287575f80fd5b50610290610b53565b60405161029d91906147b7565b60405180910390f35b3480156102b1575f80fd5b506102cc60048036038101906102c79190614864565b610be3565b6040516102d991906148bc565b60405180910390f35b3480156102ed575f80fd5b506102f6610bf9565b6040516103049291906148e4565b60405180910390f35b348015610318575f80fd5b50610333600480360381019061032e919061490b565b610c0a565b60405161034091906148bc565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190614936565b610c5c565b005b34801561037c575f80fd5b50610397600480360381019061039291906149e6565b61107c565b6040516103a49190614a11565b60405180910390f35b3480156103b8575f80fd5b506103c16112b4565b6040516103ce9190614a85565b60405180910390f35b3480156103e2575f80fd5b506103eb6112d9565b6040516103f89190614a11565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614a9e565b6112e2565b60405161043491906148bc565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e91906149e6565b6113c5565b005b348015610470575f80fd5b5061047961146b565b005b348015610486575f80fd5b5061048f61154a565b60405161049c9190614b09565b60405180910390f35b3480156104b0575f80fd5b506104cb60048036038101906104c6919061490b565b61155f565b6040516104d89190614a11565b60405180910390f35b3480156104ec575f80fd5b5061050760048036038101906105029190614864565b611600565b60405161051491906148bc565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190614b4c565b6116a0565b005b348015610550575f80fd5b5061055961173d565b6040516105669190614bb8565b60405180910390f35b34801561057a575f80fd5b50610583611762565b60405161059091906148bc565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba919061490b565b611775565b6040516105cc9190614d1d565b60405180910390f35b3480156105e0575f80fd5b506105e96118a7565b005b3480156105f6575f80fd5b50610611600480360381019061060c919061490b565b6118e4565b60405161061e91906148bc565b60405180910390f35b348015610632575f80fd5b5061063b611936565b6040516106489190614a11565b60405180910390f35b34801561065c575f80fd5b5061066561193c565b6040516106729190614d6e565b60405180910390f35b348015610686575f80fd5b5061068f611961565b60405161069d9291906148e4565b60405180910390f35b3480156106b1575f80fd5b506106ba611972565b6040516106c79190614a11565b60405180910390f35b3480156106db575f80fd5b506106f660048036038101906106f1919061490b565b611978565b6040516107039190614a11565b60405180910390f35b348015610717575f80fd5b506107206119be565b005b34801561072d575f80fd5b5061074860048036038101906107439190614b4c565b611b05565b005b348015610755575f80fd5b50610770600480360381019061076b9190614d87565b611ba2565b005b34801561077d575f80fd5b50610786611cce565b6040516107939190614bb8565b60405180910390f35b3480156107a7575f80fd5b506107b0611cf3565b6040516107bd9190614bb8565b60405180910390f35b3480156107d1575f80fd5b506107da611d1a565b6040516107e791906147b7565b60405180910390f35b3480156107fb575f80fd5b50610804611daa565b6040516108119190614a11565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b9190614864565b611fe3565b60405161084d91906148bc565b60405180910390f35b348015610861575f80fd5b5061087c60048036038101906108779190614864565b6120ba565b60405161088991906148bc565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b391906149e6565b6120d0565b005b3480156108c5575f80fd5b506108e060048036038101906108db919061490b565b612167565b005b3480156108ed575f80fd5b506108f6612237565b005b348015610903575f80fd5b5061091e60048036038101906109199190614dc5565b6126ed565b60405161092b9190614a11565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190614d87565b61276f565b005b348015610967575f80fd5b50610982600480360381019061097d919061490b565b612813565b005b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890614e4d565b60405180910390fd5b818190508484905014610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090614eb5565b60405180910390fd5b5f5b84849050811015610b4c575f838383818110610a7a57610a79614ed3565b5b9050602002013590505f868684818110610a9757610a96614ed3565b5b9050602002016020810190610aac919061490b565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82882846040518363ffffffff1660e01b8152600401610b0a929190614f00565b5f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b5050505050508080610b4490614f54565b915050610a5b565b5050505050565b606060088054610b6290614fc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90614fc8565b8015610bd95780601f10610bb057610100808354040283529160200191610bd9565b820191905f5260205f20905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b5f610bef3384846129c9565b6001905092915050565b6012805f0154908060010154905082565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614e4d565b60405180910390fd5b8383905086869050148015610d0357508181905086869050145b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990614eb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890615042565b60405180910390fd5b5f3090505f5b87879050811015611072575f888883818110610df657610df5614ed3565b5b9050602002016020810190610e0b919061490b565b90505f878784818110610e2157610e20614ed3565b5b905060200201359050610e7a8160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610f0b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883888887818110610f9d57610f9c614ed3565b5b905060200201356040518363ffffffff1660e01b8152600401610fc1929190614f00565b5f604051808303815f87803b158015610fd8575f80fd5b505af1158015610fea573d5f803e3d5ffd5b50505050610ff88483612c32565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110559190614a11565b60405180910390a35050808061106a90614f54565b915050610dd7565b5050505050505050565b5f80600267ffffffffffffffff81111561109957611098615060565b5b6040519080825280602002602001820160405280156110c75781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611134573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115891906150a1565b815f8151811061116b5761116a614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111ba576111b9614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b8152600401611250929190615183565b5f60405180830381865afa15801561126a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061129291906152d0565b5f815181106112a4576112a3614ed3565b5b6020026020010151915050919050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b54905090565b5f6112ee848484612e25565b6113ba84336113b5856040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e5d9092919063ffffffff16565b6129c9565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614e4d565b60405180910390fd5b633b9aca00816114629190615317565b600e8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614e4d565b60405180910390fd5b5f479050611504611cf3565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611546573d5f803e3d5ffd5b5050565b5f600a5f9054906101000a900460ff16905090565b5f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016115ba9190614bb8565b602060405180830381865afa1580156115d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f99190615358565b9050919050565b5f61169633846116918560045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b6129c9565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e4d565b60405180910390fd5b611738838383613ebf565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b606060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561189c578382905f5260205f2090600202016040518060400160405290815f8201805461180390614fc8565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90614fc8565b801561187a5780601f106118515761010080835404028352916020019161187a565b820191905f5260205f20905b81548152906001019060200180831161185d57829003601f168201915b50505050508152602001600182015481525050815260200190600101906117d3565b505050509050919050565b5f6118b130611978565b90505f8111156118e157600c5f9054906101000a900460ff166118e0576118d781613f65565b6118df61419b565b5b5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015805f0154908060010154905082565b600e5481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990614e4d565b60405180910390fd5b611b9d8383836142a0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614e4d565b60405180910390fd5b6014821115611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906153cd565b60405180910390fd5b6014811115611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90615435565b60405180910390fd5b8160125f0181905550806012600101819055505050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611d2990614fc8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5590614fc8565b8015611da05780601f10611d7757610100808354040283529160200191611da0565b820191905f5260205f20905b815481529060010190602001808311611d8357829003601f168201915b5050505050905090565b5f80600267ffffffffffffffff811115611dc757611dc6615060565b5b604051908082528060200260200182016040528015611df55781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8691906150a1565b815f81518110611e9957611e98614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ee857611ee7614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611f80929190615183565b5f60405180830381865afa158015611f9a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc291906152d0565b600181518110611fd557611fd4614ed3565b5b602002602001015191505090565b5f6120b033846120ab856040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e5d9092919063ffffffff16565b6129c9565b6001905092915050565b5f6120c6338484612e25565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614e4d565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90614e4d565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a9061549d565b60405180910390fd5b6123813060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f91906150a1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b991906150a1565b6040518363ffffffff1660e01b81526004016124d69291906154bb565b6020604051808303815f875af11580156124f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251691906150a1565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061259d30611978565b5f806125a7611cf3565b426040518863ffffffff1660e01b81526004016125c99695949392919061551b565b60606040518083038185885af11580156125e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061260a919061557a565b50505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126aa929190614f00565b6020604051808303815f875af11580156126c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ea91906155de565b50565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614e4d565b60405180910390fd5b8160155f0181905550806015600101819055505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614e4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590615679565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e906156e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c90615749565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b7f9190614a11565b60405180910390a3505050565b5f612bcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613e5d565b905092915050565b5f808284612be39190615767565b905083811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f906157e4565b60405180910390fd5b8091505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1836040518263ffffffff1660e01b8152600401612c8c9190614bb8565b5f604051808303815f87803b158015612ca3575f80fd5b505af1925050508015612cb4575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1826040518263ffffffff1660e01b8152600401612d0f9190614bb8565b5f604051808303815f87803b158015612d26575f80fd5b505af1925050508015612d37575060015b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b81526004016060604051808303815f875af1925050508015612dc257506040513d601f19601f82011682018060405250810190612dbf919061557a565b60015b15612e21573273ffffffffffffffffffffffffffffffffffffffff16600115157fd401621dbefa4e4b58dfded2f6ce557f2bf581dde5dca5670c9993d2fb1bee0d858585604051612e1593929190615802565b60405180910390a35050505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a90615881565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906158e9565b60405180910390fd5b5f8111612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90615951565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612fe2575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130215750612ff1611cf3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130605750613030611cf3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90505f61307e8361307086611978565b612bd590919063ffffffff16565b90505f613089611cf3565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130f757506130c7611cf3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613150575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561318857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156131c057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613c265760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036134eb57821561326557600e54821115613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b906159b9565b60405180910390fd5b5b82613270575f61329b565b61329a606461328c60125f01548761434690919063ffffffff16565b6143bd90919063ffffffff16565b5b90505f6132a78561107c565b90505f6133558260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b81526004016133089190614bb8565b602060405180830381865afa158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190615358565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b81526004016133b3929190614f00565b5f604051808303815f87803b1580156133ca575f80fd5b505af11580156133dc573d5f803e3d5ffd5b5050505060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600381526020017f4255590000000000000000000000000000000000000000000000000000000000815250815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816134a09190615b6b565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038783836040516134e093929190615c84565b60405180910390a150505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015613594575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561383557826135a4575f6135d0565b6135cf60646135c16012600101548761434690919063ffffffff16565b6143bd90919063ffffffff16565b5b90505f6135dc8561107c565b90505f8160115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161363a9190614bb8565b602060405180830381865afa158015613655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136799190615358565b6136839190615cd5565b90505f808213156136945781613696565b5f5b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016136f4929190614f00565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b5050505060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180604001604052806040518060400160405280600481526020017f53454c4c00000000000000000000000000000000000000000000000000000000815250815260200185815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816137e19190615b6b565b506020820151816001015550507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c0389848360405161382193929190615d5f565b60405180910390a1613831614406565b5050505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156138df575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613c1b575f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc886040518263ffffffff1660e01b815260040161393f9190614bb8565b602060405180830381865afa15801561395a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397e9190615358565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d828885f6040518363ffffffff1660e01b81526004016139dc929190615da7565b5f604051808303815f87803b1580156139f3575f80fd5b505af1158015613a05573d5f803e3d5ffd5b50505050613a1287614475565b15613b8f575f613ac38260115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401613a769190614bb8565b602060405180830381865afa158015613a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ab59190615358565b612bd590919063ffffffff16565b905060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401613b21929190614f00565b5f604051808303815f87803b158015613b38575f80fd5b505af1158015613b4a573d5f803e3d5ffd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051613b8193929190615c84565b60405180910390a150613c19565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82887836040518363ffffffff1660e01b8152600401613beb929190614f00565b5f604051808303815f87803b158015613c02575f80fd5b505af1158015613c14573d5f803e3d5ffd5b505050505b505b613c258686612c32565b5b5f613c3a8286612b8c90919063ffffffff16565b9050613c8c8560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b8c90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d1d8160035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613dae8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bd590919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e4c9190614a11565b60405180910390a350505050505050565b5f838311158290613ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9b91906147b7565b60405180910390fd5b505f8385613eb29190615dce565b9050809150509392505050565b5f5b83839050811015613f5f575f848483818110613ee057613edf614ed3565b5b9050602002016020810190613ef5919061490b565b90508260055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550508080613f5790614f54565b915050613ec1565b50505050565b5f600267ffffffffffffffff811115613f8157613f80615060565b5b604051908082528060200260200182016040528015613faf5781602001602082028036833780820191505090505b50905030815f81518110613fc657613fc5614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561406a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061408e91906150a1565b816001815181106140a2576140a1614ed3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141083060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161416a959493929190615e01565b5f604051808303815f87803b158015614181575f80fd5b505af1158015614193573d5f803e3d5ffd5b505050505050565b6001600c5f6101000a81548160ff0219169083151502179055505f4790505f6141e460646141d660155f01548561434690919063ffffffff16565b6143bd90919063ffffffff16565b90505f61421260646142046015600101548661434690919063ffffffff16565b6143bd90919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015614278573d5f803e3d5ffd5b50614282816144bc565b5050505f600c5f6101000a81548160ff021916908315150217905550565b5f5b83839050811015614340575f8484838181106142c1576142c0614ed3565b5b90506020020160208101906142d6919061490b565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061433890614f54565b9150506142a2565b50505050565b5f808303614356575f90506143b7565b5f82846143639190615317565b90508284826143729190615e86565b146143b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143a990615f26565b60405180910390fd5b809150505b92915050565b5f6143fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614587565b905092915050565b5f61441030611978565b90505f811115614472575f614423611daa565b90508082101580156144415750600c5f9054906101000a900460ff16155b80156144595750600c60019054906101000a900460ff165b156144705761446781613f65565b61446f61419b565b5b505b50565b5f805f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f1b9050833f91508082141580156144b357505f801b8214155b92505050919050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161450290615f71565b5f6040518083038185875af1925050503d805f811461453c576040519150601f19603f3d011682016040523d82523d5f602084013e614541565b606091505b505090508015614583577f8d506e73abc3fae6fd0fd6faac7b7ff03e47622fa1e4fa03fc1e8f9801769afa8260405161457a9190614a11565b60405180910390a15b5050565b5f80831182906145cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145c491906147b7565b60405180910390fd5b505f83856145db9190615e86565b9050809150509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261461a576146196145f9565b5b8235905067ffffffffffffffff811115614637576146366145fd565b5b60208301915083602082028301111561465357614652614601565b5b9250929050565b5f8083601f84011261466f5761466e6145f9565b5b8235905067ffffffffffffffff81111561468c5761468b6145fd565b5b6020830191508360208202830111156146a8576146a7614601565b5b9250929050565b5f805f80604085870312156146c7576146c66145f1565b5b5f85013567ffffffffffffffff8111156146e4576146e36145f5565b5b6146f087828801614605565b9450945050602085013567ffffffffffffffff811115614713576147126145f5565b5b61471f8782880161465a565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614764578082015181840152602081019050614749565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6147898261472d565b6147938185614737565b93506147a3818560208601614747565b6147ac8161476f565b840191505092915050565b5f6020820190508181035f8301526147cf818461477f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614800826147d7565b9050919050565b614810816147f6565b811461481a575f80fd5b50565b5f8135905061482b81614807565b92915050565b5f819050919050565b61484381614831565b811461484d575f80fd5b50565b5f8135905061485e8161483a565b92915050565b5f806040838503121561487a576148796145f1565b5b5f6148878582860161481d565b925050602061489885828601614850565b9150509250929050565b5f8115159050919050565b6148b6816148a2565b82525050565b5f6020820190506148cf5f8301846148ad565b92915050565b6148de81614831565b82525050565b5f6040820190506148f75f8301856148d5565b61490460208301846148d5565b9392505050565b5f602082840312156149205761491f6145f1565b5b5f61492d8482850161481d565b91505092915050565b5f805f805f80606087890312156149505761494f6145f1565b5b5f87013567ffffffffffffffff81111561496d5761496c6145f5565b5b61497989828a01614605565b9650965050602087013567ffffffffffffffff81111561499c5761499b6145f5565b5b6149a889828a0161465a565b9450945050604087013567ffffffffffffffff8111156149cb576149ca6145f5565b5b6149d789828a0161465a565b92509250509295509295509295565b5f602082840312156149fb576149fa6145f1565b5b5f614a0884828501614850565b91505092915050565b5f602082019050614a245f8301846148d5565b92915050565b5f819050919050565b5f614a4d614a48614a43846147d7565b614a2a565b6147d7565b9050919050565b5f614a5e82614a33565b9050919050565b5f614a6f82614a54565b9050919050565b614a7f81614a65565b82525050565b5f602082019050614a985f830184614a76565b92915050565b5f805f60608486031215614ab557614ab46145f1565b5b5f614ac28682870161481d565b9350506020614ad38682870161481d565b9250506040614ae486828701614850565b9150509250925092565b5f60ff82169050919050565b614b0381614aee565b82525050565b5f602082019050614b1c5f830184614afa565b92915050565b614b2b816148a2565b8114614b35575f80fd5b50565b5f81359050614b4681614b22565b92915050565b5f805f60408486031215614b6357614b626145f1565b5b5f84013567ffffffffffffffff811115614b8057614b7f6145f5565b5b614b8c86828701614605565b93509350506020614b9f86828701614b38565b9150509250925092565b614bb2816147f6565b82525050565b5f602082019050614bcb5f830184614ba9565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f614c148261472d565b614c1e8185614bfa565b9350614c2e818560208601614747565b614c378161476f565b840191505092915050565b614c4b81614831565b82525050565b5f604083015f8301518482035f860152614c6b8282614c0a565b9150506020830151614c806020860182614c42565b508091505092915050565b5f614c968383614c51565b905092915050565b5f602082019050919050565b5f614cb482614bd1565b614cbe8185614bdb565b935083602082028501614cd085614beb565b805f5b85811015614d0b5784840389528151614cec8582614c8b565b9450614cf783614c9e565b925060208a01995050600181019050614cd3565b50829750879550505050505092915050565b5f6020820190508181035f830152614d358184614caa565b905092915050565b5f614d4782614a33565b9050919050565b5f614d5882614d3d565b9050919050565b614d6881614d4e565b82525050565b5f602082019050614d815f830184614d5f565b92915050565b5f8060408385031215614d9d57614d9c6145f1565b5b5f614daa85828601614850565b9250506020614dbb85828601614850565b9150509250929050565b5f8060408385031215614ddb57614dda6145f1565b5b5f614de88582860161481d565b9250506020614df98582860161481d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614e37602083614737565b9150614e4282614e03565b602082019050919050565b5f6020820190508181035f830152614e6481614e2b565b9050919050565b7f686f6c6465727320616e6420616d6f756e747320646f6e2774206d61746368005f82015250565b5f614e9f601f83614737565b9150614eaa82614e6b565b602082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050614f135f830185614ba9565b614f2060208301846148d5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f5e82614831565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f9057614f8f614f27565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614fdf57607f821691505b602082108103614ff257614ff1614f9b565b5b50919050565b7f31330000000000000000000000000000000000000000000000000000000000005f82015250565b5f61502c600283614737565b915061503782614ff8565b602082019050919050565b5f6020820190508181035f83015261505981615020565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061509b81614807565b92915050565b5f602082840312156150b6576150b56145f1565b5b5f6150c38482850161508d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150fe816147f6565b82525050565b5f61510f83836150f5565b60208301905092915050565b5f602082019050919050565b5f615131826150cc565b61513b81856150d6565b9350615146836150e6565b805f5b8381101561517657815161515d8882615104565b97506151688361511b565b925050600181019050615149565b5085935050505092915050565b5f6040820190506151965f8301856148d5565b81810360208301526151a88184615127565b90509392505050565b6151ba8261476f565b810181811067ffffffffffffffff821117156151d9576151d8615060565b5b80604052505050565b5f6151eb6145e8565b90506151f782826151b1565b919050565b5f67ffffffffffffffff82111561521657615215615060565b5b602082029050602081019050919050565b5f815190506152358161483a565b92915050565b5f61524d615248846151fc565b6151e2565b905080838252602082019050602084028301858111156152705761526f614601565b5b835b8181101561529957806152858882615227565b845260208401935050602081019050615272565b5050509392505050565b5f82601f8301126152b7576152b66145f9565b5b81516152c784826020860161523b565b91505092915050565b5f602082840312156152e5576152e46145f1565b5b5f82015167ffffffffffffffff811115615302576153016145f5565b5b61530e848285016152a3565b91505092915050565b5f61532182614831565b915061532c83614831565b925082820261533a81614831565b9150828204841483151761535157615350614f27565b5b5092915050565b5f6020828403121561536d5761536c6145f1565b5b5f61537a84828501615227565b91505092915050565b7f33000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6153b7600183614737565b91506153c282615383565b602082019050919050565b5f6020820190508181035f8301526153e4816153ab565b9050919050565b7f34000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61541f600183614737565b915061542a826153eb565b602082019050919050565b5f6020820190508181035f83015261544c81615413565b9050919050565b7f31340000000000000000000000000000000000000000000000000000000000005f82015250565b5f615487600283614737565b915061549282615453565b602082019050919050565b5f6020820190508181035f8301526154b48161547b565b9050919050565b5f6040820190506154ce5f830185614ba9565b6154db6020830184614ba9565b9392505050565b5f819050919050565b5f6155056155006154fb846154e2565b614a2a565b614831565b9050919050565b615515816154eb565b82525050565b5f60c08201905061552e5f830189614ba9565b61553b60208301886148d5565b615548604083018761550c565b615555606083018661550c565b6155626080830185614ba9565b61556f60a08301846148d5565b979650505050505050565b5f805f60608486031215615591576155906145f1565b5b5f61559e86828701615227565b93505060206155af86828701615227565b92505060406155c086828701615227565b9150509250925092565b5f815190506155d881614b22565b92915050565b5f602082840312156155f3576155f26145f1565b5b5f615600848285016155ca565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f615663602683614737565b915061566e82615609565b604082019050919050565b5f6020820190508181035f83015261569081615657565b9050919050565b7f35000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6156cb600183614737565b91506156d682615697565b602082019050919050565b5f6020820190508181035f8301526156f8816156bf565b9050919050565b7f36000000000000000000000000000000000000000000000000000000000000005f82015250565b5f615733600183614737565b915061573e826156ff565b602082019050919050565b5f6020820190508181035f83015261576081615727565b9050919050565b5f61577182614831565b915061577c83614831565b925082820190508082111561579457615793614f27565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6157ce601b83614737565b91506157d98261579a565b602082019050919050565b5f6020820190508181035f8301526157fb816157c2565b9050919050565b5f6060820190506158155f8301866148d5565b61582260208301856148d5565b61582f60408301846148d5565b949350505050565b7f37000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61586b600183614737565b915061587682615837565b602082019050919050565b5f6020820190508181035f8301526158988161585f565b9050919050565b7f38000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6158d3600183614737565b91506158de8261589f565b602082019050919050565b5f6020820190508181035f830152615900816158c7565b9050919050565b7f39000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61593b600183614737565b915061594682615907565b602082019050919050565b5f6020820190508181035f8301526159688161592f565b9050919050565b7f31300000000000000000000000000000000000000000000000000000000000005f82015250565b5f6159a3600283614737565b91506159ae8261596f565b602082019050919050565b5f6020820190508181035f8301526159d081615997565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615a337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826159f8565b615a3d86836159f8565b95508019841693508086168417925050509392505050565b5f615a6f615a6a615a6584614831565b614a2a565b614831565b9050919050565b5f819050919050565b615a8883615a55565b615a9c615a9482615a76565b848454615a04565b825550505050565b5f90565b615ab0615aa4565b615abb818484615a7f565b505050565b5b81811015615ade57615ad35f82615aa8565b600181019050615ac1565b5050565b601f821115615b2357615af4816159d7565b615afd846159e9565b81016020851015615b0c578190505b615b20615b18856159e9565b830182615ac0565b50505b505050565b5f82821c905092915050565b5f615b435f1984600802615b28565b1980831691505092915050565b5f615b5b8383615b34565b9150826002028217905092915050565b615b748261472d565b67ffffffffffffffff811115615b8d57615b8c615060565b5b615b978254614fc8565b615ba2828285615ae2565b5f60209050601f831160018114615bd3575f8415615bc1578287015190505b615bcb8582615b50565b865550615c32565b601f198416615be1866159d7565b5f5b82811015615c0857848901518255600182019150602085019450602081019050615be3565b86831015615c255784890151615c21601f891682615b34565b8355505b6001600288020188555050505b505050505050565b7f42555900000000000000000000000000000000000000000000000000000000005f82015250565b5f615c6e600383614737565b9150615c7982615c3a565b602082019050919050565b5f608082019050615c975f830186614ba9565b8181036020830152615ca881615c62565b9050615cb760408301856148d5565b615cc460608301846148d5565b949350505050565b5f819050919050565b5f615cdf82615ccc565b9150615cea83615ccc565b925082820390508181125f8412168282135f851215161715615d0f57615d0e614f27565b5b92915050565b7f53454c4c000000000000000000000000000000000000000000000000000000005f82015250565b5f615d49600483614737565b9150615d5482615d15565b602082019050919050565b5f608082019050615d725f830186614ba9565b8181036020830152615d8381615d3d565b9050615d9260408301856148d5565b615d9f60608301846148d5565b949350505050565b5f604082019050615dba5f830185614ba9565b615dc7602083018461550c565b9392505050565b5f615dd882614831565b9150615de383614831565b9250828203905081811115615dfb57615dfa614f27565b5b92915050565b5f60a082019050615e145f8301886148d5565b615e21602083018761550c565b8181036040830152615e338186615127565b9050615e426060830185614ba9565b615e4f60808301846148d5565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615e9082614831565b9150615e9b83614831565b925082615eab57615eaa615e59565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615f10602183614737565b9150615f1b82615eb6565b604082019050919050565b5f6020820190508181035f830152615f3d81615f04565b9050919050565b5f81905092915050565b50565b5f615f5c5f83615f44565b9150615f6782615f4e565b5f82019050919050565b5f615f7b82615f51565b915081905091905056fea26469706673582212207bb4b3bee3f52c35ebbf3a0981b1f017594f6f5a1340a1df8f2e41165bced57264736f6c63430008140033
Deployed Bytecode Sourcemap
8606:14546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19526:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11797:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12628:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10590:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;14144:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18753:765;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20852:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9355:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12074:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12795:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13665:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22395:161;;;;;;;;;;;;;:::i;:::-;;11983:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13532:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13073:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13810:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9468:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10040:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14530:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21508:304;;;;;;;;;;;;;:::i;:::-;;15610:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10087:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10619:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10662:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10134:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12177:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7002:148;;;;;;;;;;;;;:::i;:::-;;13979:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15057:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10280:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6790:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11888:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15327:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13295:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12304:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14683:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22008:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11189:600;;;;;;;;;;;;;:::i;:::-;;12477:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21820:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7158:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19526:415;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19672:10:::1;;:17;;19654:7;;:14;;:35;19646:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19740:9;19736:198;19757:7;;:14;;19753:1;:18;19736:198;;;19793:17;19813:10;;19824:1;19813:13;;;;;;;:::i;:::-;;;;;;;;19793:33;;19841:14;19858:7;;19866:1;19858:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19841:27;;19883:16;;;;;;;;;;;:20;;;19904:6;19912:9;19883:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19778:156;;19773:3;;;;;:::i;:::-;;;;19736:198;;;;19526:415:::0;;;;:::o;11797:83::-;11834:13;11867:5;11860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11797:83;:::o;12628:159::-;12703:4;12720:37;12729:10;12741:7;12750:6;12720:8;:37::i;:::-;12775:4;12768:11;;12628:159;;;;:::o;10590:22::-;;;;;;;;;;;;;;:::o;14144:126::-;14210:4;14234:22;:28;14257:4;14234:28;;;;;;;;;;;;;;;;;;;;;;;;;14227:35;;14144:126;;;:::o;18753:765::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18917:7:::1;;:14;;18899:7;;:14;;:32;:74;;;;;18953:13;;:20;;18935:7;;:14;;:38;18899:74;18891:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;19063:1;19028:37;;19036:14;;;;;;;;;;;19028:37;;::::0;19020:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19083:12;19106:4;19083:28;;19126:9;19122:389;19143:7;;:14;;19139:1;:18;19122:389;;;19179:10;19192:7;;19200:1;19192:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19179:23;;19217:14;19234:7;;19242:1;19234:10;;;;;;;:::i;:::-;;;;;;;;19217:27;;19277;19297:6;19277:9;:15;19287:4;19277:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;19259:9;:15;19269:4;19259:15;;;;;;;;;;;;;;;:45;;;;19335:25;19353:6;19335:9;:13;19345:2;19335:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;19319:9;:13;19329:2;19319:13;;;;;;;;;;;;;;;:41;;;;19375:16;;;;;;;;;;;:20;;;19396:2;19400:13;;19414:1;19400:16;;;;;;;:::i;:::-;;;;;;;;19375:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19432:21;19444:4;19450:2;19432:11;:21::i;:::-;19488:2;19473:26;;19482:4;19473:26;;;19492:6;19473:26;;;;;;:::i;:::-;;;;;;;;19164:347;;19159:3;;;;;:::i;:::-;;;;19122:389;;;;18880:638;18753:765:::0;;;;;;:::o;20852:281::-;20922:4;20940:21;20978:1;20964:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20940:40;;21001:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20991:4;20996:1;20991:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21052:4;21034;21039:1;21034:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21075:15;;;;;;;;;;;:28;;;21104:11;21117:4;21075:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21123:1;21075:50;;;;;;;;:::i;:::-;;;;;;;;21068:57;;;20852:281;;;:::o;9355:106::-;;;;;;;;;;;;;:::o;12074:95::-;12127:7;12154;;12147:14;;12074:95;:::o;12795:270::-;12893:4;12910:36;12920:6;12928:9;12939:6;12910:9;:36::i;:::-;12957:78;12966:6;12974:10;12986:48;13022:6;12986:48;;;;;;;;;;;;;;;;;:11;:19;12998:6;12986:19;;;;;;;;;;;;;;;:31;13006:10;12986:31;;;;;;;;;;;;;;;;:35;;:48;;;;;:::i;:::-;12957:8;:78::i;:::-;13053:4;13046:11;;12795:270;;;;;:::o;13665:137::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13787:7:::1;13769:15;:25;;;;:::i;:::-;13750:16;:44;;;;13665:137:::0;:::o;22395:161::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22458:18:::1;22479:21;22458:42;;22519:7;:5;:7::i;:::-;22511:25;;:37;22537:10;22511:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22447:109;22395:161::o:0;11983:83::-;12024:5;12049:9;;;;;;;;;;;12042:16;;11983:83;:::o;13532:125::-;13596:4;13620:16;;;;;;;;;;;:20;;;13641:7;13620:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13613:36;;13532:125;;;:::o;13073:214::-;13161:4;13178:79;13187:10;13199:7;13208:48;13245:10;13208:11;:23;13220:10;13208:23;;;;;;;;;;;;;;;:32;13232:7;13208:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;13178:8;:79::i;:::-;13275:4;13268:11;;13073:214;;;;:::o;13810:161::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13922:41:::1;13935:9;;13946:16;13922:12;:41::i;:::-;13810:161:::0;;;:::o;9468:41::-;;;;;;;;;;;;;:::o;10040:40::-;;;;;;;;;;;;;:::o;14530:145::-;14594:23;14637:21;:30;14659:7;14637:30;;;;;;;;;;;;;;;14630:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14530:145;;;:::o;21508:304::-;21550:28;21581:24;21599:4;21581:9;:24::i;:::-;21550:55;;21643:1;21620:20;:24;21616:189;;;21666:16;;;;;;;;;;;21661:133;;21703:38;21720:20;21703:16;:38::i;:::-;21760:18;:16;:18::i;:::-;21661:133;21616:189;21539:273;21508:304::o;15610:124::-;15675:4;15699:18;:27;15718:7;15699:27;;;;;;;;;;;;;;;;;;;;;;;;;15692:34;;15610:124;;;:::o;10087:40::-;;;;:::o;10619:36::-;;;;;;;;;;;;;:::o;10662:54::-;;;;;;;;;;;;;;:::o;10134:61::-;;;;:::o;12177:119::-;12243:7;12270:9;:18;12280:7;12270:18;;;;;;;;;;;;;;;;12263:25;;12177:119;;;:::o;7002:148::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7109:1:::1;7072:40;;7093:6;::::0;::::1;;;;;;;;7072:40;;;;;;;;;;;;7140:1;7123:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7002:148::o:0;13979:157::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14089:39:::1;14106:9;;14117:10;14089:16;:39::i;:::-;13979:157:::0;;;:::o;15057:225::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15158:2:::1;15148:6;:12;;15140:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;15196:2;15185:7;:13;;15177:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;15232:6;15215:7;:14;;:23;;;;15267:7;15249;:15;;:25;;;;15057:225:::0;;:::o;10280:43::-;;;;;;;;;;;;;:::o;6790:79::-;6828:7;6855:6;;;;;;;;;;;6848:13;;6790:79;:::o;11888:87::-;11927:13;11960:7;11953:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11888:87;:::o;15327:275::-;15384:7;15405:21;15443:1;15429:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:40;;15466:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15456:4;15461:1;15456:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15517:4;15499;15504:1;15499:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15540:15;;;;;;;;;;;:29;;;15570:14;;15586:4;15540:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15592:1;15540:54;;;;;;;;:::i;:::-;;;;;;;;15533:61;;;15327:275;:::o;13295:229::-;13388:4;13405:89;13414:10;13426:7;13435:58;13472:15;13435:58;;;;;;;;;;;;;;;;;:11;:23;13447:10;13435:23;;;;;;;;;;;;;;;:32;13459:7;13435:32;;;;;;;;;;;;;;;;:36;;:58;;;;;:::i;:::-;13405:8;:89::i;:::-;13512:4;13505:11;;13295:229;;;;:::o;12304:165::-;12382:4;12399:40;12409:10;12421:9;12432:6;12399:9;:40::i;:::-;12457:4;12450:11;;12304:165;;;;:::o;14683:122::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14782:15:::1;14765:14;:32;;;;14683:122:::0;:::o;22008:161::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22137:22:::1;22097:14;;:64;;;;;;;;;;;;;;;;;;22008:161:::0;:::o;11189:600::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11277:1:::1;11252:27;;:13;;;;;;;;;;;:27;;;11244:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11296:58;11313:4;11328:15;;;;;;;;;;;11346:7;;11296:8;:58::i;:::-;11399:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11381:55;;;11445:4;11452:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11381:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11365:13;;:110;;;;;;;;;;;;;;;;;;11486:15;;;;;;;;;;;:31;;;11525:21;11570:4;11590:24;11608:4;11590:9;:24::i;:::-;11629:1;11645::::0;11661:7:::1;:5;:7::i;:::-;11683:15;11486:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11717:13;;;;;;;;;;;11710:29;;;11748:15;;;;;;;;;;;11766:14;11710:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11189:600::o:0;12477:143::-;12558:7;12585:11;:18;12597:5;12585:18;;;;;;;;;;;;;;;:27;12604:7;12585:27;;;;;;;;;;;;;;;;12578:34;;12477:143;;;;:::o;21820:180::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21940:11:::1;21913:12;:24;;:38;;;;21985:7;21962:12;:20;;:30;;;;21820:180:::0;;:::o;7158:244::-;6927:10;6917:20;;:6;;;;;;;;;;:20;;;6909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7267:1:::1;7247:22;;:8;:22;;::::0;7239:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7357:8;7328:38;;7349:6;::::0;::::1;;;;;;;;7328:38;;;;;;;;;;;;7386:8;7377:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7158:244:::0;:::o;15742:267::-;15852:1;15835:19;;:5;:19;;;15827:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;15898:1;15879:21;;:7;:21;;;15871:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;15947:6;15917:11;:18;15929:5;15917:18;;;;;;;;;;;;;;;:27;15936:7;15917:27;;;;;;;;;;;;;;;:36;;;;15985:7;15969:32;;15978:5;15969:32;;;15994:6;15969:32;;;;;;:::i;:::-;;;;;;;;15742:267;;;:::o;2524:136::-;2582:7;2609:43;2613:1;2616;2609:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2602:50;;2524:136;;;;:::o;2335:181::-;2393:7;2413:9;2429:1;2425;:5;;;;:::i;:::-;2413:17;;2454:1;2449;:6;;2441:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2507:1;2500:8;;;2335:181;;;;:::o;19949:408::-;20019:14;;;;;;;;;;;:30;;;20050:4;20019:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20015:51;20080:14;;;;;;;;;;;:30;;;20111:2;20080:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20076:49;20139:14;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20135:215;;;20320:9;20257:73;;20314:4;20257:73;;;20274:10;20286:6;20294:18;20257:73;;;;;;;;:::i;:::-;;;;;;;;20164:178;;;20135:215;19949:408;;:::o;16017:2728::-;16121:1;16105:18;;:4;:18;;;16097:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;16162:1;16148:16;;:2;:16;;;16140:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;16198:1;16189:6;:10;16181:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;16216:13;16233:18;:24;16252:4;16233:24;;;;;;;;;;;;;;;;;;;;;;;;;16232:25;:52;;;;;16262:18;:22;16281:2;16262:22;;;;;;;;;;;;;;;;;;;;;;;;;16261:23;16232:52;:71;;;;;16296:7;:5;:7::i;:::-;16288:15;;:4;:15;;;;16232:71;:88;;;;;16313:7;:5;:7::i;:::-;16307:13;;:2;:13;;;;16232:88;16216:104;;16331:21;16355:25;16373:6;16355:13;16365:2;16355:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;16331:49;;16391:17;16524:7;:5;:7::i;:::-;16516:15;;:4;:15;;;;:32;;;;;16541:7;:5;:7::i;:::-;16535:13;;:2;:13;;;;16516:32;:52;;;;;16558:10;;;;;;;;;;;16552:16;;:2;:16;;;;16516:52;:77;;;;;16588:4;16572:21;;:4;:21;;;;16516:77;:100;;;;;16611:4;16597:19;;:2;:19;;;;16516:100;16512:1934;;;16645:13;;;;;;;;;;;16637:21;;:4;:21;;;16633:586;;16682:8;16679:104;;;16740:16;;16723:13;:33;;16715:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16679:104;16813:8;:51;;16863:1;16813:51;;;16824:35;16855:3;16824:26;16835:7;:14;;;16824:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;16813:51;16801:63;;16883:11;16897:29;16919:6;16897:21;:29::i;:::-;16883:43;;16945:15;16963:36;16992:6;16963:16;;;;;;;;;;;:20;;;16984:2;16963:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;16945:54;;17018:16;;;;;;;;;;;:20;;;17039:2;17043:10;17018:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17073:21;:25;17095:2;17073:25;;;;;;;;;;;;;;;17104:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:6;17104:29;;;17073:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;17158:45;17172:2;17183:6;17192:10;17158:45;;;;;;;;:::i;:::-;;;;;;;;16660:559;;16633:586;17245:13;;;;;;;;;;;17237:21;;:4;:21;;;;:44;;;;;17268:13;;;;;;;;;;;17262:19;;:2;:19;;;17237:44;17233:598;;;17314:8;:51;;17364:1;17314:51;;;17325:36;17357:3;17325:27;17336:7;:15;;;17325:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;17314:51;17302:63;;17384:12;17399:29;17421:6;17399:21;:29::i;:::-;17384:44;;17447:7;17495;17461:16;;;;;;;;;;;:20;;;17482:4;17461:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17457:46;;;;:::i;:::-;17447:56;;17522:18;17550:1;17543:3;:8;;:27;;17566:3;17543:27;;;17554:1;17543:27;17522:48;;17589:16;;;;;;;;;;;:20;;;17610:4;17616:10;17589:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17646:21;:27;17668:4;17646:27;;;;;;;;;;;;;;;17679:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17702:7;17679:31;;;17646:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;17735:49;17749:4;17763:7;17773:10;17735:49;;;;;;;;:::i;:::-;;;;;;;;17803:12;:10;:12::i;:::-;17283:548;;;17233:598;17857:13;;;;;;;;;;;17849:21;;:4;:21;;;;:44;;;;;17880:13;;;;;;;;;;;17874:19;;:2;:19;;;;17849:44;17845:554;;;17914:11;17933:16;;;;;;;;;;;:20;;;17954:4;17933:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17914:46;;17979:16;;;;;;;;;;;:20;;;18000:4;18006:1;17979:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18030:24;18049:4;18030:18;:24::i;:::-;18027:339;;;18079:15;18097:36;18126:6;18097:16;;;;;;;;;;;:20;;;18118:2;18097:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;18079:54;;18156:16;;;;;;;;;;;:20;;;18177:2;18181:10;18156:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18220:45;18234:2;18245:6;18254:10;18220:45;;;;;;;;:::i;:::-;;;;;;;;18056:229;18027:339;;;18314:16;;;;;;;;;;;:20;;;18335:2;18339:6;18314:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18027:339;17895:504;17845:554;18413:21;18425:4;18431:2;18413:11;:21::i;:::-;16512:1934;18456:22;18481:21;18492:9;18481:6;:10;;:21;;;;:::i;:::-;18456:46;;18531:27;18551:6;18531:9;:15;18541:4;18531:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;18513:9;:15;18523:4;18513:15;;;;;;;;;;;;;;;:45;;;;18585:33;18603:14;18585:9;:13;18595:2;18585:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;18569:9;:13;18579:2;18569:13;;;;;;;;;;;;;;;:49;;;;18656:39;18685:9;18656;:24;18674:4;18656:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;18629:9;:24;18647:4;18629:24;;;;;;;;;;;;;;;:66;;;;18726:2;18711:26;;18720:4;18711:26;;;18730:6;18711:26;;;;;;:::i;:::-;;;;;;;;16086:2659;;;;16017:2728;;;:::o;2668:192::-;2754:7;2787:1;2782;:6;;2790:12;2774:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2814:9;2830:1;2826;:5;;;;:::i;:::-;2814:17;;2851:1;2844:8;;;2668:192;;;;;:::o;14813:236::-;14900:9;14895:147;14919:9;;:16;;14915:1;:20;14895:147;;;14957:12;14972:9;;14982:1;14972:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14957:27;;15026:4;14999:18;:24;15018:4;14999:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14942:100;14937:3;;;;;:::i;:::-;;;;14895:147;;;;14813:236;;;:::o;22564:585::-;22690:21;22728:1;22714:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22690:40;;22759:4;22741;22746:1;22741:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22785:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22775:4;22780:1;22775:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22818:62;22835:4;22850:15;;;;;;;;;;;22868:11;22818:8;:62::i;:::-;22917:15;;;;;;;;;;;:66;;;22998:11;23024:1;23068:4;23095;23115:15;22917:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22619:530;22564:585;:::o;21141:359::-;9045:4;9026:16;;:23;;;;;;;;;;;;;;;;;;21200:18:::1;21221:21;21200:42;;21253:19;21275:49;21320:3;21275:40;21290:12;:24;;;21275:10;:14;;:40;;;;:::i;:::-;:44;;:49;;;;:::i;:::-;21253:71;;21335:15;21353:45;21394:3;21353:36;21368:12;:20;;;21353:10;:14;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;21335:63;;21417:18;;;;;;;;;;;21409:36;;:49;21446:11;21409:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21469:23;21484:7;21469:14;:23::i;:::-;21189:311;;;9073:5:::0;9054:16;;:24;;;;;;;;;;;;;;;;;;21141:359::o;14278:244::-;14369:9;14364:151;14388:9;;:16;;14384:1;:20;14364:151;;;14426:12;14441:9;;14451:1;14441:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14426:27;;14499:4;14468:22;:28;14491:4;14468:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14411:104;14406:3;;;;;:::i;:::-;;;;14364:151;;;;14278:244;;;:::o;2868:250::-;2926:7;2955:1;2950;:6;2946:47;;2980:1;2973:8;;;;2946:47;3005:9;3021:1;3017;:5;;;;:::i;:::-;3005:17;;3050:1;3045;3041;:5;;;;:::i;:::-;:10;3033:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3109:1;3102:8;;;2868:250;;;;;:::o;3126:132::-;3184:7;3211:39;3215:1;3218;3211:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3204:46;;3126:132;;;;:::o;20365:479::-;20406:28;20437:24;20455:4;20437:9;:24::i;:::-;20406:55;;20499:1;20476:20;:24;20472:365;;;20517:19;20539:26;:24;:26::i;:::-;20517:48;;20608:11;20584:20;:35;;:56;;;;;20624:16;;;;;;;;;;;20623:17;20584:56;:81;;;;;20644:21;;;;;;;;;;;20584:81;20580:246;;;20744:29;20761:11;20744:16;:29::i;:::-;20792:18;:16;:18::i;:::-;20580:246;20502:335;20472:365;20395:449;20365:479::o;3886:372::-;3946:4;3963:16;3990:19;4012:66;3990:88;;;;4180:7;4168:20;4156:32;;4219:11;4207:8;:23;;:42;;;;;4246:3;4234:15;;:8;:15;;4207:42;4199:51;;;;3886:372;;;:::o;22177:210::-;22238:12;22263:14;;;;;;;;;;;22255:28;;22292:7;22255:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22237:67;;;22319:7;22315:65;;;22348:20;22360:7;22348:20;;;;;;:::i;:::-;;;;;;;;22315:65;22226:161;22177:210;:::o;3266:278::-;3352:7;3384:1;3380;:5;3387:12;3372:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3411:9;3427:1;3423;:5;;;;:::i;:::-;3411:17;;3535:1;3528:8;;;3266:278;;;;;:::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;13208:616::-;13329:3;13365:4;13360:3;13356:14;13458:4;13451:5;13447:16;13441:23;13511:3;13505:4;13501:14;13494:4;13489:3;13485:14;13478:38;13537:73;13605:4;13591:12;13537:73;:::i;:::-;13529:81;;13380:241;13705:4;13698:5;13694:16;13688:23;13724:63;13781:4;13776:3;13772:14;13758:12;13724:63;:::i;:::-;13631:166;13814:4;13807:11;;13334:490;13208:616;;;;:::o;13830:280::-;13961:10;13996:108;14100:3;14092:6;13996:108;:::i;:::-;13982:122;;13830:280;;;;:::o;14116:144::-;14217:4;14249;14244:3;14240:14;14232:22;;14116:144;;;:::o;14338:1159::-;14519:3;14548:85;14627:5;14548:85;:::i;:::-;14649:117;14759:6;14754:3;14649:117;:::i;:::-;14642:124;;14792:3;14837:4;14829:6;14825:17;14820:3;14816:27;14867:87;14948:5;14867:87;:::i;:::-;14977:7;15008:1;14993:459;15018:6;15015:1;15012:13;14993:459;;;15089:9;15083:4;15079:20;15074:3;15067:33;15140:6;15134:13;15168:126;15289:4;15274:13;15168:126;:::i;:::-;15160:134;;15317:91;15401:6;15317:91;:::i;:::-;15307:101;;15437:4;15432:3;15428:14;15421:21;;15053:399;15040:1;15037;15033:9;15028:14;;14993:459;;;14997:14;15468:4;15461:11;;15488:3;15481:10;;14524:973;;;;;14338:1159;;;;:::o;15503:497::-;15708:4;15746:2;15735:9;15731:18;15723:26;;15795:9;15789:4;15785:20;15781:1;15770:9;15766:17;15759:47;15823:170;15988:4;15979:6;15823:170;:::i;:::-;15815:178;;15503:497;;;;:::o;16006:134::-;16064:9;16097:37;16128:5;16097:37;:::i;:::-;16084:50;;16006:134;;;:::o;16146:165::-;16227:9;16260:45;16299:5;16260:45;:::i;:::-;16247:58;;16146:165;;;:::o;16317:193::-;16435:68;16497:5;16435:68;:::i;:::-;16430:3;16423:81;16317:193;;:::o;16516:284::-;16640:4;16678:2;16667:9;16663:18;16655:26;;16691:102;16790:1;16779:9;16775:17;16766:6;16691:102;:::i;:::-;16516:284;;;;:::o;16806:474::-;16874:6;16882;16931:2;16919:9;16910:7;16906:23;16902:32;16899:119;;;16937:79;;:::i;:::-;16899:119;17057:1;17082:53;17127:7;17118:6;17107:9;17103:22;17082:53;:::i;:::-;17072:63;;17028:117;17184:2;17210:53;17255:7;17246:6;17235:9;17231:22;17210:53;:::i;:::-;17200:63;;17155:118;16806:474;;;;;:::o;17286:::-;17354:6;17362;17411:2;17399:9;17390:7;17386:23;17382:32;17379:119;;;17417:79;;:::i;:::-;17379:119;17537:1;17562:53;17607:7;17598:6;17587:9;17583:22;17562:53;:::i;:::-;17552:63;;17508:117;17664:2;17690:53;17735:7;17726:6;17715:9;17711:22;17690:53;:::i;:::-;17680:63;;17635:118;17286:474;;;;;:::o;17766:182::-;17906:34;17902:1;17894:6;17890:14;17883:58;17766:182;:::o;17954:366::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;17954:366;;;:::o;18326:419::-;18492:4;18530:2;18519:9;18515:18;18507:26;;18579:9;18573:4;18569:20;18565:1;18554:9;18550:17;18543:47;18607:131;18733:4;18607:131;:::i;:::-;18599:139;;18326:419;;;:::o;18751:181::-;18891:33;18887:1;18879:6;18875:14;18868:57;18751:181;:::o;18938:366::-;19080:3;19101:67;19165:2;19160:3;19101:67;:::i;:::-;19094:74;;19177:93;19266:3;19177:93;:::i;:::-;19295:2;19290:3;19286:12;19279:19;;18938:366;;;:::o;19310:419::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:131;19717:4;19591:131;:::i;:::-;19583:139;;19310:419;;;:::o;19735:180::-;19783:77;19780:1;19773:88;19880:4;19877:1;19870:15;19904:4;19901:1;19894:15;19921:332;20042:4;20080:2;20069:9;20065:18;20057:26;;20093:71;20161:1;20150:9;20146:17;20137:6;20093:71;:::i;:::-;20174:72;20242:2;20231:9;20227:18;20218:6;20174:72;:::i;:::-;19921:332;;;;;:::o;20259:180::-;20307:77;20304:1;20297:88;20404:4;20401:1;20394:15;20428:4;20425:1;20418:15;20445:233;20484:3;20507:24;20525:5;20507:24;:::i;:::-;20498:33;;20553:66;20546:5;20543:77;20540:103;;20623:18;;:::i;:::-;20540:103;20670:1;20663:5;20659:13;20652:20;;20445:233;;;:::o;20684:180::-;20732:77;20729:1;20722:88;20829:4;20826:1;20819:15;20853:4;20850:1;20843:15;20870:320;20914:6;20951:1;20945:4;20941:12;20931:22;;20998:1;20992:4;20988:12;21019:18;21009:81;;21075:4;21067:6;21063:17;21053:27;;21009:81;21137:2;21129:6;21126:14;21106:18;21103:38;21100:84;;21156:18;;:::i;:::-;21100:84;20921:269;20870:320;;;:::o;21196:152::-;21336:4;21332:1;21324:6;21320:14;21313:28;21196:152;:::o;21354:365::-;21496:3;21517:66;21581:1;21576:3;21517:66;:::i;:::-;21510:73;;21592:93;21681:3;21592:93;:::i;:::-;21710:2;21705:3;21701:12;21694:19;;21354:365;;;:::o;21725:419::-;21891:4;21929:2;21918:9;21914:18;21906:26;;21978:9;21972:4;21968:20;21964:1;21953:9;21949:17;21942:47;22006:131;22132:4;22006:131;:::i;:::-;21998:139;;21725:419;;;:::o;22150:180::-;22198:77;22195:1;22188:88;22295:4;22292:1;22285:15;22319:4;22316:1;22309:15;22336:143;22393:5;22424:6;22418:13;22409:22;;22440:33;22467:5;22440:33;:::i;:::-;22336:143;;;;:::o;22485:351::-;22555:6;22604:2;22592:9;22583:7;22579:23;22575:32;22572:119;;;22610:79;;:::i;:::-;22572:119;22730:1;22755:64;22811:7;22802:6;22791:9;22787:22;22755:64;:::i;:::-;22745:74;;22701:128;22485:351;;;;:::o;22842:114::-;22909:6;22943:5;22937:12;22927:22;;22842:114;;;:::o;22962:184::-;23061:11;23095:6;23090:3;23083:19;23135:4;23130:3;23126:14;23111:29;;22962:184;;;;:::o;23152:132::-;23219:4;23242:3;23234:11;;23272:4;23267:3;23263:14;23255:22;;23152:132;;;:::o;23290:108::-;23367:24;23385:5;23367:24;:::i;:::-;23362:3;23355:37;23290:108;;:::o;23404:179::-;23473:10;23494:46;23536:3;23528:6;23494:46;:::i;:::-;23572:4;23567:3;23563:14;23549:28;;23404:179;;;;:::o;23589:113::-;23659:4;23691;23686:3;23682:14;23674:22;;23589:113;;;:::o;23738:732::-;23857:3;23886:54;23934:5;23886:54;:::i;:::-;23956:86;24035:6;24030:3;23956:86;:::i;:::-;23949:93;;24066:56;24116:5;24066:56;:::i;:::-;24145:7;24176:1;24161:284;24186:6;24183:1;24180:13;24161:284;;;24262:6;24256:13;24289:63;24348:3;24333:13;24289:63;:::i;:::-;24282:70;;24375:60;24428:6;24375:60;:::i;:::-;24365:70;;24221:224;24208:1;24205;24201:9;24196:14;;24161:284;;;24165:14;24461:3;24454:10;;23862:608;;;23738:732;;;;:::o;24476:483::-;24647:4;24685:2;24674:9;24670:18;24662:26;;24698:71;24766:1;24755:9;24751:17;24742:6;24698:71;:::i;:::-;24816:9;24810:4;24806:20;24801:2;24790:9;24786:18;24779:48;24844:108;24947:4;24938:6;24844:108;:::i;:::-;24836:116;;24476:483;;;;;:::o;24965:281::-;25048:27;25070:4;25048:27;:::i;:::-;25040:6;25036:40;25178:6;25166:10;25163:22;25142:18;25130:10;25127:34;25124:62;25121:88;;;25189:18;;:::i;:::-;25121:88;25229:10;25225:2;25218:22;25008:238;24965:281;;:::o;25252:129::-;25286:6;25313:20;;:::i;:::-;25303:30;;25342:33;25370:4;25362:6;25342:33;:::i;:::-;25252:129;;;:::o;25387:311::-;25464:4;25554:18;25546:6;25543:30;25540:56;;;25576:18;;:::i;:::-;25540:56;25626:4;25618:6;25614:17;25606:25;;25686:4;25680;25676:15;25668:23;;25387:311;;;:::o;25704:143::-;25761:5;25792:6;25786:13;25777:22;;25808:33;25835:5;25808:33;:::i;:::-;25704:143;;;;:::o;25870:732::-;25977:5;26002:81;26018:64;26075:6;26018:64;:::i;:::-;26002:81;:::i;:::-;25993:90;;26103:5;26132:6;26125:5;26118:21;26166:4;26159:5;26155:16;26148:23;;26219:4;26211:6;26207:17;26199:6;26195:30;26248:3;26240:6;26237:15;26234:122;;;26267:79;;:::i;:::-;26234:122;26382:6;26365:231;26399:6;26394:3;26391:15;26365:231;;;26474:3;26503:48;26547:3;26535:10;26503:48;:::i;:::-;26498:3;26491:61;26581:4;26576:3;26572:14;26565:21;;26441:155;26425:4;26420:3;26416:14;26409:21;;26365:231;;;26369:21;25983:619;;25870:732;;;;;:::o;26625:385::-;26707:5;26756:3;26749:4;26741:6;26737:17;26733:27;26723:122;;26764:79;;:::i;:::-;26723:122;26874:6;26868:13;26899:105;27000:3;26992:6;26985:4;26977:6;26973:17;26899:105;:::i;:::-;26890:114;;26713:297;26625:385;;;;:::o;27016:554::-;27111:6;27160:2;27148:9;27139:7;27135:23;27131:32;27128:119;;;27166:79;;:::i;:::-;27128:119;27307:1;27296:9;27292:17;27286:24;27337:18;27329:6;27326:30;27323:117;;;27359:79;;:::i;:::-;27323:117;27464:89;27545:7;27536:6;27525:9;27521:22;27464:89;:::i;:::-;27454:99;;27257:306;27016:554;;;;:::o;27576:410::-;27616:7;27639:20;27657:1;27639:20;:::i;:::-;27634:25;;27673:20;27691:1;27673:20;:::i;:::-;27668:25;;27728:1;27725;27721:9;27750:30;27768:11;27750:30;:::i;:::-;27739:41;;27929:1;27920:7;27916:15;27913:1;27910:22;27890:1;27883:9;27863:83;27840:139;;27959:18;;:::i;:::-;27840:139;27624:362;27576:410;;;;:::o;27992:351::-;28062:6;28111:2;28099:9;28090:7;28086:23;28082:32;28079:119;;;28117:79;;:::i;:::-;28079:119;28237:1;28262:64;28318:7;28309:6;28298:9;28294:22;28262:64;:::i;:::-;28252:74;;28208:128;27992:351;;;;:::o;28349:151::-;28489:3;28485:1;28477:6;28473:14;28466:27;28349:151;:::o;28506:365::-;28648:3;28669:66;28733:1;28728:3;28669:66;:::i;:::-;28662:73;;28744:93;28833:3;28744:93;:::i;:::-;28862:2;28857:3;28853:12;28846:19;;28506:365;;;:::o;28877:419::-;29043:4;29081:2;29070:9;29066:18;29058:26;;29130:9;29124:4;29120:20;29116:1;29105:9;29101:17;29094:47;29158:131;29284:4;29158:131;:::i;:::-;29150:139;;28877:419;;;:::o;29302:151::-;29442:3;29438:1;29430:6;29426:14;29419:27;29302:151;:::o;29459:365::-;29601:3;29622:66;29686:1;29681:3;29622:66;:::i;:::-;29615:73;;29697:93;29786:3;29697:93;:::i;:::-;29815:2;29810:3;29806:12;29799:19;;29459:365;;;:::o;29830:419::-;29996:4;30034:2;30023:9;30019:18;30011:26;;30083:9;30077:4;30073:20;30069:1;30058:9;30054:17;30047:47;30111:131;30237:4;30111:131;:::i;:::-;30103:139;;29830:419;;;:::o;30255:152::-;30395:4;30391:1;30383:6;30379:14;30372:28;30255:152;:::o;30413:365::-;30555:3;30576:66;30640:1;30635:3;30576:66;:::i;:::-;30569:73;;30651:93;30740:3;30651:93;:::i;:::-;30769:2;30764:3;30760:12;30753:19;;30413:365;;;:::o;30784:419::-;30950:4;30988:2;30977:9;30973:18;30965:26;;31037:9;31031:4;31027:20;31023:1;31012:9;31008:17;31001:47;31065:131;31191:4;31065:131;:::i;:::-;31057:139;;30784:419;;;:::o;31209:332::-;31330:4;31368:2;31357:9;31353:18;31345:26;;31381:71;31449:1;31438:9;31434:17;31425:6;31381:71;:::i;:::-;31462:72;31530:2;31519:9;31515:18;31506:6;31462:72;:::i;:::-;31209:332;;;;;:::o;31547:85::-;31592:7;31621:5;31610:16;;31547:85;;;:::o;31638:158::-;31696:9;31729:61;31747:42;31756:32;31782:5;31756:32;:::i;:::-;31747:42;:::i;:::-;31729:61;:::i;:::-;31716:74;;31638:158;;;:::o;31802:147::-;31897:45;31936:5;31897:45;:::i;:::-;31892:3;31885:58;31802:147;;:::o;31955:807::-;32204:4;32242:3;32231:9;32227:19;32219:27;;32256:71;32324:1;32313:9;32309:17;32300:6;32256:71;:::i;:::-;32337:72;32405:2;32394:9;32390:18;32381:6;32337:72;:::i;:::-;32419:80;32495:2;32484:9;32480:18;32471:6;32419:80;:::i;:::-;32509;32585:2;32574:9;32570:18;32561:6;32509:80;:::i;:::-;32599:73;32667:3;32656:9;32652:19;32643:6;32599:73;:::i;:::-;32682;32750:3;32739:9;32735:19;32726:6;32682:73;:::i;:::-;31955:807;;;;;;;;;:::o;32768:663::-;32856:6;32864;32872;32921:2;32909:9;32900:7;32896:23;32892:32;32889:119;;;32927:79;;:::i;:::-;32889:119;33047:1;33072:64;33128:7;33119:6;33108:9;33104:22;33072:64;:::i;:::-;33062:74;;33018:128;33185:2;33211:64;33267:7;33258:6;33247:9;33243:22;33211:64;:::i;:::-;33201:74;;33156:129;33324:2;33350:64;33406:7;33397:6;33386:9;33382:22;33350:64;:::i;:::-;33340:74;;33295:129;32768:663;;;;;:::o;33437:137::-;33491:5;33522:6;33516:13;33507:22;;33538:30;33562:5;33538:30;:::i;:::-;33437:137;;;;:::o;33580:345::-;33647:6;33696:2;33684:9;33675:7;33671:23;33667:32;33664:119;;;33702:79;;:::i;:::-;33664:119;33822:1;33847:61;33900:7;33891:6;33880:9;33876:22;33847:61;:::i;:::-;33837:71;;33793:125;33580:345;;;;:::o;33931:225::-;34071:34;34067:1;34059:6;34055:14;34048:58;34140:8;34135:2;34127:6;34123:15;34116:33;33931:225;:::o;34162:366::-;34304:3;34325:67;34389:2;34384:3;34325:67;:::i;:::-;34318:74;;34401:93;34490:3;34401:93;:::i;:::-;34519:2;34514:3;34510:12;34503:19;;34162:366;;;:::o;34534:419::-;34700:4;34738:2;34727:9;34723:18;34715:26;;34787:9;34781:4;34777:20;34773:1;34762:9;34758:17;34751:47;34815:131;34941:4;34815:131;:::i;:::-;34807:139;;34534:419;;;:::o;34959:151::-;35099:3;35095:1;35087:6;35083:14;35076:27;34959:151;:::o;35116:365::-;35258:3;35279:66;35343:1;35338:3;35279:66;:::i;:::-;35272:73;;35354:93;35443:3;35354:93;:::i;:::-;35472:2;35467:3;35463:12;35456:19;;35116:365;;;:::o;35487:419::-;35653:4;35691:2;35680:9;35676:18;35668:26;;35740:9;35734:4;35730:20;35726:1;35715:9;35711:17;35704:47;35768:131;35894:4;35768:131;:::i;:::-;35760:139;;35487:419;;;:::o;35912:151::-;36052:3;36048:1;36040:6;36036:14;36029:27;35912:151;:::o;36069:365::-;36211:3;36232:66;36296:1;36291:3;36232:66;:::i;:::-;36225:73;;36307:93;36396:3;36307:93;:::i;:::-;36425:2;36420:3;36416:12;36409:19;;36069:365;;;:::o;36440:419::-;36606:4;36644:2;36633:9;36629:18;36621:26;;36693:9;36687:4;36683:20;36679:1;36668:9;36664:17;36657:47;36721:131;36847:4;36721:131;:::i;:::-;36713:139;;36440:419;;;:::o;36865:191::-;36905:3;36924:20;36942:1;36924:20;:::i;:::-;36919:25;;36958:20;36976:1;36958:20;:::i;:::-;36953:25;;37001:1;36998;36994:9;36987:16;;37022:3;37019:1;37016:10;37013:36;;;37029:18;;:::i;:::-;37013:36;36865:191;;;;:::o;37062:177::-;37202:29;37198:1;37190:6;37186:14;37179:53;37062:177;:::o;37245:366::-;37387:3;37408:67;37472:2;37467:3;37408:67;:::i;:::-;37401:74;;37484:93;37573:3;37484:93;:::i;:::-;37602:2;37597:3;37593:12;37586:19;;37245:366;;;:::o;37617:419::-;37783:4;37821:2;37810:9;37806:18;37798:26;;37870:9;37864:4;37860:20;37856:1;37845:9;37841:17;37834:47;37898:131;38024:4;37898:131;:::i;:::-;37890:139;;37617:419;;;:::o;38042:442::-;38191:4;38229:2;38218:9;38214:18;38206:26;;38242:71;38310:1;38299:9;38295:17;38286:6;38242:71;:::i;:::-;38323:72;38391:2;38380:9;38376:18;38367:6;38323:72;:::i;:::-;38405;38473:2;38462:9;38458:18;38449:6;38405:72;:::i;:::-;38042:442;;;;;;:::o;38490:151::-;38630:3;38626:1;38618:6;38614:14;38607:27;38490:151;:::o;38647:365::-;38789:3;38810:66;38874:1;38869:3;38810:66;:::i;:::-;38803:73;;38885:93;38974:3;38885:93;:::i;:::-;39003:2;38998:3;38994:12;38987:19;;38647:365;;;:::o;39018:419::-;39184:4;39222:2;39211:9;39207:18;39199:26;;39271:9;39265:4;39261:20;39257:1;39246:9;39242:17;39235:47;39299:131;39425:4;39299:131;:::i;:::-;39291:139;;39018:419;;;:::o;39443:151::-;39583:3;39579:1;39571:6;39567:14;39560:27;39443:151;:::o;39600:365::-;39742:3;39763:66;39827:1;39822:3;39763:66;:::i;:::-;39756:73;;39838:93;39927:3;39838:93;:::i;:::-;39956:2;39951:3;39947:12;39940:19;;39600:365;;;:::o;39971:419::-;40137:4;40175:2;40164:9;40160:18;40152:26;;40224:9;40218:4;40214:20;40210:1;40199:9;40195:17;40188:47;40252:131;40378:4;40252:131;:::i;:::-;40244:139;;39971:419;;;:::o;40396:151::-;40536:3;40532:1;40524:6;40520:14;40513:27;40396:151;:::o;40553:365::-;40695:3;40716:66;40780:1;40775:3;40716:66;:::i;:::-;40709:73;;40791:93;40880:3;40791:93;:::i;:::-;40909:2;40904:3;40900:12;40893:19;;40553:365;;;:::o;40924:419::-;41090:4;41128:2;41117:9;41113:18;41105:26;;41177:9;41171:4;41167:20;41163:1;41152:9;41148:17;41141:47;41205:131;41331:4;41205:131;:::i;:::-;41197:139;;40924:419;;;:::o;41349:152::-;41489:4;41485:1;41477:6;41473:14;41466:28;41349:152;:::o;41507:365::-;41649:3;41670:66;41734:1;41729:3;41670:66;:::i;:::-;41663:73;;41745:93;41834:3;41745:93;:::i;:::-;41863:2;41858:3;41854:12;41847:19;;41507:365;;;:::o;41878:419::-;42044:4;42082:2;42071:9;42067:18;42059:26;;42131:9;42125:4;42121:20;42117:1;42106:9;42102:17;42095:47;42159:131;42285:4;42159:131;:::i;:::-;42151:139;;41878:419;;;:::o;42303:141::-;42352:4;42375:3;42367:11;;42398:3;42395:1;42388:14;42432:4;42429:1;42419:18;42411:26;;42303:141;;;:::o;42450:93::-;42487:6;42534:2;42529;42522:5;42518:14;42514:23;42504:33;;42450:93;;;:::o;42549:107::-;42593:8;42643:5;42637:4;42633:16;42612:37;;42549:107;;;;:::o;42662:393::-;42731:6;42781:1;42769:10;42765:18;42804:97;42834:66;42823:9;42804:97;:::i;:::-;42922:39;42952:8;42941:9;42922:39;:::i;:::-;42910:51;;42994:4;42990:9;42983:5;42979:21;42970:30;;43043:4;43033:8;43029:19;43022:5;43019:30;43009:40;;42738:317;;42662:393;;;;;:::o;43061:142::-;43111:9;43144:53;43162:34;43171:24;43189:5;43171:24;:::i;:::-;43162:34;:::i;:::-;43144:53;:::i;:::-;43131:66;;43061:142;;;:::o;43209:75::-;43252:3;43273:5;43266:12;;43209:75;;;:::o;43290:269::-;43400:39;43431:7;43400:39;:::i;:::-;43461:91;43510:41;43534:16;43510:41;:::i;:::-;43502:6;43495:4;43489:11;43461:91;:::i;:::-;43455:4;43448:105;43366:193;43290:269;;;:::o;43565:73::-;43610:3;43565:73;:::o;43644:189::-;43721:32;;:::i;:::-;43762:65;43820:6;43812;43806:4;43762:65;:::i;:::-;43697:136;43644:189;;:::o;43839:186::-;43899:120;43916:3;43909:5;43906:14;43899:120;;;43970:39;44007:1;44000:5;43970:39;:::i;:::-;43943:1;43936:5;43932:13;43923:22;;43899:120;;;43839:186;;:::o;44031:543::-;44132:2;44127:3;44124:11;44121:446;;;44166:38;44198:5;44166:38;:::i;:::-;44250:29;44268:10;44250:29;:::i;:::-;44240:8;44236:44;44433:2;44421:10;44418:18;44415:49;;;44454:8;44439:23;;44415:49;44477:80;44533:22;44551:3;44533:22;:::i;:::-;44523:8;44519:37;44506:11;44477:80;:::i;:::-;44136:431;;44121:446;44031:543;;;:::o;44580:117::-;44634:8;44684:5;44678:4;44674:16;44653:37;;44580:117;;;;:::o;44703:169::-;44747:6;44780:51;44828:1;44824:6;44816:5;44813:1;44809:13;44780:51;:::i;:::-;44776:56;44861:4;44855;44851:15;44841:25;;44754:118;44703:169;;;;:::o;44877:295::-;44953:4;45099:29;45124:3;45118:4;45099:29;:::i;:::-;45091:37;;45161:3;45158:1;45154:11;45148:4;45145:21;45137:29;;44877:295;;;;:::o;45177:1395::-;45294:37;45327:3;45294:37;:::i;:::-;45396:18;45388:6;45385:30;45382:56;;;45418:18;;:::i;:::-;45382:56;45462:38;45494:4;45488:11;45462:38;:::i;:::-;45547:67;45607:6;45599;45593:4;45547:67;:::i;:::-;45641:1;45665:4;45652:17;;45697:2;45689:6;45686:14;45714:1;45709:618;;;;46371:1;46388:6;46385:77;;;46437:9;46432:3;46428:19;46422:26;46413:35;;46385:77;46488:67;46548:6;46541:5;46488:67;:::i;:::-;46482:4;46475:81;46344:222;45679:887;;45709:618;45761:4;45757:9;45749:6;45745:22;45795:37;45827:4;45795:37;:::i;:::-;45854:1;45868:208;45882:7;45879:1;45876:14;45868:208;;;45961:9;45956:3;45952:19;45946:26;45938:6;45931:42;46012:1;46004:6;46000:14;45990:24;;46059:2;46048:9;46044:18;46031:31;;45905:4;45902:1;45898:12;45893:17;;45868:208;;;46104:6;46095:7;46092:19;46089:179;;;46162:9;46157:3;46153:19;46147:26;46205:48;46247:4;46239:6;46235:17;46224:9;46205:48;:::i;:::-;46197:6;46190:64;46112:156;46089:179;46314:1;46310;46302:6;46298:14;46294:22;46288:4;46281:36;45716:611;;;45679:887;;45269:1303;;;45177:1395;;:::o;46578:153::-;46718:5;46714:1;46706:6;46702:14;46695:29;46578:153;:::o;46737:365::-;46879:3;46900:66;46964:1;46959:3;46900:66;:::i;:::-;46893:73;;46975:93;47064:3;46975:93;:::i;:::-;47093:2;47088:3;47084:12;47077:19;;46737:365;;;:::o;47108:750::-;47358:4;47396:3;47385:9;47381:19;47373:27;;47410:71;47478:1;47467:9;47463:17;47454:6;47410:71;:::i;:::-;47528:9;47522:4;47518:20;47513:2;47502:9;47498:18;47491:48;47556:131;47682:4;47556:131;:::i;:::-;47548:139;;47697:72;47765:2;47754:9;47750:18;47741:6;47697:72;:::i;:::-;47779;47847:2;47836:9;47832:18;47823:6;47779:72;:::i;:::-;47108:750;;;;;;:::o;47864:76::-;47900:7;47929:5;47918:16;;47864:76;;;:::o;47946:372::-;47985:4;48005:19;48022:1;48005:19;:::i;:::-;48000:24;;48038:19;48055:1;48038:19;:::i;:::-;48033:24;;48081:1;48078;48074:9;48066:17;;48275:1;48269:4;48265:12;48261:1;48258;48254:9;48250:28;48233:1;48227:4;48223:12;48218:1;48215;48211:9;48204:17;48200:36;48184:104;48181:130;;;48291:18;;:::i;:::-;48181:130;47946:372;;;;:::o;48324:154::-;48464:6;48460:1;48452:6;48448:14;48441:30;48324:154;:::o;48484:365::-;48626:3;48647:66;48711:1;48706:3;48647:66;:::i;:::-;48640:73;;48722:93;48811:3;48722:93;:::i;:::-;48840:2;48835:3;48831:12;48824:19;;48484:365;;;:::o;48855:750::-;49105:4;49143:3;49132:9;49128:19;49120:27;;49157:71;49225:1;49214:9;49210:17;49201:6;49157:71;:::i;:::-;49275:9;49269:4;49265:20;49260:2;49249:9;49245:18;49238:48;49303:131;49429:4;49303:131;:::i;:::-;49295:139;;49444:72;49512:2;49501:9;49497:18;49488:6;49444:72;:::i;:::-;49526;49594:2;49583:9;49579:18;49570:6;49526:72;:::i;:::-;48855:750;;;;;;:::o;49611:348::-;49740:4;49778:2;49767:9;49763:18;49755:26;;49791:71;49859:1;49848:9;49844:17;49835:6;49791:71;:::i;:::-;49872:80;49948:2;49937:9;49933:18;49924:6;49872:80;:::i;:::-;49611:348;;;;;:::o;49965:194::-;50005:4;50025:20;50043:1;50025:20;:::i;:::-;50020:25;;50059:20;50077:1;50059:20;:::i;:::-;50054:25;;50103:1;50100;50096:9;50088:17;;50127:1;50121:4;50118:11;50115:37;;;50132:18;;:::i;:::-;50115:37;49965:194;;;;:::o;50165:831::-;50428:4;50466:3;50455:9;50451:19;50443:27;;50480:71;50548:1;50537:9;50533:17;50524:6;50480:71;:::i;:::-;50561:80;50637:2;50626:9;50622:18;50613:6;50561:80;:::i;:::-;50688:9;50682:4;50678:20;50673:2;50662:9;50658:18;50651:48;50716:108;50819:4;50810:6;50716:108;:::i;:::-;50708:116;;50834:72;50902:2;50891:9;50887:18;50878:6;50834:72;:::i;:::-;50916:73;50984:3;50973:9;50969:19;50960:6;50916:73;:::i;:::-;50165:831;;;;;;;;:::o;51002:180::-;51050:77;51047:1;51040:88;51147:4;51144:1;51137:15;51171:4;51168:1;51161:15;51188:185;51228:1;51245:20;51263:1;51245:20;:::i;:::-;51240:25;;51279:20;51297:1;51279:20;:::i;:::-;51274:25;;51318:1;51308:35;;51323:18;;:::i;:::-;51308:35;51365:1;51362;51358:9;51353:14;;51188:185;;;;:::o;51379:220::-;51519:34;51515:1;51507:6;51503:14;51496:58;51588:3;51583:2;51575:6;51571:15;51564:28;51379:220;:::o;51605:366::-;51747:3;51768:67;51832:2;51827:3;51768:67;:::i;:::-;51761:74;;51844:93;51933:3;51844:93;:::i;:::-;51962:2;51957:3;51953:12;51946:19;;51605:366;;;:::o;51977:419::-;52143:4;52181:2;52170:9;52166:18;52158:26;;52230:9;52224:4;52220:20;52216:1;52205:9;52201:17;52194:47;52258:131;52384:4;52258:131;:::i;:::-;52250:139;;51977:419;;;:::o;52402:147::-;52503:11;52540:3;52525:18;;52402:147;;;;:::o;52555:114::-;;:::o;52675:398::-;52834:3;52855:83;52936:1;52931:3;52855:83;:::i;:::-;52848:90;;52947:93;53036:3;52947:93;:::i;:::-;53065:1;53060:3;53056:11;53049:18;;52675:398;;;:::o;53079:379::-;53263:3;53285:147;53428:3;53285:147;:::i;:::-;53278:154;;53449:3;53442:10;;53079:379;;;:::o
Swarm Source
ipfs://b015f0b0d052b2a266a48a0eb239838dcd605253b696c5b60686a63457e72833
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.