Token migration announcement. SOLIDBLOCK token contract has migrated to a new address.
ERC-20
Artificial Intelligence
Overview
Max Total Supply
200,000,000,000 SOLID
Holders
441 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
543,800 SOLIDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SOLIDBLOCK
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-27 */ // //░██████╗░█████╗░██╗░░░░░██╗██████╗░██████╗░██╗░░░░░░█████╗░░█████╗░██╗░░██╗ //██╔════╝██╔══██╗██║░░░░░██║██╔══██╗██╔══██╗██║░░░░░██╔══██╗██╔══██╗██║░██╔╝ //╚█████╗░██║░░██║██║░░░░░██║██║░░██║██████╦╝██║░░░░░██║░░██║██║░░╚═╝█████═╝░ //░╚═══██╗██║░░██║██║░░░░░██║██║░░██║██╔══██╗██║░░░░░██║░░██║██║░░██╗██╔═██╗░ //██████╔╝╚█████╔╝███████╗██║██████╔╝██████╦╝███████╗╚█████╔╝╚█████╔╝██║░╚██╗ //╚═════╝░░╚════╝░╚══════╝╚═╝╚═════╝░╚═════╝░╚══════╝░╚════╝░░╚════╝░╚═╝░░╚═╝ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IERC20 { function totalSupply() external view returns(uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer (address indexed from, address indexed to, uint value); event Approval (address indexed owner, address indexed spender, uint value); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) internal { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addTreasuryETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint treasury); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } contract SOLIDBLOCK is IERC20, Ownable { mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isBot; mapping(address => bool) private _isPair; address[] private _excluded; bool private swapping; mapping(address => bool) private _operator; IRouter public router; address public pair; uint8 private constant _decimals = 18; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 200_000_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public swapTokensAtAmount = 10_000 * 10 ** 18; uint256 public maxTxAmount = 50_000_000_000 * 10**_decimals; uint256 public maxWalletAmount = 1_000_000_000 * 10**_decimals; // Anti Dump // mapping (address => uint256) public _lastTrade; bool public coolDownEnabled = true; uint256 public coolDownTime = 30 seconds; address public treasuryAddress = 0x15564669B5E6737785B0b36875fC7668Fe4CAc01; address public developmentAddress = 0xF8449D6a454469732aD0c7f83d8a018d967BF588 ; address constant burnAddress = 0x000000000000000000000000000000000000dEaD; address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; string private constant _name = "SOLIDBLOCK"; string private constant _symbol = "SOLID"; // Black List // mapping (address => bool) private _isBlocked; // Trading uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; bool public isTradingEnabled; mapping (address => bool) private _isAllowedToTradeWhenDisabled; struct Taxes { uint256 rfi; uint256 treasury; uint256 development; uint256 burn; } Taxes public taxes = Taxes(10,40,20,10); struct TotFeesPaidStruct { uint256 rfi; uint256 treasury; uint256 development; uint256 burn; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rTreasury; uint256 rDevelopment; uint256 rBurn; uint256 tTransferAmount; uint256 tRfi; uint256 tTreasury; uint256 tDevelopment; uint256 tBurn; } struct splitETHStruct{ uint256 treasury; uint256 development; } splitETHStruct private splitETH = splitETHStruct(40,10); struct ETHAmountStruct{ uint256 treasury; uint256 development; } ETHAmountStruct public ETHAmount; event OperatorTransferred(address indexed previousOperator, address indexed newOperator); event BlockedAccountChange(address indexed holder, bool indexed status); event FeesChanged(); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event TradingStatusChange(bool indexed newValue, bool indexed oldValue); event PresaleStatusChange(bool indexed newValue, bool indexed oldValue); modifier lockTheSwap { swapping = true; _; swapping = false; } modifier addressValidation(address _addr) { require(_addr != address(0), 'SOLIDBLOCK: Zero address'); _; } modifier onlyOperatorOrOwner() { require(_operator[msg.sender] || owner() == msg.sender, "Caller is not an operator"); //require(_operator == msg.sender || owner() == msg.sender, "operator: caller is not the operator or owner"); _; } constructor () { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WETH()); router = _router; pair = _pair; addPair(pair); excludeFromReward(pair); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[burnAddress] = true; _isExcludedFromFee[developmentAddress] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[_pair] = true; _isExcludedFromMaxTransactionLimit[address(_router)] = true; _isExcludedFromMaxWalletLimit[_pair] = true; _isExcludedFromMaxWalletLimit[address(_router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[burnAddress] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), 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(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); require(_excluded.length <= 200, "Invalid length"); require(account != owner(), "Owner cannot be excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function isOperator(address operator) public view returns (bool) { return _operator[operator]; } function _setOperator(address operator_, bool hasPermission) external onlyOwner { require(operator_ != address(0), "Invalid operator address"); _operator[operator_] = hasPermission; } function excludeFromFee(address account) public onlyOperatorOrOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOperatorOrOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner{ require(_isExcludedFromMaxTransactionLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; } function isExcludedFromMaxTransactionLimit(address account) public view returns(bool) { return _isExcludedFromMaxTransactionLimit[account]; } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner{ require(_isExcludedFromMaxWalletLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; } function isExcludedFromMaxWalletLimit(address account) public view returns(bool) { return _isExcludedFromMaxWalletLimit[account]; } function blockAccount(address account) external onlyOwner{ require(!_isBlocked[account], "SOLIDBLOCK: Account is already blocked"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner{ require(_isBlocked[account], "SOLIDBLOCK: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function activateTrading() external onlyOwner{ isTradingEnabled = true; if (_launchStartTimestamp == 0) { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; } emit TradingStatusChange(true, false); } function deactivateTrading() external onlyOwner{ isTradingEnabled = false; emit TradingStatusChange(false, true); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner{ _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function addPair(address _pair) public onlyOwner { _isPair[_pair] = true; } function removePair(address _pair) public onlyOwner { _isPair[_pair] = false; } function isPair(address account) public view returns(bool){ return _isPair[account]; } function setTaxes(uint256 _rfi, uint256 _treasury, uint256 _development, uint256 __burn) public { taxes.rfi = _rfi; taxes.treasury = _treasury; taxes.development = _development; taxes.burn = __burn; emit FeesChanged(); } function setSplitETH(uint256 _treasury, uint256 _development) public { splitETH.treasury = _treasury; splitETH.development = _development; emit FeesChanged(); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi += tRfi; } function _takeTreasury(uint256 rTreasury, uint256 tTreasury) private { totFeesPaid.treasury += tTreasury; if(_isExcluded[treasuryAddress]) _tOwned[treasuryAddress] += tTreasury; _rOwned[treasuryAddress] +=rTreasury; } function _takeDevelopment(uint256 rDevelopment, uint256 tDevelopment) private{ totFeesPaid.development += tDevelopment; if(_isExcluded[developmentAddress]) _tOwned[developmentAddress] += tDevelopment; _rOwned[developmentAddress] += rDevelopment; } function _takeBurn(uint256 rBurn, uint256 tBurn) private { totFeesPaid.burn += tBurn; if(_isExcluded[developmentAddress])_tOwned[burnAddress] += tBurn; _rOwned[burnAddress] += rBurn; } function _getValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTreasury,to_return.rDevelopment, to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory s) { if(takeFee == 0) { s.tTransferAmount = tAmount; return s; } else if(takeFee == 1){ s.tRfi = (tAmount*taxes.rfi)/1000; s.tTreasury = (tAmount*taxes.treasury)/1000; s.tDevelopment = tAmount*taxes.development/1000; s.tBurn = tAmount*taxes.burn/1000; ETHAmount.treasury += s.tTreasury*splitETH.treasury/taxes.treasury; ETHAmount.development += s.tTreasury*splitETH.development/taxes.treasury; s.tTransferAmount = tAmount-s.tRfi-s.tDevelopment-s.tTreasury-s.tBurn; return s; } else { s.tRfi = tAmount*taxes.rfi/1000; s.tBurn = tAmount*taxes.burn/1000; s.tTreasury = tAmount*splitETH.development/1000; ETHAmount.development += s.tTreasury; s.tTransferAmount = tAmount-s.tRfi-s.tTreasury-s.tBurn; return s; } } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, uint8 takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rTreasury,uint256 rDevelopment,uint256 rBurn) { rAmount = tAmount*currentRate; if(takeFee == 0) { return(rAmount, rAmount, 0,0,0,0); }else if(takeFee == 1){ rRfi = s.tRfi*currentRate; rTreasury = s.tTreasury*currentRate; rDevelopment = s.tDevelopment*currentRate; rBurn = s.tBurn*currentRate; rTransferAmount = rAmount-rRfi-rTreasury-rDevelopment-rBurn; return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn); } else{ rRfi = s.tRfi*currentRate; rDevelopment = s.tDevelopment*currentRate; rBurn = s.tBurn*currentRate; rTransferAmount = rAmount-rRfi-rTreasury-rDevelopment-rBurn; return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn); } } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } 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 _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Zero amount"); require(amount <= balanceOf(from),"Insufficient balance"); require(!_isBot[from] && !_isBot[to], "You are a bot"); if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "SOLIDBLOCK: Trading is currently disabled."); require(!_isBlocked[to], "SOLIDBLOCK: Account is blocked"); require(!_isBlocked[from], "SOLIDBLOCK: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "SOLIDBLOCK: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "SOLIDBLOCK: Expected wallet amount exceeds the maxWalletAmount."); } } if (coolDownEnabled) { uint256 timePassed = block.timestamp - _lastTrade[from]; require(timePassed > coolDownTime, "You must wait coolDownTime"); } if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping) {//check this !swapping if(_isPair[from] || _isPair[to]) { _tokenTransfer(from, to, amount, 1); } else { _tokenTransfer(from, to, amount, 2); } } else { _tokenTransfer(from, to, amount, 0); } _lastTrade[from] = block.timestamp; if(!swapping && from != pair && to != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ address[] memory path = new address[](3); path[0] = address(this); path[1] = router.WETH(); path[2] = USDT; uint _amount = router.getAmountsOut(balanceOf(address(this)), path)[2]; if(_amount >= swapTokensAtAmount) swapTokensForETH(balanceOf(address(this))); } } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, uint8 takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender] ) { //from excluded _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcluded[recipient]) { //to excluded _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount; } _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi); if(s.rTreasury > 0 || s.tTreasury > 0){ _takeTreasury(s.rTreasury, s.tTreasury); emit Transfer(sender, treasuryAddress, s.tTreasury); } if(s.rDevelopment > 0 || s.tDevelopment > 0){ _takeDevelopment(s.rDevelopment, s.tDevelopment); emit Transfer(sender, developmentAddress, s.tDevelopment); } if(s.rBurn > 0 || s.tBurn > 0){ _takeBurn(s.rBurn, s.tBurn); emit Transfer(sender, burnAddress, s.tBurn); } emit Transfer(sender, recipient, s.tTransferAmount); } function swapTokensForETH(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); (bool success, ) = treasuryAddress.call{value: (ETHAmount.treasury * address(this).balance)/tokenAmount}(""); require(success, 'ETH_TRANSFER_FAILED'); ETHAmount.treasury = 0; (success, ) = developmentAddress.call{value: (ETHAmount.development * address(this).balance)/tokenAmount}(""); require(success, 'ETH_TRANSFER_FAILED'); ETHAmount.development = 0; } function updateTreasuryWallet(address newWallet) external onlyOwner addressValidation(newWallet) { require(treasuryAddress != newWallet, 'SOLIDBLOCK: Wallet already set'); treasuryAddress = newWallet; _isExcludedFromFee[treasuryAddress]; } function updateDevelopmentWallet(address newWallet) external onlyOwner addressValidation(newWallet) { require(developmentAddress != newWallet, 'SOLIDBLOCK: Wallet already set'); developmentAddress = newWallet; _isExcludedFromFee[developmentAddress]; } function updateStableCoin(address _usdt) external onlyOwner addressValidation(_usdt) { require(USDT != _usdt, 'SOLIDBLOCK: Wallet already set'); USDT = _usdt; } function updateMaxTxAmt(uint256 amount) external onlyOwner{ require(amount >= 100); maxTxAmount = amount * 10**_decimals; } function updateMaxWalletAmt(uint256 amount) external onlyOwner{ require(amount >= 100); maxWalletAmount = amount * 10**_decimals; } function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{ require(amount > 0); swapTokensAtAmount = amount * 10**6; } function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOperatorOrOwner{ coolDownEnabled = _enabled; coolDownTime = _timeInSeconds * 1 seconds; } function setAntibot(address account, bool state) external onlyOwner{ require(_isBot[account] != state, 'SOLIDBLOCK: Value already set'); _isBot[account] = state; } function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner { require(accounts.length <= 100, "SOLIDBLOCK: Invalid"); for(uint256 i = 0; i < accounts.length; i++){ _isBot[accounts[i]] = state; } } function updateRouterAndPair(address newRouter, address newPair) external onlyOwner { router = IRouter(newRouter); pair = newPair; addPair(pair); } function updateRouterWithoutPair(address newRouter) external onlyOwner { require(newRouter != address(0), "Invalid router address"); router = IRouter(newRouter); address newPair = IFactory(router.factory()).createPair(address(this), router.WETH()); require(newPair != address(0), "Failed to create new pair"); pair = newPair; addPair(pair); } function isBot(address account) public view returns(bool){ return _isBot[account]; } function airdropTokens(address[] memory recipients, uint256[] memory amounts) external onlyOwner { require(recipients.length == amounts.length,"Invalid size"); address sender = msg.sender; for(uint256 i; i<recipients.length; i++){ address recipient = recipients[i]; uint256 rAmount = amounts[i]*_getRate(); _rOwned[sender] = _rOwned[sender]- rAmount; _rOwned[recipient] = _rOwned[recipient] + rAmount; emit Transfer(sender, recipient, amounts[i]); } } //Use this in case ETH are sent to the contract by mistake function rescueETH(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) // Owner cannot transfer out catecoin from this smart contract function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"PresaleStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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":"ETHAmount","outputs":[{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"hasPermission","type":"bool"}],"name":"_setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","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":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isExcludedFromMaxTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"}],"name":"setSplitETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"__burn","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouterWithoutPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"updateStableCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126012600a62000bd5565b6200002390642e90edd00062000c96565b600f819055620000369060001962000cf0565b620000449060001962000cb8565b60105569021e19e0c9bab2400000601155620000636012600a62000bd5565b6200007490640ba43b740062000c96565b6012556012600a62000087919062000bd5565b6200009790633b9aca0062000c96565b6013556015805460ff19166001179055601e601655601780546001600160a01b03199081167315564669b5e6737785b0b36875fc7668fe4cac011790915560188054821673f8449d6a454469732ad0c7f83d8a018d967bf5881790556019805490911673dac17f958d2ee523a2206206994597c13d831ec717905560408051608081018252600a8082526028602080840182905260148486018190526060909401839052601f8390558181556021939093556022829055835180850190945280845292909101819052602782905590553480156200017457600080fd5b506200018033620005df565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d557600080fd5b505afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000210919062000b4c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000294919062000b4c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002dd57600080fd5b505af1158015620002f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000318919062000b4c565b600d80546001600160a01b038086166001600160a01b031992831617909255600e8054928416929091168217905590915062000354906200062f565b600e546200036b906001600160a01b0316620006a2565b60105460016000620003856000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003bf620008c160201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252600485528382208054871660019081179091556017548416835284832080548816821790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054881682179055601854909316825283822080548716841790558152600593849052918220805490941681179093556200047a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821680825260058552838220805487166001908117909155928816808352848320805488168517905590825260069485905283822080548716841790558152828120805486168317905530815291822080549094168117909355620005166000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052600690527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549091166001179055620005876000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620005cf91815260200190565b60405180910390a3505062000d33565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200067e5760405162461bcd60e51b815260206004820181905260248201526000805160206200543483398151915260448201526064015b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314620006ed5760405162461bcd60e51b8152602060048201819052602482015260008051602062005434833981519152604482015260640162000675565b6001600160a01b03811660009081526007602052604090205460ff1615620007585760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000675565b600a5460c810156200079e5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015260640162000675565b6000546001600160a01b0382811691161415620007fe5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c756465640000000000000000604482015260640162000675565b6001600160a01b038116600090815260016020526040902054156200085b576001600160a01b0381166000908152600160205260409020546200084190620008d0565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031690565b6000601054821115620009395760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000675565b6000620009456200095a565b905062000953818462000b75565b9392505050565b600080806200096862000980565b909250905062000979818362000b75565b9250505090565b601054600f546000918291825b600a5481101562000b18578260016000600a8481548110620009bf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a3a57508160026000600a848154811062000a1357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a5157601054600f54945094505050509091565b60016000600a838154811062000a7757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000aa8908462000cb8565b925060026000600a838154811062000ad057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b01908362000cb8565b91508062000b0f8162000cd2565b9150506200098d565b50600f5460105462000b2b919062000b75565b82101562000b4357601054600f549350935050509091565b90939092509050565b60006020828403121562000b5e578081fd5b81516001600160a01b038116811462000953578182fd5b60008262000b875762000b8762000d1d565b500490565b600181815b8085111562000bcd57816000190482111562000bb15762000bb162000d07565b8085161562000bbf57918102915b93841c939080029062000b91565b509250929050565b60006200095360ff84168360008262000bf15750600162000c90565b8162000c005750600062000c90565b816001811462000c19576002811462000c245762000c44565b600191505062000c90565b60ff84111562000c385762000c3862000d07565b50506001821b62000c90565b5060208310610133831016604e8410600b841016171562000c69575081810a62000c90565b62000c75838362000b8c565b806000190482111562000c8c5762000c8c62000d07565b0290505b92915050565b600081600019048311821515161562000cb35762000cb362000d07565b500290565b60008282101562000ccd5762000ccd62000d07565b500390565b600060001982141562000ce95762000ce962000d07565b5060010190565b60008262000d025762000d0262000d1d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6146f18062000d436000396000f3fe6080604052600436106103e85760003560e01c806388f8202011610208578063c2b7bbb611610118578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610ccf578063ee36e35914610cef578063f023f57314610d09578063f2fde38b14610d29578063f887ea4014610d4957600080fd5b8063e0baeb2914610c40578063e116554514610c60578063e2f4560514610c80578063e5e31b1314610c9657600080fd5b8063d2ce0db2116100e7578063d2ce0db214610ba4578063d322157614610bba578063dd62ed3e14610bda578063e006eadf14610c2057600080fd5b8063c2b7bbb614610b24578063c54e44eb14610b44578063c5f956af14610b64578063d257b34f14610b8457600080fd5b8063a457c2d71161019b578063a9059cbb1161016a578063a9059cbb14610a75578063aa4bde2814610a95578063af6c9c1d14610aab578063b31470a414610acb578063b6d5f14414610aeb57600080fd5b8063a457c2d7146109cf578063a87859f6146109ef578063a8a69b9d14610a1c578063a8aa1b3114610a5557600080fd5b806395d89b41116101d757806395d89b411461093e5780639ba5e4d51461096c5780639e252f001461098f578063a12a7d61146109af57600080fd5b806388f82020146108b15780638c0ae3df146108ea5780638c0b5e221461090a5780638da5cb5b1461092057600080fd5b80634d78fdc611610303578063706f693711610296578063728f8eea11610265578063728f8eea146107ee578063781edb3c146108315780637c0a893d14610851578063809d458d14610871578063880bcbc11461089157600080fd5b8063706f69371461076957806370a0823114610789578063715018a6146107a95780637286ec32146107be57600080fd5b8063638b1b14116102d2578063638b1b14146106b8578063657f644b146106f057806365b36ce2146107105780636d70f7ae1461073057600080fd5b80634d78fdc61461061f5780634e2b57801461063f57806352390c021461065f5780635342acb41461067f57600080fd5b80632e092fe81161037b578063395093511161034a57806339509351146105865780633bbac579146105a657806340b28c2f146105df578063437823ec146105ff57600080fd5b80632e092fe814610515578063313ce5671461053557806334cf1fea146105515780633685d4191461056657600080fd5b80630d65df9b116103b75780630d65df9b1461049657806318160ddd146104b657806323b872dd146104d55780632d838119146104f557600080fd5b8063064a59d0146103f457806306fdde0314610423578063095ea7b31461045f5780630bd05b691461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50601d5461040e9060ff1681565b60405190151581526020015b60405180910390f35b34801561042f57600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161041a91906142a0565b34801561046b57600080fd5b5061040e61047a366004613ffb565b610d69565b34801561048b57600080fd5b50610494610d80565b005b3480156104a257600080fd5b506104946104b1366004613f8e565b610e00565b3480156104c257600080fd5b50600f545b60405190815260200161041a565b3480156104e157600080fd5b5061040e6104f0366004613f8e565b610eb2565b34801561050157600080fd5b506104c76105103660046141f3565b610f61565b34801561052157600080fd5b506104946105303660046141f3565b610fe5565b34801561054157600080fd5b506040516012815260200161041a565b34801561055d57600080fd5b50610494611039565b34801561057257600080fd5b50610494610581366004613f1e565b61109d565b34801561059257600080fd5b5061040e6105a1366004613ffb565b61128c565b3480156105b257600080fd5b5061040e6105c1366004613f1e565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156105eb57600080fd5b506104946105fa366004613f56565b6112c3565b34801561060b57600080fd5b5061049461061a366004613f1e565b611324565b34801561062b57600080fd5b5061049461063a366004613f1e565b61139b565b34801561064b57600080fd5b5061049461065a36600461420b565b611485565b34801561066b57600080fd5b5061049461067a366004613f1e565b6114bc565b34801561068b57600080fd5b5061040e61069a366004613f1e565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106c457600080fd5b506018546106d8906001600160a01b031681565b6040516001600160a01b03909116815260200161041a565b3480156106fc57600080fd5b5061049461070b3660046141f3565b6116b1565b34801561071c57600080fd5b5061049461072b366004613fce565b611705565b34801561073c57600080fd5b5061040e61074b366004613f1e565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561077557600080fd5b50610494610784366004614026565b6117b0565b34801561079557600080fd5b506104c76107a4366004613f1e565b61196d565b3480156107b557600080fd5b506104946119cc565b3480156107ca57600080fd5b50602954602a546107d9919082565b6040805192835260208301919091520161041a565b3480156107fa57600080fd5b50601f546020546021546022546108119392919084565b60408051948552602085019390935291830152606082015260800161041a565b34801561083d57600080fd5b5061049461084c366004613fce565b611a02565b34801561085d57600080fd5b5061049461086c366004613f1e565b611a96565b34801561087d57600080fd5b5061049461088c366004613f1e565b611b8a565b34801561089d57600080fd5b506104946108ac366004613fce565b611c33565b3480156108bd57600080fd5b5061040e6108cc366004613f1e565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f657600080fd5b506104946109053660046141d6565b611cc7565b34801561091657600080fd5b506104c760125481565b34801561092c57600080fd5b506000546001600160a01b03166106d8565b34801561094a57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610452565b34801561097857600080fd5b506023546024546025546026546108119392919084565b34801561099b57600080fd5b506104946109aa3660046141f3565b611d3a565b3480156109bb57600080fd5b506104946109ca36600461422c565b611ded565b3480156109db57600080fd5b5061040e6109ea366004613ffb565b611e30565b3480156109fb57600080fd5b506104c7610a0a366004613f1e565b60146020526000908152604090205481565b348015610a2857600080fd5b5061040e610a37366004613f1e565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610a6157600080fd5b50600e546106d8906001600160a01b031681565b348015610a8157600080fd5b5061040e610a90366004613ffb565b611ecb565b348015610aa157600080fd5b506104c760135481565b348015610ab757600080fd5b50610494610ac6366004613f1e565b611ed8565b348015610ad757600080fd5b50610494610ae63660046140e2565b611f23565b348015610af757600080fd5b5061040e610b06366004613f1e565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b3057600080fd5b50610494610b3f366004613f1e565b61200f565b348015610b5057600080fd5b506019546106d8906001600160a01b031681565b348015610b7057600080fd5b506017546106d8906001600160a01b031681565b348015610b9057600080fd5b50610494610b9f3660046141f3565b61205d565b348015610bb057600080fd5b506104c760165481565b348015610bc657600080fd5b50610494610bd5366004613fce565b6120a7565b348015610be657600080fd5b506104c7610bf5366004613f56565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c2c57600080fd5b50610494610c3b366004613f1e565b612130565b348015610c4c57600080fd5b50610494610c5b366004613f1e565b6123cc565b348015610c6c57600080fd5b50610494610c7b366004613fce565b61246e565b348015610c8c57600080fd5b506104c760115481565b348015610ca257600080fd5b5061040e610cb1366004613f1e565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cdb57600080fd5b50610494610cea366004613f1e565b612532565b348015610cfb57600080fd5b5060155461040e9060ff1681565b348015610d1557600080fd5b50610494610d24366004613f1e565b6125a6565b348015610d3557600080fd5b50610494610d44366004613f1e565b61264f565b348015610d5557600080fd5b50600d546106d8906001600160a01b031681565b6000610d763384846126ea565b5060015b92915050565b6000546001600160a01b03163314610db35760405162461bcd60e51b8152600401610daa9061432a565b60405180910390fd5b601d805460ff19166001179055601b54610dd05742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610daa9061432a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906141ba565b50505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205482811015610f375760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610daa565b610f4285858561280e565b610f568533610f51868561461a565b6126ea565b506001949350505050565b6000601054821115610fc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610daa565b6000610fd26130c3565b9050610fde81846144ed565b9392505050565b6000546001600160a01b0316331461100f5760405162461bcd60e51b8152600401610daa9061432a565b606481101561101d57600080fd5b6110296012600a614550565b61103390826145fb565b60125550565b6000546001600160a01b031633146110635760405162461bcd60e51b8152600401610daa9061432a565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146110c75760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03811660009081526007602052604090205460ff1661112f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610daa565b60005b600a5481101561128857816001600160a01b0316600a828154811061116757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561127657600a80546111929060019061461a565b815481106111b057634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106111ea57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061125057634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061128081614631565b915050611132565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610d76918590610f519086906144d5565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610daa9061432a565b600d80546001600160a01b038085166001600160a01b031992831617909255600e805492841692909116821790556112889061200f565b336000908152600c602052604090205460ff168061135b5750336113506000546001600160a01b031690565b6001600160a01b0316145b6113775760405162461bcd60e51b8152600401610daa9061435f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146113c55760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166000908152601a602052604090205460ff166114385760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610daa565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b602782905560288190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146114e65760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03811660009081526007602052604090205460ff161561154f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610daa565b600a5460c810156115935760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610daa565b6000546001600160a01b03828116911614156115f15760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610daa565b6001600160a01b0381166000908152600160205260409020541561164b576001600160a01b03811660009081526001602052604090205461163190610f61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610daa9061432a565b60648110156116e957600080fd5b6116f56012600a614550565b6116ff90826145fb565b60135550565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0382166117855760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610daa565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117da5760405162461bcd60e51b8152600401610daa9061432a565b805182511461181a5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610daa565b3360005b8351811015610eac57600084828151811061184957634e487b7160e01b600052603260045260246000fd5b60200260200101519050600061185d6130c3565b85848151811061187d57634e487b7160e01b600052603260045260246000fd5b602002602001015161188f91906145fb565b6001600160a01b0385166000908152600160205260409020549091506118b690829061461a565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546118e69082906144d5565b6001600160a01b0380841660008181526001602052604090209290925586519086169060008051602061469c8339815191529088908790811061193957634e487b7160e01b600052603260045260246000fd5b602002602001015160405161195091815260200190565b60405180910390a35050808061196590614631565b91505061181e565b6001600160a01b03811660009081526007602052604081205460ff16156119aa57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d7a90610f61565b6000546001600160a01b031633146119f65760405162461bcd60e51b8152600401610daa9061432a565b611a0060006130e6565b565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611a6b5760405162461bcd60e51b8152600401610daa906143cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ac05760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166000908152601a602052604090205460ff1615611b385760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610daa565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611bb45760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b038116611bdb5760405162461bcd60e51b8152600401610daa90614396565b6017546001600160a01b0383811691161415611c095760405162461bcd60e51b8152600401610daa906142f3565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611c5d5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611c9c5760405162461bcd60e51b8152600401610daa906143cd565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611cfe575033611cf36000546001600160a01b031690565b6001600160a01b0316145b611d1a5760405162461bcd60e51b8152600401610daa9061435f565b6015805460ff1916831515179055611d338160016145fb565b6016555050565b6000546001600160a01b03163314611d645760405162461bcd60e51b8152600401610daa9061432a565b80471015611db45760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610daa565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611288573d6000803e3d6000fd5b601f8490556020839055602182905560228190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611eb25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610daa565b611ec13385610f51868561461a565b5060019392505050565b6000610d7633848461280e565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611f4d5760405162461bcd60e51b8152600401610daa9061432a565b606482511115611f955760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610daa565b60005b825181101561200a578160086000858481518110611fc657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061200281614631565b915050611f98565b505050565b6000546001600160a01b031633146120395760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146120875760405162461bcd60e51b8152600401610daa9061432a565b6000811161209457600080fd5b6120a181620f42406145fb565b60115550565b6000546001600160a01b031633146120d15760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166121a95760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610daa565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561220057600080fd5b505afa158015612214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122389190613f3a565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561229557600080fd5b505afa1580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561231557600080fd5b505af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613f3a565b90506001600160a01b0381166123a55760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610daa565b600e80546001600160a01b0319166001600160a01b0383169081179091556112889061200f565b6000546001600160a01b031633146123f65760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b03811661241d5760405162461bcd60e51b8152600401610daa90614396565b6019546001600160a01b038381169116141561244b5760405162461bcd60e51b8152600401610daa906142f3565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124985760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156125075760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610daa565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff168061256957503361255e6000546001600160a01b031690565b6001600160a01b0316145b6125855760405162461bcd60e51b8152600401610daa9061435f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146125d05760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b0381166125f75760405162461bcd60e51b8152600401610daa90614396565b6018546001600160a01b03838116911614156126255760405162461bcd60e51b8152600401610daa906142f3565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146126795760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166126de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610daa565b6126e7816130e6565b50565b6001600160a01b03831661274c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610daa565b6001600160a01b0382166127ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610daa565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166128725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610daa565b6001600160a01b0382166128d45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610daa565b600081116129125760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610daa565b61291b8361196d565b8111156129615760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610daa565b6001600160a01b03831660009081526008602052604090205460ff161580156129a357506001600160a01b03821660009081526008602052604090205460ff16155b6129df5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610daa565b6001600160a01b0383166000908152601e602052604090205460ff16158015612a2157506001600160a01b0382166000908152601e602052604090205460ff16155b15612cbc57601d5460ff16612a8b5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610daa565b6001600160a01b0382166000908152601a602052604090205460ff1615612af45760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610daa565b6001600160a01b0383166000908152601a602052604090205460ff1615612b5d5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610daa565b6001600160a01b03821660009081526005602052604090205460ff16158015612b9f57506001600160a01b03831660009081526005602052604090205460ff16155b15612c1157601254811115612c115760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610daa565b6001600160a01b03821660009081526006602052604090205460ff16612cbc5760135481612c3e8461196d565b612c4891906144d5565b1115612cbc5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610daa565b60155460ff1615612d3f576001600160a01b038316600090815260146020526040812054612cea904261461a565b90506016548111612d3d5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610daa565b505b6001600160a01b03831660009081526004602052604090205460ff16158015612d8157506001600160a01b03821660009081526004602052604090205460ff16155b8015612d905750600b5460ff16155b15612df8576001600160a01b03831660009081526009602052604090205460ff1680612dd457506001600160a01b03821660009081526009602052604090205460ff165b15612deb57612de68383836001613136565b612e05565b612de68383836002613136565b612e058383836000613136565b6001600160a01b0383166000908152601460205260409020429055600b5460ff16158015612e415750600e546001600160a01b03848116911614155b8015612e5b5750600e546001600160a01b03838116911614155b8015612e8057506001600160a01b03831660009081526004602052604090205460ff16155b8015612ea557506001600160a01b03821660009081526004602052604090205460ff16155b1561200a5760408051600380825260808201909252600091602082016060803683370190505090503081600081518110612eef57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f4357600080fd5b505afa158015612f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7b9190613f3a565b81600181518110612f9c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954825191169082906002908110612fdb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f6130063061196d565b846040518363ffffffff1660e01b8152600401613024929190614423565b60006040518083038186803b15801561303c57600080fd5b505afa158015613050573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130789190810190614127565b60028151811061309857634e487b7160e01b600052603260045260246000fd5b6020026020010151905060115481106130bc576130bc6130b73061196d565b613439565b5050505050565b60008060006130d0613747565b90925090506130df81836144ed565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006131428383613902565b6001600160a01b03861660009081526007602052604090205490915060ff16156131a4576001600160a01b03851660009081526002602052604090205461318a90849061461a565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156132075760c08101516001600160a01b0385166000908152600260205260409020546131ed91906144d5565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b03861660009081526001602052604090205461322c919061461a565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461326391906144d5565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613295575060008160e00151115b156132ac576132ac81604001518260e0015161394a565b6000816060015111806132c457506000816101000151115b15613316576132dc816060015182610100015161397f565b6017546101008201516040519081526001600160a01b039182169187169060008051602061469c8339815191529060200160405180910390a35b60008160800151118061332e57506000816101200151115b15613380576133468160800151826101200151613a16565b6018546101208201516040519081526001600160a01b039182169187169060008051602061469c8339815191529060200160405180910390a35b60008160a00151118061339857506000816101400151115b156133f3576133b08160a00151826101400151613aad565b61dead6001600160a01b0316856001600160a01b031660008051602061469c8339815191528361014001516040516133ea91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b031660008051602061469c8339815191528360c0015160405161342a91815260200190565b60405180910390a35050505050565b600b805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061348957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156134dd57600080fd5b505afa1580156134f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135159190613f3a565b8160018151811061353657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461355c91309116846126ea565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613595908590600090869030904290600401614444565b600060405180830381600087803b1580156135af57600080fd5b505af11580156135c3573d6000803e3d6000fd5b5050601754602954600093506001600160a01b03909116915084906135e99047906145fb565b6135f391906144ed565b604051600081818185875af1925050503d806000811461362f576040519150601f19603f3d011682016040523d82523d6000602084013e613634565b606091505b505090508061367b5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610daa565b6000602955601854602a546001600160a01b0390911690849061369f9047906145fb565b6136a991906144ed565b604051600081818185875af1925050503d80600081146136e5576040519150601f19603f3d011682016040523d82523d6000602084013e6136ea565b606091505b505080915050806137335760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610daa565b50506000602a5550600b805460ff19169055565b601054600f546000918291825b600a548110156138d1578260016000600a848154811061378457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137fd57508160026000600a84815481106137d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561381357601054600f54945094505050509091565b60016000600a838154811061383857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613867908461461a565b925060026000600a838154811061388e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546138bd908361461a565b9150806138c981614631565b915050613754565b50600f546010546138e291906144ed565b8210156138f957601054600f549350935050509091565b90939092509050565b61390a613e4c565b6139148383613b6c565b90506139298184846139246130c3565b613d64565b60a08701526080860152606085015260408401526020830152815292915050565b816010600082825461395c919061461a565b9091555050602380548291906000906139769084906144d5565b90915550505050565b806023600101600082825461399491906144d5565b90915550506017546001600160a01b031660009081526007602052604090205460ff16156139ec576017546001600160a01b0316600090815260026020526040812080548392906139e69084906144d5565b90915550505b6017546001600160a01b0316600090815260016020526040812080548492906139769084906144d5565b8060236002016000828254613a2b91906144d5565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613a83576018546001600160a01b031660009081526002602052604081208054839290613a7d9084906144d5565b90915550505b6018546001600160a01b0316600090815260016020526040812080548492906139769084906144d5565b8060236003016000828254613ac291906144d5565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613b2e5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613b289084906144d5565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80548492906139769084906144d5565b613b74613e4c565b60ff8216613b885760c08101839052610d7a565b8160ff1660011415613cce57601f546103e890613ba590856145fb565b613baf91906144ed565b60e08201526020546103e890613bc590856145fb565b613bcf91906144ed565b6101008201526021546103e890613be690856145fb565b613bf091906144ed565b6101208201526022546103e890613c0790856145fb565b613c1191906144ed565b610140820152602054602754610100830151613c2d91906145fb565b613c3791906144ed565b60298054600090613c499084906144d5565b9091555050602054602854610100830151613c6491906145fb565b613c6e91906144ed565b602a8054600090613c809084906144d5565b909155505061014081015161010082015161012083015160e0840151613ca6908761461a565b613cb0919061461a565b613cba919061461a565b613cc4919061461a565b60c0820152610d7a565b601f546103e890613cdf90856145fb565b613ce991906144ed565b60e08201526022546103e890613cff90856145fb565b613d0991906144ed565b6101408201526028546103e890613d2090856145fb565b613d2a91906144ed565b6101008201819052602a8054600090613d449084906144d5565b909155505061014081015161010082015160e0830151613cb0908661461a565b60008080808080613d75878a6145fb565b955060ff8816613d9357508493506000925082915081905080613e3f565b8760ff1660011415613e1c57868a60e00151613daf91906145fb565b9350868a6101000151613dc291906145fb565b9250868a6101200151613dd591906145fb565b9150868a6101400151613de891906145fb565b9050808284613df7878a61461a565b613e01919061461a565b613e0b919061461a565b613e15919061461a565b9450613e3f565b868a60e00151613e2c91906145fb565b9350868a6101200151613dd591906145fb565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112613eb6578081fd5b81356020613ecb613ec6836144b1565b614480565b80838252828201915082860187848660051b8901011115613eea578586fd5b855b85811015613f11578135613eff81614678565b84529284019290840190600101613eec565b5090979650505050505050565b600060208284031215613f2f578081fd5b8135610fde81614678565b600060208284031215613f4b578081fd5b8151610fde81614678565b60008060408385031215613f68578081fd5b8235613f7381614678565b91506020830135613f8381614678565b809150509250929050565b600080600060608486031215613fa2578081fd5b8335613fad81614678565b92506020840135613fbd81614678565b929592945050506040919091013590565b60008060408385031215613fe0578182fd5b8235613feb81614678565b91506020830135613f838161468d565b6000806040838503121561400d578182fd5b823561401881614678565b946020939093013593505050565b60008060408385031215614038578182fd5b823567ffffffffffffffff8082111561404f578384fd5b61405b86838701613ea6565b9350602091508185013581811115614071578384fd5b85019050601f81018613614083578283fd5b8035614091613ec6826144b1565b80828252848201915084840189868560051b87010111156140b0578687fd5b8694505b838510156140d25780358352600194909401939185019185016140b4565b5080955050505050509250929050565b600080604083850312156140f4578182fd5b823567ffffffffffffffff81111561410a578283fd5b61411685828601613ea6565b9250506020830135613f838161468d565b60006020808385031215614139578182fd5b825167ffffffffffffffff81111561414f578283fd5b8301601f8101851361415f578283fd5b805161416d613ec6826144b1565b80828252848201915084840188868560051b870101111561418c578687fd5b8694505b838510156141ae578051835260019490940193918501918501614190565b50979650505050505050565b6000602082840312156141cb578081fd5b8151610fde8161468d565b600080604083850312156141e8578182fd5b82356140188161468d565b600060208284031215614204578081fd5b5035919050565b6000806040838503121561421d578182fd5b50508035926020909101359150565b60008060008060808587031215614241578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b838110156142955781516001600160a01b031687529582019590820190600101614270565b509495945050505050565b6000602080835283518082850152825b818110156142cc578581018301518582016040015282016142b0565b818111156142dd5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b82815260406020820152600061443c604083018461425d565b949350505050565b85815284602082015260a06040820152600061446360a083018661425d565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156144a9576144a9614662565b604052919050565b600067ffffffffffffffff8211156144cb576144cb614662565b5060051b60200190565b600082198211156144e8576144e861464c565b500190565b60008261450857634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561454857816000190482111561452e5761452e61464c565b8085161561453b57918102915b93841c9390800290614512565b509250929050565b6000610fde60ff84168360008261456957506001610d7a565b8161457657506000610d7a565b816001811461458c5760028114614596576145b2565b6001915050610d7a565b60ff8411156145a7576145a761464c565b50506001821b610d7a565b5060208310610133831016604e8410600b84101617156145d5575081810a610d7a565b6145df838361450d565b80600019048211156145f3576145f361464c565b029392505050565b60008160001904831182151516156146155761461561464c565b500290565b60008282101561462c5761462c61464c565b500390565b60006000198214156146455761464561464c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126e757600080fd5b80151581146126e757600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122024bf9e8090d106fad8e138db4c80727c012f5a6ed894fc5c648cfd994cf5604564736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103e85760003560e01c806388f8202011610208578063c2b7bbb611610118578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610ccf578063ee36e35914610cef578063f023f57314610d09578063f2fde38b14610d29578063f887ea4014610d4957600080fd5b8063e0baeb2914610c40578063e116554514610c60578063e2f4560514610c80578063e5e31b1314610c9657600080fd5b8063d2ce0db2116100e7578063d2ce0db214610ba4578063d322157614610bba578063dd62ed3e14610bda578063e006eadf14610c2057600080fd5b8063c2b7bbb614610b24578063c54e44eb14610b44578063c5f956af14610b64578063d257b34f14610b8457600080fd5b8063a457c2d71161019b578063a9059cbb1161016a578063a9059cbb14610a75578063aa4bde2814610a95578063af6c9c1d14610aab578063b31470a414610acb578063b6d5f14414610aeb57600080fd5b8063a457c2d7146109cf578063a87859f6146109ef578063a8a69b9d14610a1c578063a8aa1b3114610a5557600080fd5b806395d89b41116101d757806395d89b411461093e5780639ba5e4d51461096c5780639e252f001461098f578063a12a7d61146109af57600080fd5b806388f82020146108b15780638c0ae3df146108ea5780638c0b5e221461090a5780638da5cb5b1461092057600080fd5b80634d78fdc611610303578063706f693711610296578063728f8eea11610265578063728f8eea146107ee578063781edb3c146108315780637c0a893d14610851578063809d458d14610871578063880bcbc11461089157600080fd5b8063706f69371461076957806370a0823114610789578063715018a6146107a95780637286ec32146107be57600080fd5b8063638b1b14116102d2578063638b1b14146106b8578063657f644b146106f057806365b36ce2146107105780636d70f7ae1461073057600080fd5b80634d78fdc61461061f5780634e2b57801461063f57806352390c021461065f5780635342acb41461067f57600080fd5b80632e092fe81161037b578063395093511161034a57806339509351146105865780633bbac579146105a657806340b28c2f146105df578063437823ec146105ff57600080fd5b80632e092fe814610515578063313ce5671461053557806334cf1fea146105515780633685d4191461056657600080fd5b80630d65df9b116103b75780630d65df9b1461049657806318160ddd146104b657806323b872dd146104d55780632d838119146104f557600080fd5b8063064a59d0146103f457806306fdde0314610423578063095ea7b31461045f5780630bd05b691461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50601d5461040e9060ff1681565b60405190151581526020015b60405180910390f35b34801561042f57600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161041a91906142a0565b34801561046b57600080fd5b5061040e61047a366004613ffb565b610d69565b34801561048b57600080fd5b50610494610d80565b005b3480156104a257600080fd5b506104946104b1366004613f8e565b610e00565b3480156104c257600080fd5b50600f545b60405190815260200161041a565b3480156104e157600080fd5b5061040e6104f0366004613f8e565b610eb2565b34801561050157600080fd5b506104c76105103660046141f3565b610f61565b34801561052157600080fd5b506104946105303660046141f3565b610fe5565b34801561054157600080fd5b506040516012815260200161041a565b34801561055d57600080fd5b50610494611039565b34801561057257600080fd5b50610494610581366004613f1e565b61109d565b34801561059257600080fd5b5061040e6105a1366004613ffb565b61128c565b3480156105b257600080fd5b5061040e6105c1366004613f1e565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156105eb57600080fd5b506104946105fa366004613f56565b6112c3565b34801561060b57600080fd5b5061049461061a366004613f1e565b611324565b34801561062b57600080fd5b5061049461063a366004613f1e565b61139b565b34801561064b57600080fd5b5061049461065a36600461420b565b611485565b34801561066b57600080fd5b5061049461067a366004613f1e565b6114bc565b34801561068b57600080fd5b5061040e61069a366004613f1e565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106c457600080fd5b506018546106d8906001600160a01b031681565b6040516001600160a01b03909116815260200161041a565b3480156106fc57600080fd5b5061049461070b3660046141f3565b6116b1565b34801561071c57600080fd5b5061049461072b366004613fce565b611705565b34801561073c57600080fd5b5061040e61074b366004613f1e565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561077557600080fd5b50610494610784366004614026565b6117b0565b34801561079557600080fd5b506104c76107a4366004613f1e565b61196d565b3480156107b557600080fd5b506104946119cc565b3480156107ca57600080fd5b50602954602a546107d9919082565b6040805192835260208301919091520161041a565b3480156107fa57600080fd5b50601f546020546021546022546108119392919084565b60408051948552602085019390935291830152606082015260800161041a565b34801561083d57600080fd5b5061049461084c366004613fce565b611a02565b34801561085d57600080fd5b5061049461086c366004613f1e565b611a96565b34801561087d57600080fd5b5061049461088c366004613f1e565b611b8a565b34801561089d57600080fd5b506104946108ac366004613fce565b611c33565b3480156108bd57600080fd5b5061040e6108cc366004613f1e565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f657600080fd5b506104946109053660046141d6565b611cc7565b34801561091657600080fd5b506104c760125481565b34801561092c57600080fd5b506000546001600160a01b03166106d8565b34801561094a57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610452565b34801561097857600080fd5b506023546024546025546026546108119392919084565b34801561099b57600080fd5b506104946109aa3660046141f3565b611d3a565b3480156109bb57600080fd5b506104946109ca36600461422c565b611ded565b3480156109db57600080fd5b5061040e6109ea366004613ffb565b611e30565b3480156109fb57600080fd5b506104c7610a0a366004613f1e565b60146020526000908152604090205481565b348015610a2857600080fd5b5061040e610a37366004613f1e565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610a6157600080fd5b50600e546106d8906001600160a01b031681565b348015610a8157600080fd5b5061040e610a90366004613ffb565b611ecb565b348015610aa157600080fd5b506104c760135481565b348015610ab757600080fd5b50610494610ac6366004613f1e565b611ed8565b348015610ad757600080fd5b50610494610ae63660046140e2565b611f23565b348015610af757600080fd5b5061040e610b06366004613f1e565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b3057600080fd5b50610494610b3f366004613f1e565b61200f565b348015610b5057600080fd5b506019546106d8906001600160a01b031681565b348015610b7057600080fd5b506017546106d8906001600160a01b031681565b348015610b9057600080fd5b50610494610b9f3660046141f3565b61205d565b348015610bb057600080fd5b506104c760165481565b348015610bc657600080fd5b50610494610bd5366004613fce565b6120a7565b348015610be657600080fd5b506104c7610bf5366004613f56565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c2c57600080fd5b50610494610c3b366004613f1e565b612130565b348015610c4c57600080fd5b50610494610c5b366004613f1e565b6123cc565b348015610c6c57600080fd5b50610494610c7b366004613fce565b61246e565b348015610c8c57600080fd5b506104c760115481565b348015610ca257600080fd5b5061040e610cb1366004613f1e565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cdb57600080fd5b50610494610cea366004613f1e565b612532565b348015610cfb57600080fd5b5060155461040e9060ff1681565b348015610d1557600080fd5b50610494610d24366004613f1e565b6125a6565b348015610d3557600080fd5b50610494610d44366004613f1e565b61264f565b348015610d5557600080fd5b50600d546106d8906001600160a01b031681565b6000610d763384846126ea565b5060015b92915050565b6000546001600160a01b03163314610db35760405162461bcd60e51b8152600401610daa9061432a565b60405180910390fd5b601d805460ff19166001179055601b54610dd05742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610daa9061432a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906141ba565b50505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205482811015610f375760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610daa565b610f4285858561280e565b610f568533610f51868561461a565b6126ea565b506001949350505050565b6000601054821115610fc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610daa565b6000610fd26130c3565b9050610fde81846144ed565b9392505050565b6000546001600160a01b0316331461100f5760405162461bcd60e51b8152600401610daa9061432a565b606481101561101d57600080fd5b6110296012600a614550565b61103390826145fb565b60125550565b6000546001600160a01b031633146110635760405162461bcd60e51b8152600401610daa9061432a565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146110c75760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03811660009081526007602052604090205460ff1661112f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610daa565b60005b600a5481101561128857816001600160a01b0316600a828154811061116757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561127657600a80546111929060019061461a565b815481106111b057634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106111ea57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061125057634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061128081614631565b915050611132565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610d76918590610f519086906144d5565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610daa9061432a565b600d80546001600160a01b038085166001600160a01b031992831617909255600e805492841692909116821790556112889061200f565b336000908152600c602052604090205460ff168061135b5750336113506000546001600160a01b031690565b6001600160a01b0316145b6113775760405162461bcd60e51b8152600401610daa9061435f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146113c55760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166000908152601a602052604090205460ff166114385760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610daa565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b602782905560288190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146114e65760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03811660009081526007602052604090205460ff161561154f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610daa565b600a5460c810156115935760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610daa565b6000546001600160a01b03828116911614156115f15760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610daa565b6001600160a01b0381166000908152600160205260409020541561164b576001600160a01b03811660009081526001602052604090205461163190610f61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146116db5760405162461bcd60e51b8152600401610daa9061432a565b60648110156116e957600080fd5b6116f56012600a614550565b6116ff90826145fb565b60135550565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0382166117855760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610daa565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117da5760405162461bcd60e51b8152600401610daa9061432a565b805182511461181a5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610daa565b3360005b8351811015610eac57600084828151811061184957634e487b7160e01b600052603260045260246000fd5b60200260200101519050600061185d6130c3565b85848151811061187d57634e487b7160e01b600052603260045260246000fd5b602002602001015161188f91906145fb565b6001600160a01b0385166000908152600160205260409020549091506118b690829061461a565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546118e69082906144d5565b6001600160a01b0380841660008181526001602052604090209290925586519086169060008051602061469c8339815191529088908790811061193957634e487b7160e01b600052603260045260246000fd5b602002602001015160405161195091815260200190565b60405180910390a35050808061196590614631565b91505061181e565b6001600160a01b03811660009081526007602052604081205460ff16156119aa57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d7a90610f61565b6000546001600160a01b031633146119f65760405162461bcd60e51b8152600401610daa9061432a565b611a0060006130e6565b565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611a6b5760405162461bcd60e51b8152600401610daa906143cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ac05760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166000908152601a602052604090205460ff1615611b385760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610daa565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611bb45760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b038116611bdb5760405162461bcd60e51b8152600401610daa90614396565b6017546001600160a01b0383811691161415611c095760405162461bcd60e51b8152600401610daa906142f3565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611c5d5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611c9c5760405162461bcd60e51b8152600401610daa906143cd565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611cfe575033611cf36000546001600160a01b031690565b6001600160a01b0316145b611d1a5760405162461bcd60e51b8152600401610daa9061435f565b6015805460ff1916831515179055611d338160016145fb565b6016555050565b6000546001600160a01b03163314611d645760405162461bcd60e51b8152600401610daa9061432a565b80471015611db45760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610daa565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611288573d6000803e3d6000fd5b601f8490556020839055602182905560228190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611eb25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610daa565b611ec13385610f51868561461a565b5060019392505050565b6000610d7633848461280e565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611f4d5760405162461bcd60e51b8152600401610daa9061432a565b606482511115611f955760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610daa565b60005b825181101561200a578160086000858481518110611fc657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061200281614631565b915050611f98565b505050565b6000546001600160a01b031633146120395760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146120875760405162461bcd60e51b8152600401610daa9061432a565b6000811161209457600080fd5b6120a181620f42406145fb565b60115550565b6000546001600160a01b031633146120d15760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166121a95760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610daa565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561220057600080fd5b505afa158015612214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122389190613f3a565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561229557600080fd5b505afa1580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190613f3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561231557600080fd5b505af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613f3a565b90506001600160a01b0381166123a55760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610daa565b600e80546001600160a01b0319166001600160a01b0383169081179091556112889061200f565b6000546001600160a01b031633146123f65760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b03811661241d5760405162461bcd60e51b8152600401610daa90614396565b6019546001600160a01b038381169116141561244b5760405162461bcd60e51b8152600401610daa906142f3565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124985760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156125075760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610daa565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff168061256957503361255e6000546001600160a01b031690565b6001600160a01b0316145b6125855760405162461bcd60e51b8152600401610daa9061435f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146125d05760405162461bcd60e51b8152600401610daa9061432a565b806001600160a01b0381166125f75760405162461bcd60e51b8152600401610daa90614396565b6018546001600160a01b03838116911614156126255760405162461bcd60e51b8152600401610daa906142f3565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146126795760405162461bcd60e51b8152600401610daa9061432a565b6001600160a01b0381166126de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610daa565b6126e7816130e6565b50565b6001600160a01b03831661274c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610daa565b6001600160a01b0382166127ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610daa565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166128725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610daa565b6001600160a01b0382166128d45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610daa565b600081116129125760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610daa565b61291b8361196d565b8111156129615760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610daa565b6001600160a01b03831660009081526008602052604090205460ff161580156129a357506001600160a01b03821660009081526008602052604090205460ff16155b6129df5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610daa565b6001600160a01b0383166000908152601e602052604090205460ff16158015612a2157506001600160a01b0382166000908152601e602052604090205460ff16155b15612cbc57601d5460ff16612a8b5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610daa565b6001600160a01b0382166000908152601a602052604090205460ff1615612af45760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610daa565b6001600160a01b0383166000908152601a602052604090205460ff1615612b5d5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610daa565b6001600160a01b03821660009081526005602052604090205460ff16158015612b9f57506001600160a01b03831660009081526005602052604090205460ff16155b15612c1157601254811115612c115760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610daa565b6001600160a01b03821660009081526006602052604090205460ff16612cbc5760135481612c3e8461196d565b612c4891906144d5565b1115612cbc5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610daa565b60155460ff1615612d3f576001600160a01b038316600090815260146020526040812054612cea904261461a565b90506016548111612d3d5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610daa565b505b6001600160a01b03831660009081526004602052604090205460ff16158015612d8157506001600160a01b03821660009081526004602052604090205460ff16155b8015612d905750600b5460ff16155b15612df8576001600160a01b03831660009081526009602052604090205460ff1680612dd457506001600160a01b03821660009081526009602052604090205460ff165b15612deb57612de68383836001613136565b612e05565b612de68383836002613136565b612e058383836000613136565b6001600160a01b0383166000908152601460205260409020429055600b5460ff16158015612e415750600e546001600160a01b03848116911614155b8015612e5b5750600e546001600160a01b03838116911614155b8015612e8057506001600160a01b03831660009081526004602052604090205460ff16155b8015612ea557506001600160a01b03821660009081526004602052604090205460ff16155b1561200a5760408051600380825260808201909252600091602082016060803683370190505090503081600081518110612eef57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f4357600080fd5b505afa158015612f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7b9190613f3a565b81600181518110612f9c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954825191169082906002908110612fdb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f6130063061196d565b846040518363ffffffff1660e01b8152600401613024929190614423565b60006040518083038186803b15801561303c57600080fd5b505afa158015613050573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130789190810190614127565b60028151811061309857634e487b7160e01b600052603260045260246000fd5b6020026020010151905060115481106130bc576130bc6130b73061196d565b613439565b5050505050565b60008060006130d0613747565b90925090506130df81836144ed565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006131428383613902565b6001600160a01b03861660009081526007602052604090205490915060ff16156131a4576001600160a01b03851660009081526002602052604090205461318a90849061461a565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156132075760c08101516001600160a01b0385166000908152600260205260409020546131ed91906144d5565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b03861660009081526001602052604090205461322c919061461a565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461326391906144d5565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613295575060008160e00151115b156132ac576132ac81604001518260e0015161394a565b6000816060015111806132c457506000816101000151115b15613316576132dc816060015182610100015161397f565b6017546101008201516040519081526001600160a01b039182169187169060008051602061469c8339815191529060200160405180910390a35b60008160800151118061332e57506000816101200151115b15613380576133468160800151826101200151613a16565b6018546101208201516040519081526001600160a01b039182169187169060008051602061469c8339815191529060200160405180910390a35b60008160a00151118061339857506000816101400151115b156133f3576133b08160a00151826101400151613aad565b61dead6001600160a01b0316856001600160a01b031660008051602061469c8339815191528361014001516040516133ea91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b031660008051602061469c8339815191528360c0015160405161342a91815260200190565b60405180910390a35050505050565b600b805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061348957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156134dd57600080fd5b505afa1580156134f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135159190613f3a565b8160018151811061353657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461355c91309116846126ea565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613595908590600090869030904290600401614444565b600060405180830381600087803b1580156135af57600080fd5b505af11580156135c3573d6000803e3d6000fd5b5050601754602954600093506001600160a01b03909116915084906135e99047906145fb565b6135f391906144ed565b604051600081818185875af1925050503d806000811461362f576040519150601f19603f3d011682016040523d82523d6000602084013e613634565b606091505b505090508061367b5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610daa565b6000602955601854602a546001600160a01b0390911690849061369f9047906145fb565b6136a991906144ed565b604051600081818185875af1925050503d80600081146136e5576040519150601f19603f3d011682016040523d82523d6000602084013e6136ea565b606091505b505080915050806137335760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610daa565b50506000602a5550600b805460ff19169055565b601054600f546000918291825b600a548110156138d1578260016000600a848154811061378457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137fd57508160026000600a84815481106137d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561381357601054600f54945094505050509091565b60016000600a838154811061383857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613867908461461a565b925060026000600a838154811061388e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546138bd908361461a565b9150806138c981614631565b915050613754565b50600f546010546138e291906144ed565b8210156138f957601054600f549350935050509091565b90939092509050565b61390a613e4c565b6139148383613b6c565b90506139298184846139246130c3565b613d64565b60a08701526080860152606085015260408401526020830152815292915050565b816010600082825461395c919061461a565b9091555050602380548291906000906139769084906144d5565b90915550505050565b806023600101600082825461399491906144d5565b90915550506017546001600160a01b031660009081526007602052604090205460ff16156139ec576017546001600160a01b0316600090815260026020526040812080548392906139e69084906144d5565b90915550505b6017546001600160a01b0316600090815260016020526040812080548492906139769084906144d5565b8060236002016000828254613a2b91906144d5565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613a83576018546001600160a01b031660009081526002602052604081208054839290613a7d9084906144d5565b90915550505b6018546001600160a01b0316600090815260016020526040812080548492906139769084906144d5565b8060236003016000828254613ac291906144d5565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613b2e5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613b289084906144d5565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80548492906139769084906144d5565b613b74613e4c565b60ff8216613b885760c08101839052610d7a565b8160ff1660011415613cce57601f546103e890613ba590856145fb565b613baf91906144ed565b60e08201526020546103e890613bc590856145fb565b613bcf91906144ed565b6101008201526021546103e890613be690856145fb565b613bf091906144ed565b6101208201526022546103e890613c0790856145fb565b613c1191906144ed565b610140820152602054602754610100830151613c2d91906145fb565b613c3791906144ed565b60298054600090613c499084906144d5565b9091555050602054602854610100830151613c6491906145fb565b613c6e91906144ed565b602a8054600090613c809084906144d5565b909155505061014081015161010082015161012083015160e0840151613ca6908761461a565b613cb0919061461a565b613cba919061461a565b613cc4919061461a565b60c0820152610d7a565b601f546103e890613cdf90856145fb565b613ce991906144ed565b60e08201526022546103e890613cff90856145fb565b613d0991906144ed565b6101408201526028546103e890613d2090856145fb565b613d2a91906144ed565b6101008201819052602a8054600090613d449084906144d5565b909155505061014081015161010082015160e0830151613cb0908661461a565b60008080808080613d75878a6145fb565b955060ff8816613d9357508493506000925082915081905080613e3f565b8760ff1660011415613e1c57868a60e00151613daf91906145fb565b9350868a6101000151613dc291906145fb565b9250868a6101200151613dd591906145fb565b9150868a6101400151613de891906145fb565b9050808284613df7878a61461a565b613e01919061461a565b613e0b919061461a565b613e15919061461a565b9450613e3f565b868a60e00151613e2c91906145fb565b9350868a6101200151613dd591906145fb565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112613eb6578081fd5b81356020613ecb613ec6836144b1565b614480565b80838252828201915082860187848660051b8901011115613eea578586fd5b855b85811015613f11578135613eff81614678565b84529284019290840190600101613eec565b5090979650505050505050565b600060208284031215613f2f578081fd5b8135610fde81614678565b600060208284031215613f4b578081fd5b8151610fde81614678565b60008060408385031215613f68578081fd5b8235613f7381614678565b91506020830135613f8381614678565b809150509250929050565b600080600060608486031215613fa2578081fd5b8335613fad81614678565b92506020840135613fbd81614678565b929592945050506040919091013590565b60008060408385031215613fe0578182fd5b8235613feb81614678565b91506020830135613f838161468d565b6000806040838503121561400d578182fd5b823561401881614678565b946020939093013593505050565b60008060408385031215614038578182fd5b823567ffffffffffffffff8082111561404f578384fd5b61405b86838701613ea6565b9350602091508185013581811115614071578384fd5b85019050601f81018613614083578283fd5b8035614091613ec6826144b1565b80828252848201915084840189868560051b87010111156140b0578687fd5b8694505b838510156140d25780358352600194909401939185019185016140b4565b5080955050505050509250929050565b600080604083850312156140f4578182fd5b823567ffffffffffffffff81111561410a578283fd5b61411685828601613ea6565b9250506020830135613f838161468d565b60006020808385031215614139578182fd5b825167ffffffffffffffff81111561414f578283fd5b8301601f8101851361415f578283fd5b805161416d613ec6826144b1565b80828252848201915084840188868560051b870101111561418c578687fd5b8694505b838510156141ae578051835260019490940193918501918501614190565b50979650505050505050565b6000602082840312156141cb578081fd5b8151610fde8161468d565b600080604083850312156141e8578182fd5b82356140188161468d565b600060208284031215614204578081fd5b5035919050565b6000806040838503121561421d578182fd5b50508035926020909101359150565b60008060008060808587031215614241578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b838110156142955781516001600160a01b031687529582019590820190600101614270565b509495945050505050565b6000602080835283518082850152825b818110156142cc578581018301518582016040015282016142b0565b818111156142dd5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b82815260406020820152600061443c604083018461425d565b949350505050565b85815284602082015260a06040820152600061446360a083018661425d565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156144a9576144a9614662565b604052919050565b600067ffffffffffffffff8211156144cb576144cb614662565b5060051b60200190565b600082198211156144e8576144e861464c565b500190565b60008261450857634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561454857816000190482111561452e5761452e61464c565b8085161561453b57918102915b93841c9390800290614512565b509250929050565b6000610fde60ff84168360008261456957506001610d7a565b8161457657506000610d7a565b816001811461458c5760028114614596576145b2565b6001915050610d7a565b60ff8411156145a7576145a761464c565b50506001821b610d7a565b5060208310610133831016604e8410600b84101617156145d5575081810a610d7a565b6145df838361450d565b80600019048211156145f3576145f361464c565b029392505050565b60008160001904831182151516156146155761461561464c565b500290565b60008282101561462c5761462c61464c565b500390565b60006000198214156146455761464561464c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126e757600080fd5b80151581146126e757600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122024bf9e8090d106fad8e138db4c80727c012f5a6ed894fc5c648cfd994cf5604564736f6c63430008040033
Deployed Bytecode Sourcemap
14991:24975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16920:28;;;;;;;;;;-1:-1:-1;16920:28:0;;;;;;;;;;;8650:14:1;;8643:22;8625:41;;8613:2;8598:18;16920:28:0;;;;;;;;20199:83;;;;;;;;;;-1:-1:-1;20269:5:0;;;;;;;;;;;;-1:-1:-1;;;20269:5:0;;;;20199:83;;;;;;;:::i;21107:161::-;;;;;;;;;;-1:-1:-1;21107:161:0;;;;;:::i;:::-;;:::i;25680:276::-;;;;;;;;;;;;;:::i;:::-;;39766:154;;;;;;;;;;-1:-1:-1;39766:154:0;;;;;:::i;:::-;;:::i;20472:95::-;;;;;;;;;;-1:-1:-1;20552:7:0;;20472:95;;;22782:25:1;;;22770:2;22755:18;20472:95:0;22737:76:1;21276:422:0;;;;;;;;;;-1:-1:-1;21276:422:0;;;;;:::i;:::-;;:::i;22442:248::-;;;;;;;;;;-1:-1:-1;22442:248:0;;;;;:::i;:::-;;:::i;36922:146::-;;;;;;;;;;-1:-1:-1;36922:146:0;;;;;:::i;:::-;;:::i;20381:83::-;;;;;;;;;;-1:-1:-1;20381:83:0;;15767:2;24533:36:1;;24521:2;24506:18;20381:83:0;24488:87:1;25959:124:0;;;;;;;;;;;;;:::i;23164:475::-;;;;;;;;;;-1:-1:-1;23164:475:0;;;;;:::i;:::-;;:::i;21706:215::-;;;;;;;;;;-1:-1:-1;21706:215:0;;;;;:::i;:::-;;:::i;38654:98::-;;;;;;;;;;-1:-1:-1;38654:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;38729:15:0;38706:4;38729:15;;;:6;:15;;;;;;;;;38654:98;38072:179;;;;;;;;;;-1:-1:-1;38072:179:0;;;;;:::i;:::-;;:::i;23972:121::-;;;;;;;;;;-1:-1:-1;23972:121:0;;;;;:::i;:::-;;:::i;25459:213::-;;;;;;;;;;-1:-1:-1;25459:213:0;;;;;:::i;:::-;;:::i;26880:192::-;;;;;;;;;;-1:-1:-1;26880:192:0;;;;;:::i;:::-;;:::i;22698:458::-;;;;;;;;;;-1:-1:-1;22698:458:0;;;;;:::i;:::-;;:::i;24231:123::-;;;;;;;;;;-1:-1:-1;24231:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;24319:27:0;24295:4;24319:27;;;:18;:27;;;;;;;;;24231:123;16402:78;;;;;;;;;;-1:-1:-1;16402:78:0;;;;-1:-1:-1;;;;;16402:78:0;;;;;;-1:-1:-1;;;;;7853:32:1;;;7835:51;;7823:2;7808:18;16402:78:0;7790:102:1;37076:154:0;;;;;;;;;;-1:-1:-1;37076:154:0;;;;;:::i;:::-;;:::i;23761:198::-;;;;;;;;;;-1:-1:-1;23761:198:0;;;;;:::i;:::-;;:::i;23647:106::-;;;;;;;;;;-1:-1:-1;23647:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;23726:19:0;23706:4;23726:19;;;:9;:19;;;;;;;;;23647:106;38764:560;;;;;;;;;;-1:-1:-1;38764:560:0;;;;;:::i;:::-;;:::i;20575:198::-;;;;;;;;;;-1:-1:-1;20575:198:0;;;;;:::i;:::-;;:::i;2944:94::-;;;;;;;;;;;;;:::i;17973:32::-;;;;;;;;;;-1:-1:-1;17973:32:0;;;;;;;;;;;;;23916:25:1;;;23972:2;23957:18;;23950:34;;;;23889:18;17973:32:0;23871:119:1;17154:39:0;;;;;;;;;;-1:-1:-1;17154:39:0;;;;;;;;;;;;;;;;;;;24226:25:1;;;24282:2;24267:18;;24260:34;;;;24310:18;;;24303:34;24368:2;24353:18;;24346:34;24213:3;24198:19;17154:39:0;24180:206:1;24811:266:0;;;;;;;;;;-1:-1:-1;24811:266:0;;;;;:::i;:::-;;:::i;25240:214::-;;;;;;;;;;-1:-1:-1;25240:214:0;;;;;:::i;:::-;;:::i;36161:271::-;;;;;;;;;;-1:-1:-1;36161:271:0;;;;;:::i;:::-;;:::i;24362:281::-;;;;;;;;;;-1:-1:-1;24362:281:0;;;;;:::i;:::-;;:::i;22314:120::-;;;;;;;;;;-1:-1:-1;22314:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22406:20:0;22382:4;22406:20;;;:11;:20;;;;;;;;;22314:120;37398:196;;;;;;;;;;-1:-1:-1;37398:196:0;;;;;:::i;:::-;;:::i;16015:59::-;;;;;;;;;;;;;;;;2721:87;;;;;;;;;;-1:-1:-1;2767:7:0;2794:6;-1:-1:-1;;;;;2794:6:0;2721:87;;20288;;;;;;;;;;-1:-1:-1;20360:7:0;;;;;;;;;;;;-1:-1:-1;;;20360:7:0;;;;20288:87;;17345:36;;;;;;;;;;-1:-1:-1;17345:36:0;;;;;;;;;;;;;;;39396:193;;;;;;;;;;-1:-1:-1;39396:193:0;;;;;:::i;:::-;;:::i;26602:270::-;;;;;;;;;;-1:-1:-1;26602:270:0;;;;;:::i;:::-;;:::i;21929:377::-;;;;;;;;;;-1:-1:-1;21929:377:0;;;;;:::i;:::-;;:::i;16177:46::-;;;;;;;;;;-1:-1:-1;16177:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;25085:145;;;;;;;;;;-1:-1:-1;25085:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;25184:38:0;25160:4;25184:38;;;:29;:38;;;;;;;;;25085:145;15704:19;;;;;;;;;;-1:-1:-1;15704:19:0;;;;-1:-1:-1;;;;;15704:19:0;;;20781:167;;;;;;;;;;-1:-1:-1;20781:167:0;;;;;:::i;:::-;;:::i;16081:62::-;;;;;;;;;;;;;;;;26393:93;;;;;;;;;;-1:-1:-1;26393:93:0;;;;;:::i;:::-;;:::i;37800:260::-;;;;;;;;;;-1:-1:-1;37800:260:0;;;;;:::i;:::-;;:::i;24651:155::-;;;;;;;;;;-1:-1:-1;24651:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;24755:43:0;24731:4;24755:43;;;:34;:43;;;;;;;;;24651:155;26296:89;;;;;;;;;;-1:-1:-1;26296:89:0;;;;;:::i;:::-;;:::i;16570:64::-;;;;;;;;;;-1:-1:-1;16570:64:0;;;;-1:-1:-1;;;;;16570:64:0;;;16320:75;;;;;;;;;;-1:-1:-1;16320:75:0;;;;-1:-1:-1;;;;;16320:75:0;;;37238:152;;;;;;;;;;-1:-1:-1;37238:152:0;;;;;:::i;:::-;;:::i;16271:40::-;;;;;;;;;;;;;;;;26086:202;;;;;;;;;;-1:-1:-1;26086:202:0;;;;;:::i;:::-;;:::i;20956:143::-;;;;;;;;;;-1:-1:-1;20956:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21064:18:0;;;21037:7;21064:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20956:143;38259:383;;;;;;;;;;-1:-1:-1;38259:383:0;;;;;:::i;:::-;;:::i;36731:183::-;;;;;;;;;;-1:-1:-1;36731:183:0;;;;;:::i;:::-;;:::i;37602:186::-;;;;;;;;;;-1:-1:-1;37602:186:0;;;;;:::i;:::-;;:::i;15955:53::-;;;;;;;;;;;;;;;;26494:100;;;;;;;;;;-1:-1:-1;26494:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;26570:16:0;26547:4;26570:16;;;:7;:16;;;;;;;;;26494:100;24101:120;;;;;;;;;;-1:-1:-1;24101:120:0;;;;;:::i;:::-;;:::i;16230:34::-;;;;;;;;;;-1:-1:-1;16230:34:0;;;;;;;;36440:283;;;;;;;;;;-1:-1:-1;36440:283:0;;;;;:::i;:::-;;:::i;3046:192::-;;;;;;;;;;-1:-1:-1;3046:192:0;;;;;:::i;:::-;;:::i;15676:21::-;;;;;;;;;;-1:-1:-1;15676:21:0;;;;-1:-1:-1;;;;;15676:21:0;;;21107:161;21182:4;21199:39;2222:10;21222:7;21231:6;21199:8;:39::i;:::-;-1:-1:-1;21256:4:0;21107:161;;;;;:::o;25680:276::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;;;;;;;;;25730:16:::1;:23:::0;;-1:-1:-1;;25730:23:0::1;25749:4;25730:23;::::0;;25768:21:::1;::::0;25764:146:::1;;25835:15;25811:21;:39:::0;25886:12:::1;25865:18;:33:::0;25764:146:::1;25919:32;::::0;25945:5:::1;::::0;25919:32;;::::1;::::0;25945:5;;25919:32:::1;25680:276::o:0;39766:154::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;39871:41:::1;::::0;-1:-1:-1;;;39871:41:0;;-1:-1:-1;;;;;8398:32:1;;;39871:41:0::1;::::0;::::1;8380:51:1::0;8447:18;;;8440:34;;;39871:27:0;::::1;::::0;::::1;::::0;8353:18:1;;39871:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39766:154:::0;;;:::o;21276:422::-;-1:-1:-1;;;;;21426:19:0;;21382:4;21426:19;;;:11;:19;;;;;;;;2222:10;21426:33;;;;;;;;21478:26;;;;21470:79;;;;-1:-1:-1;;;21470:79:0;;16706:2:1;21470:79:0;;;16688:21:1;16745:2;16725:18;;;16718:30;16784:34;16764:18;;;16757:62;-1:-1:-1;;;16835:18:1;;;16828:38;16883:19;;21470:79:0;16678:230:1;21470:79:0;21562:36;21572:6;21580:9;21591:6;21562:9;:36::i;:::-;21609:57;21618:6;2222:10;21640:25;21659:6;21640:16;:25;:::i;:::-;21609:8;:57::i;:::-;-1:-1:-1;21686:4:0;;21276:422;-1:-1:-1;;;;21276:422:0:o;22442:248::-;22508:7;22547;;22536;:18;;22528:73;;;;-1:-1:-1;;;22528:73:0;;12211:2:1;22528:73:0;;;12193:21:1;12250:2;12230:18;;;12223:30;12289:34;12269:18;;;12262:62;-1:-1:-1;;;12340:18:1;;;12333:40;12390:19;;22528:73:0;12183:232:1;22528:73:0;22612:19;22635:10;:8;:10::i;:::-;22612:33;-1:-1:-1;22663:19:0;22612:33;22663:7;:19;:::i;:::-;22656:26;22442:248;-1:-1:-1;;;22442:248:0:o;36922:146::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;37009:3:::1;36999:6;:13;;36991:22;;;::::0;::::1;;37047:13;15767:2;37047;:13;:::i;:::-;37038:22;::::0;:6;:22:::1;:::i;:::-;37024:11;:36:::0;-1:-1:-1;36922:146:0:o;25959:124::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;26012:16:::1;:24:::0;;-1:-1:-1;;26012:24:0::1;::::0;;26046:32:::1;::::0;26012:24;;26031:5:::1;::::0;26046:32:::1;::::0;26031:5;;26046:32:::1;25959:124::o:0;23164:475::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23246:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23238:56;;;::::0;-1:-1:-1;;;23238:56:0;;15592:2:1;23238:56:0::1;::::0;::::1;15574:21:1::0;15631:2;15611:18;;;15604:30;15670:25;15650:18;;;15643:53;15713:18;;23238:56:0::1;15564:173:1::0;23238:56:0::1;23310:9;23305:327;23329:9;:16:::0;23325:20;::::1;23305:327;;;23387:7;-1:-1:-1::0;;;;;23371:23:0::1;:9;23381:1;23371:12;;;;;;-1:-1:-1::0;;;23371:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23371:12:0::1;:23;23367:254;;;23430:9;23440:16:::0;;:20:::1;::::0;23459:1:::1;::::0;23440:20:::1;:::i;:::-;23430:31;;;;;;-1:-1:-1::0;;;23430:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23415:9:::1;:12:::0;;-1:-1:-1;;;;;23430:31:0;;::::1;::::0;23425:1;;23415:12;::::1;;;-1:-1:-1::0;;;23415:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23415:46:0::1;-1:-1:-1::0;;;;;23415:46:0;;::::1;;::::0;;23480:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23519:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23519:28:0::1;::::0;;23566:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23566:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23566:15:0;;;;;-1:-1:-1;;;;;;23566:15:0::1;::::0;;;;;23305:327:::1;23164:475:::0;:::o;23367:254::-:1;23347:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23305:327;;;;23164:475:::0;:::o;21706:215::-;2222:10;21794:4;21843:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21843:34:0;;;;;;;;;;21794:4;;21811:80;;21834:7;;21843:47;;21880:10;;21843:47;:::i;38072:179::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;38167:6:::1;:27:::0;;-1:-1:-1;;;;;38167:27:0;;::::1;-1:-1:-1::0;;;;;;38167:27:0;;::::1;;::::0;;;38205:4:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;38230:13:::1;::::0;:7:::1;:13::i;23972:121::-:0;18760:10;18750:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;18786:10:0;18775:7;2767;2794:6;-1:-1:-1;;;;;2794:6:0;;2721:87;18775:7;-1:-1:-1;;;;;18775:21:0;;18750:46;18742:84;;;;-1:-1:-1;;;18742:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24051:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24051:34:0::1;24081:4;24051:34;::::0;;23972:121::o;25459:213::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25531:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;25523:66;;;::::0;-1:-1:-1;;;25523:66:0;;13432:2:1;25523:66:0::1;::::0;::::1;13414:21:1::0;13471:2;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;-1:-1:-1;;;13561:18:1;;;13554:32;13603:19;;25523:66:0::1;13404:224:1::0;25523:66:0::1;-1:-1:-1::0;;;;;25594:19:0;::::1;25616:5;25594:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;25594:27:0::1;::::0;;25631:36;25616:5;;25594:19;25631:36:::1;::::0;25616:5;;25631:36:::1;25459:213:::0;:::o;26880:192::-;26960:8;:29;;;27000:20;:35;;;27051:13;;;;26960:17;;27051:13;26880:192;;:::o;22698:458::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22779:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22778:21;22770:61;;;::::0;-1:-1:-1;;;22770:61:0;;13835:2:1;22770:61:0::1;::::0;::::1;13817:21:1::0;13874:2;13854:18;;;13847:30;13913:29;13893:18;;;13886:57;13960:18;;22770:61:0::1;13807:177:1::0;22770:61:0::1;22850:9;:16:::0;22870:3:::1;-1:-1:-1::0;22850:23:0::1;22842:50;;;::::0;-1:-1:-1;;;22842:50:0;;10114:2:1;22842:50:0::1;::::0;::::1;10096:21:1::0;10153:2;10133:18;;;10126:30;-1:-1:-1;;;10172:18:1;;;10165:44;10226:18;;22842:50:0::1;10086:164:1::0;22842:50:0::1;2767:7:::0;2794:6;-1:-1:-1;;;;;22911:18:0;;::::1;2794:6:::0;;22911:18:::1;;22903:55;;;::::0;-1:-1:-1;;;22903:55:0;;11504:2:1;22903:55:0::1;::::0;::::1;11486:21:1::0;11543:2;11523:18;;;11516:30;11582:26;11562:18;;;11555:54;11626:18;;22903:55:0::1;11476:174:1::0;22903:55:0::1;-1:-1:-1::0;;;;;22972:16:0;::::1;22991:1;22972:16:::0;;;:7:::1;:16;::::0;;;;;:20;22969:108:::1;;-1:-1:-1::0;;;;;23048:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23028:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23009:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22969:108:::1;-1:-1:-1::0;;;;;23087:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23087:27:0::1;23110:4;23087:27:::0;;::::1;::::0;;;23125:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23125:23:0::1;::::0;;::::1;::::0;;22698:458::o;37076:154::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;37167:3:::1;37157:6;:13;;37149:22;;;::::0;::::1;;37209:13;15767:2;37209;:13;:::i;:::-;37200:22;::::0;:6;:22:::1;:::i;:::-;37182:15;:40:::0;-1:-1:-1;37076:154:0:o;23761:198::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23856:23:0;::::1;23848:60;;;::::0;-1:-1:-1;;;23848:60:0;;14880:2:1;23848:60:0::1;::::0;::::1;14862:21:1::0;14919:2;14899:18;;;14892:30;14958:26;14938:18;;;14931:54;15002:18;;23848:60:0::1;14852:174:1::0;23848:60:0::1;-1:-1:-1::0;;;;;23915:20:0;;;::::1;;::::0;;;:9:::1;:20;::::0;;;;:36;;-1:-1:-1;;23915:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23761:198::o;38764:560::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;38901:7:::1;:14;38880:10;:17;:35;38872:59;;;::::0;-1:-1:-1;;;38872:59:0;;11163:2:1;38872:59:0::1;::::0;::::1;11145:21:1::0;11202:2;11182:18;;;11175:30;-1:-1:-1;;;11221:18:1;;;11214:42;11273:18;;38872:59:0::1;11135:162:1::0;38872:59:0::1;38960:10;38943:14;38983:334;39000:10;:17;38998:1;:19;38983:334;;;39038:17;39058:10;39069:1;39058:13;;;;;;-1:-1:-1::0;;;39058:13:0::1;;;;;;;;;;;;;;;39038:33;;39086:15;39115:10;:8;:10::i;:::-;39104:7;39112:1;39104:10;;;;;;-1:-1:-1::0;;;39104:10:0::1;;;;;;;;;;;;;;;:21;;;;:::i;:::-;-1:-1:-1::0;;;;;39158:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;39086:39;;-1:-1:-1;39158:24:0::1;::::0;39086:39;;39158:24:::1;:::i;:::-;-1:-1:-1::0;;;;;39140:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:42;;;;39218:18;;::::1;::::0;;;;:28:::1;::::0;39239:7;;39218:28:::1;:::i;:::-;-1:-1:-1::0;;;;;39197:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:49;;;;39294:10;;39266:39;;::::1;::::0;-1:-1:-1;;;;;;;;;;;39266:39:0;39294:7;;39302:1;;39294:10;::::1;;;-1:-1:-1::0;;;39294:10:0::1;;;;;;;;;;;;;;;39266:39;;;;22782:25:1::0;;22770:2;22755:18;;22737:76;39266:39:0::1;;;;;;;;38983:334;;39019:3;;;;;:::i;:::-;;;;38983:334;;20575:198:::0;-1:-1:-1;;;;;20665:20:0;;20641:7;20665:20;;;:11;:20;;;;;;;;20661:49;;;-1:-1:-1;;;;;;20694:16:0;;;;;:7;:16;;;;;;;20575:198::o;20661:49::-;-1:-1:-1;;;;;20748:16:0;;;;;;:7;:16;;;;;;20728:37;;:19;:37::i;2944:94::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;3009:21:::1;3027:1;3009:9;:21::i;:::-;2944:94::o:0;24811:266::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24909:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:50;;::::0;::::1;;;;24901:117;;;;-1:-1:-1::0;;;24901:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25023:38:0;;;::::1;;::::0;;;:29:::1;:38;::::0;;;;:49;;-1:-1:-1;;25023:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24811:266::o;25240:214::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25311:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;25310:20;25302:71;;;::::0;-1:-1:-1;;;25302:71:0;;15944:2:1;25302:71:0::1;::::0;::::1;15926:21:1::0;15983:2;15963:18;;;15956:30;16022:34;16002:18;;;15995:62;-1:-1:-1;;;16073:18:1;;;16066:36;16119:19;;25302:71:0::1;15916:228:1::0;25302:71:0::1;-1:-1:-1::0;;;;;25378:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;25378:26:0::1;25400:4;25378:26:::0;;::::1;::::0;;;25414:35;;25400:4;;25378:19;25414:35:::1;::::0;::::1;25240:214:::0;:::o;36161:271::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;36247:9;-1:-1:-1;;;;;18624:19:0;::::1;18616:56;;;;-1:-1:-1::0;;;18616:56:0::1;;;;;;;:::i;:::-;36277:15:::2;::::0;-1:-1:-1;;;;;36277:28:0;;::::2;:15:::0;::::2;:28;;36269:71;;;;-1:-1:-1::0;;;36269:71:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;36351:15:0::2;:27:::0;;-1:-1:-1;;;;;36351:27:0;;::::2;-1:-1:-1::0;;;;;;36351:27:0;;::::2;::::0;::::2;::::0;;:15:::2;36389:35:::0;:18:::2;:35;::::0;36161:271::o;24362:281::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24465:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;::::1;;:55;;::::0;::::1;;;;24457:122;;;;-1:-1:-1::0;;;24457:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24584:43:0;;;::::1;;::::0;;;:34:::1;:43;::::0;;;;:54;;-1:-1:-1;;24584:54:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24362:281::o;37398:196::-;18760:10;18750:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;18786:10:0;18775:7;2767;2794:6;-1:-1:-1;;;;;2794:6:0;;2721:87;18775:7;-1:-1:-1;;;;;18775:21:0;;18750:46;18742:84;;;;-1:-1:-1;;;18742:84:0;;;;;;;:::i;:::-;37508:15:::1;:26:::0;;-1:-1:-1;;37508:26:0::1;::::0;::::1;;;::::0;;37560::::1;:14:::0;-1:-1:-1;37560:26:0::1;:::i;:::-;37545:12;:41:::0;-1:-1:-1;;37398:196:0:o;39396:193::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;39496:9:::1;39471:21;:34;;39463:71;;;::::0;-1:-1:-1;;;39463:71:0;;17476:2:1;39463:71:0::1;::::0;::::1;17458:21:1::0;17515:2;17495:18;;;17488:30;17554:26;17534:18;;;17527:54;17598:18;;39463:71:0::1;17448:174:1::0;39463:71:0::1;2767:7:::0;2794:6;;39545:36:::1;::::0;-1:-1:-1;;;;;2794:6:0;;;;39545:36;::::1;;;::::0;39571:9;;39545:36;2767:7;39545:36;39571:9;2794:6;39545:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;26602:270:::0;26709:5;:16;;;26736:14;:26;;;26773:17;:32;;;26816:10;:19;;;26851:13;;;;26709:9;;26851:13;26602:270;;;;:::o;21929:377::-;2222:10;22022:4;22066:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22066:34:0;;;;;;;;;;22119:35;;;;22111:85;;;;-1:-1:-1;;;22111:85:0;;22009:2:1;22111:85:0;;;21991:21:1;22048:2;22028:18;;;22021:30;22087:34;22067:18;;;22060:62;-1:-1:-1;;;22138:18:1;;;22131:35;22183:19;;22111:85:0;21981:227:1;22111:85:0;22207:67;2222:10;22230:7;22239:34;22258:15;22239:16;:34;:::i;22207:67::-;-1:-1:-1;22294:4:0;;21929:377;-1:-1:-1;;;21929:377:0:o;20781:167::-;20859:4;20876:42;2222:10;20900:9;20911:6;20876:9;:42::i;26393:93::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26456:14:0::1;26473:5;26456:14:::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;26456:22:0::1;::::0;;26393:93::o;37800:260::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;37917:3:::1;37898:8;:15;:22;;37890:54;;;::::0;-1:-1:-1;;;37890:54:0;;10457:2:1;37890:54:0::1;::::0;::::1;10439:21:1::0;10496:2;10476:18;;;10469:30;-1:-1:-1;;;10515:18:1;;;10508:49;10574:18;;37890:54:0::1;10429:169:1::0;37890:54:0::1;37959:9;37955:98;37978:8;:15;37974:1;:19;37955:98;;;38036:5;38014:6;:19;38021:8;38030:1;38021:11;;;;;;-1:-1:-1::0;;;38021:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38014:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38014:19:0;:27;;-1:-1:-1;;38014:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37995:3;::::1;::::0;::::1;:::i;:::-;;;;37955:98;;;;37800:260:::0;;:::o;26296:89::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26356:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;:21;;-1:-1:-1;;26356:21:0::1;26373:4;26356:21;::::0;;26296:89::o;37238:152::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;37334:1:::1;37325:6;:10;37317:19;;;::::0;::::1;;37368:14;:6:::0;37377:5:::1;37368:14;:::i;:::-;37347:18;:35:::0;-1:-1:-1;37238:152:0:o;26086:202::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26175:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;26175:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26233:50;;8625:41:1;;;26233:50:0::1;::::0;8598:18:1;26233:50:0::1;;;;;;;26086:202:::0;;:::o;38259:383::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38345:23:0;::::1;38337:58;;;::::0;-1:-1:-1;;;38337:58:0;;17829:2:1;38337:58:0::1;::::0;::::1;17811:21:1::0;17868:2;17848:18;;;17841:30;-1:-1:-1;;;17887:18:1;;;17880:52;17949:18;;38337:58:0::1;17801:172:1::0;38337:58:0::1;38404:6;:27:::0;;-1:-1:-1;;;;;;38404:27:0::1;-1:-1:-1::0;;;;;38404:27:0;::::1;::::0;;::::1;::::0;;;38467:16:::1;::::0;;-1:-1:-1;;;38467:16:0;;;;-1:-1:-1;;38404:27:0;38467:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;38404:27;38467:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38458:37:0::1;;38504:4;38511:6;;;;;;;;;-1:-1:-1::0;;;;;38511:6:0::1;-1:-1:-1::0;;;;;38511:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38458:67;::::0;-1:-1:-1;;;;;;38458:67:0::1;::::0;;;;;;-1:-1:-1;;;;;8127:15:1;;;38458:67:0::1;::::0;::::1;8109:34:1::0;8179:15;;8159:18;;;8152:43;8044:18;;38458:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38440:85:::0;-1:-1:-1;;;;;;38540:21:0;::::1;38532:59;;;::::0;-1:-1:-1;;;38532:59:0;;11857:2:1;38532:59:0::1;::::0;::::1;11839:21:1::0;11896:2;11876:18;;;11869:30;11935:27;11915:18;;;11908:55;11980:18;;38532:59:0::1;11829:175:1::0;38532:59:0::1;38600:4;:14:::0;;-1:-1:-1;;;;;;38600:14:0::1;-1:-1:-1::0;;;;;38600:14:0;::::1;::::0;;::::1;::::0;;;38621:13:::1;::::0;:7:::1;:13::i;36731:183::-:0;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;36809:5;-1:-1:-1;;;;;18624:19:0;::::1;18616:56;;;;-1:-1:-1::0;;;18616:56:0::1;;;;;;;:::i;:::-;36835:4:::2;::::0;-1:-1:-1;;;;;36835:13:0;;::::2;:4:::0;::::2;:13;;36827:56;;;;-1:-1:-1::0;;;36827:56:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;36894:4:0::2;:12:::0;;-1:-1:-1;;;;;;36894:12:0::2;-1:-1:-1::0;;;;;36894:12:0;;;::::2;::::0;;;::::2;::::0;;36731:183::o;37602:186::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37688:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;:24;;::::0;::::1;;;;37680:66;;;::::0;-1:-1:-1;;;37680:66:0;;10805:2:1;37680:66:0::1;::::0;::::1;10787:21:1::0;10844:2;10824:18;;;10817:30;10883:31;10863:18;;;10856:59;10932:18;;37680:66:0::1;10777:179:1::0;37680:66:0::1;-1:-1:-1::0;;;;;37757:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;37757:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37602:186::o;24101:120::-;18760:10;18750:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;18786:10:0;18775:7;2767;2794:6;-1:-1:-1;;;;;2794:6:0;;2721:87;18775:7;-1:-1:-1;;;;;18775:21:0;;18750:46;18742:84;;;;-1:-1:-1;;;18742:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24178:27:0::1;24208:5;24178:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24178:35:0::1;::::0;;24101:120::o;36440:283::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;36529:9;-1:-1:-1;;;;;18624:19:0;::::1;18616:56;;;;-1:-1:-1::0;;;18616:56:0::1;;;;;;;:::i;:::-;36559:18:::2;::::0;-1:-1:-1;;;;;36559:31:0;;::::2;:18:::0;::::2;:31;;36551:74;;;;-1:-1:-1::0;;;36551:74:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;36636:18:0::2;:30:::0;;-1:-1:-1;;;;;36636:30:0;;::::2;-1:-1:-1::0;;;;;;36636:30:0;;::::2;::::0;::::2;::::0;;:18:::2;36677:38:::0;:18:::2;:38;::::0;36440:283::o;3046:192::-;2767:7;2794:6;-1:-1:-1;;;;;2794:6:0;2222:10;2856:23;2848:68;;;;-1:-1:-1;;;2848:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;12622:2:1;3127:73:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;12700:34;12680:18;;;12673:62;-1:-1:-1;;;12751:18:1;;;12744:36;12797:19;;3127:73:0::1;12594:228:1::0;3127:73:0::1;3211:19;3221:8;3211:9;:19::i;:::-;3046:192:::0;:::o;31244:335::-;-1:-1:-1;;;;;31337:19:0;;31329:68;;;;-1:-1:-1;;;31329:68:0;;18940:2:1;31329:68:0;;;18922:21:1;18979:2;18959:18;;;18952:30;19018:34;18998:18;;;18991:62;-1:-1:-1;;;19069:18:1;;;19062:34;19113:19;;31329:68:0;18912:226:1;31329:68:0;-1:-1:-1;;;;;31416:21:0;;31408:68;;;;-1:-1:-1;;;31408:68:0;;13029:2:1;31408:68:0;;;13011:21:1;13068:2;13048:18;;;13041:30;13107:34;13087:18;;;13080:62;-1:-1:-1;;;13158:18:1;;;13151:32;13200:19;;31408:68:0;13001:224:1;31408:68:0;-1:-1:-1;;;;;31487:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31539:32;;22782:25:1;;;31539:32:0;;22755:18:1;31539:32:0;;;;;;;31244:335;;;:::o;31589:2209::-;-1:-1:-1;;;;;31677:18:0;;31669:68;;;;-1:-1:-1;;;31669:68:0;;18180:2:1;31669:68:0;;;18162:21:1;18219:2;18199:18;;;18192:30;18258:34;18238:18;;;18231:62;-1:-1:-1;;;18309:18:1;;;18302:35;18354:19;;31669:68:0;18152:227:1;31669:68:0;-1:-1:-1;;;;;31756:16:0;;31748:64;;;;-1:-1:-1;;;31748:64:0;;9710:2:1;31748:64:0;;;9692:21:1;9749:2;9729:18;;;9722:30;9788:34;9768:18;;;9761:62;-1:-1:-1;;;9839:18:1;;;9832:33;9882:19;;31748:64:0;9682:225:1;31748:64:0;31840:1;31831:6;:10;31823:34;;;;-1:-1:-1;;;31823:34:0;;14540:2:1;31823:34:0;;;14522:21:1;14579:2;14559:18;;;14552:30;-1:-1:-1;;;14598:18:1;;;14591:41;14649:18;;31823:34:0;14512:161:1;31823:34:0;31886:15;31896:4;31886:9;:15::i;:::-;31876:6;:25;;31868:57;;;;-1:-1:-1;;;31868:57:0;;14191:2:1;31868:57:0;;;14173:21:1;14230:2;14210:18;;;14203:30;-1:-1:-1;;;14249:18:1;;;14242:50;14309:18;;31868:57:0;14163:170:1;31868:57:0;-1:-1:-1;;;;;31945:12:0;;;;;;:6;:12;;;;;;;;31944:13;:28;;;;-1:-1:-1;;;;;;31962:10:0;;;;;;:6;:10;;;;;;;;31961:11;31944:28;31936:54;;;;-1:-1:-1;;;31936:54:0;;20484:2:1;31936:54:0;;;20466:21:1;20523:2;20503:18;;;20496:30;-1:-1:-1;;;20542:18:1;;;20535:43;20595:18;;31936:54:0;20456:163:1;31936:54:0;-1:-1:-1;;;;;32007:35:0;;;;;;:29;:35;;;;;;;;32006:36;:74;;;;-1:-1:-1;;;;;;32047:33:0;;;;;;:29;:33;;;;;;;;32046:34;32006:74;32003:683;;;32096:16;;;;32088:71;;;;-1:-1:-1;;;32088:71:0;;21598:2:1;32088:71:0;;;21580:21:1;21637:2;21617:18;;;21610:30;21676:34;21656:18;;;21649:62;-1:-1:-1;;;21727:18:1;;;21720:40;21777:19;;32088:71:0;21570:232:1;32088:71:0;-1:-1:-1;;;;;32183:14:0;;;;;;:10;:14;;;;;;;;32182:15;32174:58;;;;-1:-1:-1;;;32174:58:0;;19345:2:1;32174:58:0;;;19327:21:1;19384:2;19364:18;;;19357:30;19423:32;19403:18;;;19396:60;19473:18;;32174:58:0;19317:180:1;32174:58:0;-1:-1:-1;;;;;32247:16:0;;;;;;:10;:16;;;;;;;;32246:17;32238:60;;;;-1:-1:-1;;;32238:60:0;;19345:2:1;32238:60:0;;;19327:21:1;19384:2;19364:18;;;19357:30;19423:32;19403:18;;;19396:60;19473:18;;32238:60:0;19317:180:1;32238:60:0;-1:-1:-1;;;;;32309:38:0;;;;;;:34;:38;;;;;;;;32308:39;:84;;;;-1:-1:-1;;;;;;32352:40:0;;;;;;:34;:40;;;;;;;;32351:41;32308:84;32304:188;;;32419:11;;32409:6;:21;;32401:84;;;;-1:-1:-1;;;32401:84:0;;21179:2:1;32401:84:0;;;21161:21:1;21218:2;21198:18;;;21191:30;21257:34;21237:18;;;21230:62;-1:-1:-1;;;21308:18:1;;;21301:48;21366:19;;32401:84:0;21151:240:1;32401:84:0;-1:-1:-1;;;;;32502:33:0;;;;;;:29;:33;;;;;;;;32497:184;;32580:15;;32569:6;32553:13;32563:2;32553:9;:13::i;:::-;:22;;;;:::i;:::-;32552:43;;32544:119;;;;-1:-1:-1;;;32544:119:0;;19704:2:1;32544:119:0;;;19686:21:1;19743:2;19723:18;;;19716:30;19782:34;19762:18;;;19755:62;19853:33;19833:18;;;19826:61;19904:19;;32544:119:0;19676:253:1;32544:119:0;32702:15;;;;32698:182;;;-1:-1:-1;;;;;32773:16:0;;32734:18;32773:16;;;:10;:16;;;;;;32755:34;;:15;:34;:::i;:::-;32734:55;;32825:12;;32812:10;:25;32804:64;;;;-1:-1:-1;;;32804:64:0;;16351:2:1;32804:64:0;;;16333:21:1;16390:2;16370:18;;;16363:30;16429:28;16409:18;;;16402:56;16475:18;;32804:64:0;16323:176:1;32804:64:0;32698:182;;-1:-1:-1;;;;;32904:24:0;;;;;;:18;:24;;;;;;;;32903:25;:52;;;;-1:-1:-1;;;;;;32933:22:0;;;;;;:18;:22;;;;;;;;32932:23;32903:52;:65;;;;-1:-1:-1;32960:8:0;;;;32959:9;32903:65;32900:365;;;-1:-1:-1;;;;;33010:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;33027:11:0;;;;;;:7;:11;;;;;;;;33010:28;33007:179;;;33059:35;33074:4;33080:2;33084:6;33092:1;33059:14;:35::i;:::-;32900:365;;33007:179;33135:35;33150:4;33156:2;33160:6;33168:1;33135:14;:35::i;32900:365::-;33218:35;33233:4;33239:2;33243:6;33251:1;33218:14;:35::i;:::-;-1:-1:-1;;;;;33277:16:0;;;;;;:10;:16;;;;;33296:15;33277:34;;33336:8;;;;33335:9;:25;;;;-1:-1:-1;33356:4:0;;-1:-1:-1;;;;;33348:12:0;;;33356:4;;33348:12;;33335:25;:39;;;;-1:-1:-1;33370:4:0;;-1:-1:-1;;;;;33364:10:0;;;33370:4;;33364:10;;33335:39;:68;;;;-1:-1:-1;;;;;;33379:24:0;;;;;;:18;:24;;;;;;;;33378:25;33335:68;:95;;;;-1:-1:-1;;;;;;33408:22:0;;;;;;:18;:22;;;;;;;;33407:23;33335:95;33332:459;;;33470:16;;;33484:1;33470:16;;;;;;;;;33446:21;;33470:16;;;;;;;;;;-1:-1:-1;33470:16:0;33446:40;;33523:4;33505;33510:1;33505:7;;;;;;-1:-1:-1;;;33505:7:0;;;;;;;;;-1:-1:-1;;;;;33505:23:0;;;:7;;;;;;;;;;:23;;;;33557:6;;:13;;;-1:-1:-1;;;33557:13:0;;;;:6;;;;;:11;;:13;;;;;33505:7;;33557:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33547:4;33552:1;33547:7;;;;;;-1:-1:-1;;;33547:7:0;;;;;;;;;-1:-1:-1;;;;;33547:23:0;;;:7;;;;;;;;;:23;33599:4;;33589:7;;33599:4;;;33589;;33594:1;;33589:7;;;;-1:-1:-1;;;33589:7:0;;;;;;;;;-1:-1:-1;;;;;33589:14:0;;;:7;;;;;;;;;:14;33633:6;;33618:12;;33633:6;:20;33654:24;33672:4;33654:9;:24::i;:::-;33680:4;33633:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33633:52:0;;;;;;;;;;;;:::i;:::-;33686:1;33633:55;;;;;;-1:-1:-1;;;33633:55:0;;;;;;;;;;;;;;;33618:70;;33717:18;;33706:7;:29;33703:76;;33737:42;33754:24;33772:4;33754:9;:24::i;:::-;33737:16;:42::i;:::-;33332:459;;31589:2209;;;:::o;30528:158::-;30569:7;30590:15;30607;30626:19;:17;:19::i;:::-;30589:56;;-1:-1:-1;30589:56:0;-1:-1:-1;30663:15:0;30589:56;;30663:15;:::i;:::-;30656:22;;;;30528:158;:::o;3246:174::-;3303:16;3322:6;;-1:-1:-1;;;;;3339:17:0;;;-1:-1:-1;;;;;;3339:17:0;;;;;;3372:40;;3322:6;;;;;;;3372:40;;3303:16;3372:40;3246:174;;:::o;33879:1266::-;33991:28;34022;34033:7;34042;34022:10;:28::i;:::-;-1:-1:-1;;;;;34067:19:0;;;;;;:11;:19;;;;;;33991:59;;-1:-1:-1;34067:19:0;;34063:117;;;-1:-1:-1;;;;;34143:15:0;;;;;;:7;:15;;;;;;:25;;34161:7;;34143:25;:::i;:::-;-1:-1:-1;;;;;34125:15:0;;;;;;:7;:15;;;;;:43;34063:117;-1:-1:-1;;;;;34194:22:0;;;;;;:11;:22;;;;;;;;34190:132;;;34293:17;;;;-1:-1:-1;;;;;34272:18:0;;;;;;:7;:18;;;;;;:38;;34293:17;34272:38;:::i;:::-;-1:-1:-1;;;;;34251:18:0;;;;;;:7;:18;;;;;:59;34190:132;34368:9;;-1:-1:-1;;;;;34352:15:0;;34368:9;34352:15;;;:7;:15;;;;;;:25;;34368:9;34352:25;:::i;:::-;-1:-1:-1;;;;;34334:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;34428:17;;;34409:18;;;;;;;;;;:36;;34428:17;34409:36;:::i;:::-;-1:-1:-1;;;;;34388:18:0;;;;;;:7;:18;;;;;;;:57;;;;34469:6;;;:10;;;:24;;;34492:1;34483;:6;;;:10;34469:24;34466:56;;;34495:27;34507:1;:6;;;34515:1;:6;;;34495:11;:27::i;:::-;34550:1;34536;:11;;;:15;:34;;;;34569:1;34555;:11;;;:15;34536:34;34533:170;;;34586:39;34600:1;:11;;;34613:1;:11;;;34586:13;:39::i;:::-;34662:15;;;34679:11;;;34645:46;;22782:25:1;;;-1:-1:-1;;;;;34662:15:0;;;;34645:46;;;-1:-1:-1;;;;;;;;;;;34645:46:0;22770:2:1;22755:18;34645:46:0;;;;;;;34533:170;34733:1;34716;:14;;;:18;:40;;;;34755:1;34738;:14;;;:18;34716:40;34713:191;;;34772:48;34789:1;:14;;;34805:1;:14;;;34772:16;:48::i;:::-;34857:18;;34877:14;;;;34840:52;;22782:25:1;;;-1:-1:-1;;;;;34857:18:0;;;;34840:52;;;-1:-1:-1;;;;;;;;;;;34840:52:0;22770:2:1;22755:18;34840:52:0;;;;;;;34713:191;34927:1;34917;:7;;;:11;:26;;;;34942:1;34932;:7;;;:11;34917:26;34914:142;;;34959:27;34969:1;:7;;;34978:1;:7;;;34959:9;:27::i;:::-;16519:42;-1:-1:-1;;;;;35006:38:0;35015:6;-1:-1:-1;;;;;35006:38:0;-1:-1:-1;;;;;;;;;;;35036:1:0;:7;;;35006:38;;;;22782:25:1;;22770:2;22755:18;;22737:76;35006:38:0;;;;;;;;34914:142;35098:9;-1:-1:-1;;;;;35081:46:0;35090:6;-1:-1:-1;;;;;35081:46:0;-1:-1:-1;;;;;;;;;;;35109:1:0;:17;;;35081:46;;;;22782:25:1;;22770:2;22755:18;;22737:76;35081:46:0;;;;;;;;33879:1266;;;;;:::o;35153:1000::-;18493:8;:15;;-1:-1:-1;;18493:15:0;18504:4;18493:15;;;35315:16:::1;::::0;;35329:1:::1;35315:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35315:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35315:16:0::1;35291:40;;35368:4;35350;35355:1;35350:7;;;;;;-1:-1:-1::0;;;35350:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;35350:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;35402:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;35402:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;35350:7;;35402:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35392:4;35397:1;35392:7;;;;;;-1:-1:-1::0;;;35392:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;35392:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;35460:6:::1;::::0;35428:53:::1;::::0;35445:4:::1;::::0;35460:6:::1;35469:11:::0;35428:8:::1;:53::i;:::-;35518:6;::::0;:215:::1;::::0;-1:-1:-1;;;35518:215:0;;-1:-1:-1;;;;;35518:6:0;;::::1;::::0;:57:::1;::::0;:215:::1;::::0;35590:11;;35518:6:::1;::::0;35660:4;;35687::::1;::::0;35707:15:::1;::::0;35518:215:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;35765:15:0::1;::::0;35794:9:::1;:18:::0;35747:12:::1;::::0;-1:-1:-1;;;;;;35765:15:0;;::::1;::::0;-1:-1:-1;35838:11:0;;35794:42:::1;::::0;35815:21:::1;::::0;35794:42:::1;:::i;:::-;35793:56;;;;:::i;:::-;35765:89;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35746:108;;;35873:7;35865:39;;;::::0;-1:-1:-1;;;35865:39:0;;20136:2:1;35865:39:0::1;::::0;::::1;20118:21:1::0;20175:2;20155:18;;;20148:30;-1:-1:-1;;;20194:18:1;;;20187:49;20253:18;;35865:39:0::1;20108:169:1::0;35865:39:0::1;35936:1;35915:9;:22:::0;35964:18:::1;::::0;35996:21;;-1:-1:-1;;;;;35964:18:0;;::::1;::::0;36043:11;;35996:45:::1;::::0;36020:21:::1;::::0;35996:45:::1;:::i;:::-;35995:59;;;;:::i;:::-;35964:95;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35950:109;;;;;36078:7;36070:39;;;::::0;-1:-1:-1;;;36070:39:0;;20136:2:1;36070:39:0::1;::::0;::::1;20118:21:1::0;20175:2;20155:18;;;20148:30;-1:-1:-1;;;20194:18:1;;;20187:49;20253:18;;36070:39:0::1;20108:169:1::0;36070:39:0::1;-1:-1:-1::0;;36144:1:0::1;36120:21:::0;:25;-1:-1:-1;18531:8:0;:16;;-1:-1:-1;;18531:16:0;;;35153:1000::o;30694:542::-;30791:7;;30827;;30744;;;;;30845:279;30869:9;:16;30865:20;;30845:279;;;30935:7;30911;:21;30919:9;30929:1;30919:12;;;;;;-1:-1:-1;;;30919:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30919:12:0;30911:21;;;;;;;;;;;;;:31;;:66;;;30970:7;30946;:21;30954:9;30964:1;30954:12;;;;;;-1:-1:-1;;;30954:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30954:12:0;30946:21;;;;;;;;;;;;;:31;30911:66;30907:97;;;30987:7;;30996;;30979:25;;;;;;;30694:542;;:::o;30907:97::-;31037:7;:21;31045:9;31055:1;31045:12;;;;;;-1:-1:-1;;;31045:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31045:12:0;31037:21;;;;;;;;;;;;;31029:29;;:7;:29;:::i;:::-;31019:39;;31091:7;:21;31099:9;31109:1;31099:12;;;;;;-1:-1:-1;;;31099:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31099:12:0;31091:21;;;;;;;;;;;;;31083:29;;:7;:29;:::i;:::-;31073:39;-1:-1:-1;30887:3:0;;;;:::i;:::-;;;;30845:279;;;;31158:7;;31150;;:15;;;;:::i;:::-;31140:7;:25;31136:56;;;31175:7;;31184;;31167:25;;;;;;30694:542;;:::o;31136:56::-;31211:7;;31220;;-1:-1:-1;30694:542:0;-1:-1:-1;30694:542:0:o;27984:383::-;28053:36;;:::i;:::-;28114:29;28126:7;28135;28114:11;:29::i;:::-;28102:41;;28280:52;28292:9;28303:7;28312;28321:10;:8;:10::i;:::-;28280:11;:52::i;:::-;28261:15;;;28154:178;28237:22;;;28154:178;28217:19;;;28154:178;28201:14;;;28154:178;28174:25;;;28154:178;;;27984:383;;;;:::o;27080:124::-;27158:4;27148:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;27173:11:0;:23;;27192:4;;27173:11;:15;;:23;;27192:4;;27173:23;:::i;:::-;;;;-1:-1:-1;;;;27080:124:0:o;27212:249::-;27316:9;27292:11;:20;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;27351:15:0;;-1:-1:-1;;;;;27351:15:0;27339:28;;;;:11;:28;;;;;;;;27336:70;;;27377:15;;-1:-1:-1;;;;;27377:15:0;27369:24;;;;:7;:24;;;;;:37;;27397:9;;27369:24;:37;;27397:9;;27369:37;:::i;:::-;;;;-1:-1:-1;;27336:70:0;27425:15;;-1:-1:-1;;;;;27425:15:0;27417:24;;;;:7;:24;;;;;:36;;27444:9;;27417:24;:36;;27444:9;;27417:36;:::i;27473:279::-;27588:12;27561:11;:23;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;27626:18:0;;-1:-1:-1;;;;;27626:18:0;27614:31;;;;:11;:31;;;;;;;;27611:79;;;27655:18;;-1:-1:-1;;;;;27655:18:0;27647:27;;;;:7;:27;;;;;:43;;27678:12;;27647:27;:43;;27678:12;;27647:43;:::i;:::-;;;;-1:-1:-1;;27611:79:0;27709:18;;-1:-1:-1;;;;;27709:18:0;27701:27;;;;:7;:27;;;;;:43;;27732:12;;27701:27;:43;;27732:12;;27701:43;:::i;27760:216::-;27848:5;27828:11;:16;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;27879:18:0;;-1:-1:-1;;;;;27879:18:0;27867:31;;;;:11;:31;;;;;;;;27864:64;;;16519:42;27899:20;;;;:7;:20;;;:29;;27923:5;;27899:20;:29;;27923:5;;27899:29;:::i;:::-;;;;-1:-1:-1;;27864:64:0;16519:42;27939:20;;;;:7;:20;;;:29;;27963:5;;27939:20;:29;;27963:5;;27939:29;:::i;28377:1062::-;28447:28;;:::i;:::-;28493:12;;;28490:932;;28520:17;;;:27;;;28560:8;;28490:932;28589:7;:12;;28600:1;28589:12;28586:836;;;28635:5;:9;28646:4;;28627:17;;:7;:17;:::i;:::-;28626:24;;;;:::i;:::-;28617:6;;;:33;28688:14;;28704:4;;28680:22;;:7;:22;:::i;:::-;28679:29;;;;:::i;:::-;28665:11;;;:43;28748:17;;28766:4;;28740:25;;:7;:25;:::i;:::-;:30;;;;:::i;:::-;28723:14;;;:47;28803:10;;28814:4;;28795:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;28785:7;;;:33;28885:14;;28867:8;:17;28855:11;;;;:29;;28867:17;28855:29;:::i;:::-;:44;;;;:::i;:::-;28833:9;:66;;:18;;:66;;;;;:::i;:::-;;;;-1:-1:-1;;28972:14:0;;28951:20;;28939:11;;;;:32;;28951:20;28939:32;:::i;:::-;:47;;;;:::i;:::-;28914:21;:72;;:21;;:72;;;;;:::i;:::-;;;;-1:-1:-1;;29063:7:0;;;;29051:11;;;;29036:14;;;;29029:6;;;;29021:14;;:7;:14;:::i;:::-;:29;;;;:::i;:::-;:41;;;;:::i;:::-;:49;;;;:::i;:::-;29001:17;;;:69;29085:8;;28586:836;29143:5;:9;29153:4;;29135:17;;:7;:17;:::i;:::-;:22;;;;:::i;:::-;29126:6;;;:31;29190:10;;29201:4;;29182:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;29172:7;;;:33;29242:20;;29263:4;;29234:28;;:7;:28;:::i;:::-;:33;;;;:::i;:::-;29220:11;;;:47;;;29282:21;:36;;:21;;:36;;29220:47;;29282:36;:::i;:::-;;;;-1:-1:-1;;29380:7:0;;;;29368:11;;;;29361:6;;;;29353:14;;:7;:14;:::i;29447:1073::-;29573:15;;;;;;29703:19;29711:11;29703:7;:19;:::i;:::-;29693:29;-1:-1:-1;29738:12:0;;;29735:776;;-1:-1:-1;29772:7:0;;-1:-1:-1;29790:1:0;;-1:-1:-1;29790:1:0;;-1:-1:-1;29790:1:0;;-1:-1:-1;29790:1:0;29765:33;;29735:776;29818:7;:12;;29829:1;29818:12;29815:696;;;29860:11;29853:1;:6;;;:18;;;;:::i;:::-;29846:25;;29910:11;29898:1;:11;;;:23;;;;:::i;:::-;29886:35;;29966:11;29951:1;:14;;;:26;;;;:::i;:::-;29936:41;;30008:11;30000:1;:7;;;:19;;;;:::i;:::-;29992:27;-1:-1:-1;29992:27:0;30076:12;30066:9;30053:12;30061:4;30053:7;:12;:::i;:::-;:22;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;30034:60;;30109:68;;29815:696;30232:11;30225:1;:6;;;:18;;;;:::i;:::-;30218:25;;30288:11;30273:1;:14;;;:26;;;;:::i;29815:696::-;29447:1073;;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:768:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:238;529:2;526:1;523:9;515:238;;;600:3;587:17;617:31;642:5;617:31;:::i;:::-;661:18;;699:12;;;;731;;;;547:1;540:9;515:238;;;-1:-1:-1;771:5:1;;78:704;-1:-1:-1;;;;;;;78:704:1:o;787:257::-;846:6;899:2;887:9;878:7;874:23;870:32;867:2;;;920:6;912;905:22;867:2;964:9;951:23;983:31;1008:5;983:31;:::i;1049:261::-;1119:6;1172:2;1160:9;1151:7;1147:23;1143:32;1140:2;;;1193:6;1185;1178:22;1140:2;1230:9;1224:16;1249:31;1274:5;1249:31;:::i;1315:398::-;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:2;;;1465:6;1457;1450:22;1412:2;1509:9;1496:23;1528:31;1553:5;1528:31;:::i;:::-;1578:5;-1:-1:-1;1635:2:1;1620:18;;1607:32;1648:33;1607:32;1648:33;:::i;:::-;1700:7;1690:17;;;1402:311;;;;;:::o;1718:466::-;1795:6;1803;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:2;;;1885:6;1877;1870:22;1832:2;1929:9;1916:23;1948:31;1973:5;1948:31;:::i;:::-;1998:5;-1:-1:-1;2055:2:1;2040:18;;2027:32;2068:33;2027:32;2068:33;:::i;:::-;1822:362;;2120:7;;-1:-1:-1;;;2174:2:1;2159:18;;;;2146:32;;1822:362::o;2189:392::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:2;;;2336:6;2328;2321:22;2283:2;2380:9;2367:23;2399:31;2424:5;2399:31;:::i;:::-;2449:5;-1:-1:-1;2506:2:1;2491:18;;2478:32;2519:30;2478:32;2519:30;:::i;2586:325::-;2654:6;2662;2715:2;2703:9;2694:7;2690:23;2686:32;2683:2;;;2736:6;2728;2721:22;2683:2;2780:9;2767:23;2799:31;2824:5;2799:31;:::i;:::-;2849:5;2901:2;2886:18;;;;2873:32;;-1:-1:-1;;;2673:238:1:o;2916:1204::-;3034:6;3042;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3116:6;3108;3101:22;3063:2;3161:9;3148:23;3190:18;3231:2;3223:6;3220:14;3217:2;;;3252:6;3244;3237:22;3217:2;3280:61;3333:7;3324:6;3313:9;3309:22;3280:61;:::i;:::-;3270:71;;3360:2;3350:12;;3415:2;3404:9;3400:18;3387:32;3444:2;3434:8;3431:16;3428:2;;;3465:6;3457;3450:22;3428:2;3493:24;;;-1:-1:-1;3548:4:1;3540:13;;3536:27;-1:-1:-1;3526:2:1;;3582:6;3574;3567:22;3526:2;3623;3610:16;3646:60;3662:43;3702:2;3662:43;:::i;3646:60::-;3728:3;3752:2;3747:3;3740:15;3780:2;3775:3;3771:12;3764:19;;3811:2;3807;3803:11;3859:7;3854:2;3848;3845:1;3841:10;3837:2;3833:19;3829:28;3826:41;3823:2;;;3885:6;3877;3870:22;3823:2;3912:6;3903:15;;3927:163;3941:2;3938:1;3935:9;3927:163;;;3998:17;;3986:30;;3959:1;3952:9;;;;;4036:12;;;;4068;;3927:163;;;3931:3;4109:5;4099:15;;;;;;;3053:1067;;;;;:::o;4125:497::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:2;;;4297:6;4289;4282:22;4244:2;4342:9;4329:23;4375:18;4367:6;4364:30;4361:2;;;4412:6;4404;4397:22;4361:2;4440:61;4493:7;4484:6;4473:9;4469:22;4440:61;:::i;:::-;4430:71;;;4551:2;4540:9;4536:18;4523:32;4564:28;4586:5;4564:28;:::i;4627:937::-;4722:6;4753:2;4796;4784:9;4775:7;4771:23;4767:32;4764:2;;;4817:6;4809;4802:22;4764:2;4855:9;4849:16;4888:18;4880:6;4877:30;4874:2;;;4925:6;4917;4910:22;4874:2;4953:22;;5006:4;4998:13;;4994:27;-1:-1:-1;4984:2:1;;5040:6;5032;5025:22;4984:2;5074;5068:9;5097:60;5113:43;5153:2;5113:43;:::i;5097:60::-;5179:3;5203:2;5198:3;5191:15;5231:2;5226:3;5222:12;5215:19;;5262:2;5258;5254:11;5310:7;5305:2;5299;5296:1;5292:10;5288:2;5284:19;5280:28;5277:41;5274:2;;;5336:6;5328;5321:22;5274:2;5363:6;5354:15;;5378:156;5392:2;5389:1;5386:9;5378:156;;;5449:10;;5437:23;;5410:1;5403:9;;;;;5480:12;;;;5512;;5378:156;;;-1:-1:-1;5553:5:1;4733:831;-1:-1:-1;;;;;;;4733:831:1:o;5569:255::-;5636:6;5689:2;5677:9;5668:7;5664:23;5660:32;5657:2;;;5710:6;5702;5695:22;5657:2;5747:9;5741:16;5766:28;5788:5;5766:28;:::i;5829:319::-;5894:6;5902;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;6020:9;6007:23;6039:28;6061:5;6039:28;:::i;6153:190::-;6212:6;6265:2;6253:9;6244:7;6240:23;6236:32;6233:2;;;6286:6;6278;6271:22;6233:2;-1:-1:-1;6314:23:1;;6223:120;-1:-1:-1;6223:120:1:o;6348:258::-;6416:6;6424;6477:2;6465:9;6456:7;6452:23;6448:32;6445:2;;;6498:6;6490;6483:22;6445:2;-1:-1:-1;;6526:23:1;;;6596:2;6581:18;;;6568:32;;-1:-1:-1;6435:171:1:o;6611:395::-;6697:6;6705;6713;6721;6774:3;6762:9;6753:7;6749:23;6745:33;6742:2;;;6796:6;6788;6781:22;6742:2;-1:-1:-1;;6824:23:1;;;6894:2;6879:18;;6866:32;;-1:-1:-1;6945:2:1;6930:18;;6917:32;;6996:2;6981:18;6968:32;;-1:-1:-1;6732:274:1;-1:-1:-1;6732:274:1:o;7011:463::-;7064:3;7102:5;7096:12;7129:6;7124:3;7117:19;7155:4;7184:2;7179:3;7175:12;7168:19;;7221:2;7214:5;7210:14;7242:3;7254:195;7268:6;7265:1;7262:13;7254:195;;;7333:13;;-1:-1:-1;;;;;7329:39:1;7317:52;;7389:12;;;;7424:15;;;;7365:1;7283:9;7254:195;;;-1:-1:-1;7465:3:1;;7072:402;-1:-1:-1;;;;;7072:402:1:o;8900:603::-;9012:4;9041:2;9070;9059:9;9052:21;9102:6;9096:13;9145:6;9140:2;9129:9;9125:18;9118:34;9170:4;9183:140;9197:6;9194:1;9191:13;9183:140;;;9292:14;;;9288:23;;9282:30;9258:17;;;9277:2;9254:26;9247:66;9212:10;;9183:140;;;9341:6;9338:1;9335:13;9332:2;;;9411:4;9406:2;9397:6;9386:9;9382:22;9378:31;9371:45;9332:2;-1:-1:-1;9487:2:1;9466:15;-1:-1:-1;;9462:29:1;9447:45;;;;9494:2;9443:54;;9021:482;-1:-1:-1;;;9021:482:1:o;15031:354::-;15233:2;15215:21;;;15272:2;15252:18;;;15245:30;15311:32;15306:2;15291:18;;15284:60;15376:2;15361:18;;15205:180::o;16913:356::-;17115:2;17097:21;;;17134:18;;;17127:30;17193:34;17188:2;17173:18;;17166:62;17260:2;17245:18;;17087:182::o;18384:349::-;18586:2;18568:21;;;18625:2;18605:18;;;18598:30;18664:27;18659:2;18644:18;;18637:55;18724:2;18709:18;;18558:175::o;20624:348::-;20826:2;20808:21;;;20865:2;20845:18;;;20838:30;20904:26;20899:2;20884:18;;20877:54;20963:2;20948:18;;20798:174::o;22213:418::-;22415:2;22397:21;;;22454:2;22434:18;;;22427:30;22493:34;22488:2;22473:18;;22466:62;-1:-1:-1;;;22559:2:1;22544:18;;22537:52;22621:3;22606:19;;22387:244::o;22818:332::-;23025:6;23014:9;23007:25;23068:2;23063;23052:9;23048:18;23041:30;22988:4;23088:56;23140:2;23129:9;23125:18;23117:6;23088:56;:::i;:::-;23080:64;22997:153;-1:-1:-1;;;;22997:153:1:o;23155:582::-;23454:6;23443:9;23436:25;23497:6;23492:2;23481:9;23477:18;23470:34;23540:3;23535:2;23524:9;23520:18;23513:31;23417:4;23561:57;23613:3;23602:9;23598:19;23590:6;23561:57;:::i;:::-;-1:-1:-1;;;;;23654:32:1;;;;23649:2;23634:18;;23627:60;-1:-1:-1;23718:3:1;23703:19;23696:35;23553:65;23426:311;-1:-1:-1;;;23426:311:1:o;24580:275::-;24651:2;24645:9;24716:2;24697:13;;-1:-1:-1;;24693:27:1;24681:40;;24751:18;24736:34;;24772:22;;;24733:62;24730:2;;;24798:18;;:::i;:::-;24834:2;24827:22;24625:230;;-1:-1:-1;24625:230:1:o;24860:183::-;24920:4;24953:18;24945:6;24942:30;24939:2;;;24975:18;;:::i;:::-;-1:-1:-1;25020:1:1;25016:14;25032:4;25012:25;;24929:114::o;25048:128::-;25088:3;25119:1;25115:6;25112:1;25109:13;25106:2;;;25125:18;;:::i;:::-;-1:-1:-1;25161:9:1;;25096:80::o;25181:217::-;25221:1;25247;25237:2;;-1:-1:-1;;;25272:31:1;;25326:4;25323:1;25316:15;25354:4;25279:1;25344:15;25237:2;-1:-1:-1;25383:9:1;;25227:171::o;25403:422::-;25492:1;25535:5;25492:1;25549:270;25570:7;25560:8;25557:21;25549:270;;;25629:4;25625:1;25621:6;25617:17;25611:4;25608:27;25605:2;;;25638:18;;:::i;:::-;25688:7;25678:8;25674:22;25671:2;;;25708:16;;;;25671:2;25787:22;;;;25747:15;;;;25549:270;;;25553:3;25467:358;;;;;:::o;25830:140::-;25888:5;25917:47;25958:4;25948:8;25944:19;25938:4;26024:5;26054:8;26044:2;;-1:-1:-1;26095:1:1;26109:5;;26044:2;26143:4;26133:2;;-1:-1:-1;26180:1:1;26194:5;;26133:2;26225:4;26243:1;26238:59;;;;26311:1;26306:130;;;;26218:218;;26238:59;26268:1;26259:10;;26282:5;;;26306:130;26343:3;26333:8;26330:17;26327:2;;;26350:18;;:::i;:::-;-1:-1:-1;;26406:1:1;26392:16;;26421:5;;26218:218;;26520:2;26510:8;26507:16;26501:3;26495:4;26492:13;26488:36;26482:2;26472:8;26469:16;26464:2;26458:4;26455:12;26451:35;26448:77;26445:2;;;-1:-1:-1;26557:19:1;;;26589:5;;26445:2;26636:34;26661:8;26655:4;26636:34;:::i;:::-;26706:6;26702:1;26698:6;26694:19;26685:7;26682:32;26679:2;;;26717:18;;:::i;:::-;26755:20;;26034:747;-1:-1:-1;;;26034:747:1:o;26786:168::-;26826:7;26892:1;26888;26884:6;26880:14;26877:1;26874:21;26869:1;26862:9;26855:17;26851:45;26848:2;;;26899:18;;:::i;:::-;-1:-1:-1;26939:9:1;;26838:116::o;26959:125::-;26999:4;27027:1;27024;27021:8;27018:2;;;27032:18;;:::i;:::-;-1:-1:-1;27069:9:1;;27008:76::o;27089:135::-;27128:3;-1:-1:-1;;27149:17:1;;27146:2;;;27169:18;;:::i;:::-;-1:-1:-1;27216:1:1;27205:13;;27136:88::o;27229:127::-;27290:10;27285:3;27281:20;27278:1;27271:31;27321:4;27318:1;27311:15;27345:4;27342:1;27335:15;27361:127;27422:10;27417:3;27413:20;27410:1;27403:31;27453:4;27450:1;27443:15;27477:4;27474:1;27467:15;27493:131;-1:-1:-1;;;;;27568:31:1;;27558:42;;27548:2;;27614:1;27611;27604:12;27629:118;27715:5;27708:13;27701:21;27694:5;27691:32;27681:2;;27737:1;27734;27727:12
Swarm Source
ipfs://24bf9e8090d106fad8e138db4c80727c012f5a6ed894fc5c648cfd994cf56045
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.