Polygon Sponsored slots available. Book your slot here!
Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xfcf8fd8ebb8aa64234c115c3a21d27b897d75d80c3079dfe636c8107e9058ca9 | 0x60806040 | 38511204 | 2 days 7 hrs ago | 0xe3c601b1fc6564ebf5603fcad7956697761e39db | IN | Create: Reader | 0 MATIC | 0.410877946657 |
[ Download CSV Export ]
Contract Name:
Reader
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-01-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } pragma solidity 0.6.12; interface IVester { function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function cumulativeClaimAmounts(address _account) external view returns (uint256); function claimedAmounts(address _account) external view returns (uint256); function pairAmounts(address _account) external view returns (uint256); function getVestedAmount(address _account) external view returns (uint256); function transferredAverageStakedAmounts(address _account) external view returns (uint256); function transferredCumulativeRewards(address _account) external view returns (uint256); function cumulativeRewardDeductions(address _account) external view returns (uint256); function bonusRewards(address _account) external view returns (uint256); function transferStakeValues(address _sender, address _receiver) external; function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external; function setTransferredCumulativeRewards(address _account, uint256 _amount) external; function setCumulativeRewardDeductions(address _account, uint256 _amount) external; function setBonusRewards(address _account, uint256 _amount) external; function getMaxVestableAmount(address _account) external view returns (uint256); function getCombinedAverageStakedAmount(address _account) external view returns (uint256); } pragma solidity 0.6.12; interface IPancakeFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); } pragma solidity 0.6.12; interface IYieldToken { function totalStaked() external view returns (uint256); function stakedBalance(address _account) external view returns (uint256); function removeAdmin(address _account) external; } pragma solidity 0.6.12; interface IYieldTracker { function claim(address _account, address _receiver) external returns (uint256); function updateRewards(address _account) external; function getTokensPerInterval() external view returns (uint256); function claimable(address _account) external view returns (uint256); } pragma solidity 0.6.12; interface IVaultPriceFeed { function adjustmentBasisPoints(address _token) external view returns (uint256); function isAdjustmentAdditive(address _token) external view returns (bool); function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external; function setUseV2Pricing(bool _useV2Pricing) external; function setIsAmmEnabled(bool _isEnabled) external; function setIsSecondaryPriceEnabled(bool _isEnabled) external; function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external; function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external; function setFavorPrimaryPrice(bool _favorPrimaryPrice) external; function setPriceSampleSpace(uint256 _priceSampleSpace) external; function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external; function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool _useSwapPricing) external view returns (uint256); function getAmmPrice(address _token) external view returns (uint256); function getPrimaryPrice(address _token, bool _maximise) external view returns (uint256); function setTokenConfig( address _token, address _priceFeed, uint256 _priceDecimals, bool _isStrictStable ) external; } pragma solidity 0.6.12; interface IVault { function isInitialized() external view returns (bool); function isSwapEnabled() external view returns (bool); function isLeverageEnabled() external view returns (bool); function setError(uint256 _errorCode, string calldata _error) external; function router() external view returns (address); function usdg() external view returns (address); function gov() external view returns (address); function whitelistedTokenCount() external view returns (uint256); function maxLeverage() external view returns (uint256); function minProfitTime() external view returns (uint256); function hasDynamicFees() external view returns (bool); function fundingInterval() external view returns (uint256); function totalTokenWeights() external view returns (uint256); function getTargetUsdgAmount(address _token) external view returns (uint256); function inManagerMode() external view returns (bool); function inPrivateLiquidationMode() external view returns (bool); function maxGasPrice() external view returns (uint256); function approvedRouters(address _account, address _router) external view returns (bool); function isLiquidator(address _account) external view returns (bool); function isManager(address _account) external view returns (bool); function minProfitBasisPoints(address _token) external view returns (uint256); function tokenBalances(address _token) external view returns (uint256); function lastFundingTimes(address _token) external view returns (uint256); function setMaxLeverage(uint256 _maxLeverage) external; function setInManagerMode(bool _inManagerMode) external; function setManager(address _manager, bool _isManager) external; function setIsSwapEnabled(bool _isSwapEnabled) external; function setIsLeverageEnabled(bool _isLeverageEnabled) external; function setMaxGasPrice(uint256 _maxGasPrice) external; function setBufferAmount(address _token, uint256 _amount) external; function setMaxGlobalShortSize(address _token, uint256 _amount) external; function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external; function setLiquidator(address _liquidator, bool _isActive) external; function setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external; function setFees( uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external; function setTokenConfig( address _token, uint256 _tokenDecimals, uint256 _redemptionBps, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external; function setPriceFeed(address _priceFeed) external; function withdrawFees(address _token, address _receiver) external returns (uint256); function directPoolDeposit(address _token) external; function buyUSDG(address _token, address _receiver) external returns (uint256); function sellUSDG(address _token, address _receiver) external returns (uint256); function swap(address _tokenIn, address _tokenOut, address _receiver) external returns (uint256); function increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external; function decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external returns (uint256); function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256); function priceFeed() external view returns (address); function fundingRateFactor() external view returns (uint256); function stableFundingRateFactor() external view returns (uint256); function cumulativeFundingRates(address _token) external view returns (uint256); function getNextFundingRate(address _token) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); function liquidationFeeUsd() external view returns (uint256); function taxBasisPoints() external view returns (uint256); function stableTaxBasisPoints() external view returns (uint256); function mintBurnFeeBasisPoints() external view returns (uint256); function swapFeeBasisPoints() external view returns (uint256); function stableSwapFeeBasisPoints() external view returns (uint256); function marginFeeBasisPoints() external view returns (uint256); function allWhitelistedTokensLength() external view returns (uint256); function allWhitelistedTokens(uint256) external view returns (address); function whitelistedTokens(address _token) external view returns (bool); function stableTokens(address _token) external view returns (bool); function shortableTokens(address _token) external view returns (bool); function feeReserves(address _token) external view returns (uint256); function globalShortSizes(address _token) external view returns (uint256); function globalShortAveragePrices(address _token) external view returns (uint256); function maxGlobalShortSizes(address _token) external view returns (uint256); function tokenDecimals(address _token) external view returns (uint256); function tokenWeights(address _token) external view returns (uint256); function guaranteedUsd(address _token) external view returns (uint256); function poolAmounts(address _token) external view returns (uint256); function bufferAmounts(address _token) external view returns (uint256); function reservedAmounts(address _token) external view returns (uint256); function usdgAmounts(address _token) external view returns (uint256); function maxUsdgAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256); function getMaxPrice(address _token) external view returns (uint256); function getMinPrice(address _token) external view returns (uint256); function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256); function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256); } pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity 0.6.12; contract Reader is Governable { using SafeMath for uint256; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant POSITION_PROPS_LENGTH = 9; uint256 public constant PRICE_PRECISION = 10 ** 30; uint256 public constant USDG_DECIMALS = 18; bool public hasMaxGlobalShortSizes; function setConfig(bool _hasMaxGlobalShortSizes) public onlyGov { hasMaxGlobalShortSizes = _hasMaxGlobalShortSizes; } function getMaxAmountIn(IVault _vault, address _tokenIn, address _tokenOut) public view returns (uint256) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 priceOut = _vault.getMaxPrice(_tokenOut); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 tokenOutDecimals = _vault.tokenDecimals(_tokenOut); uint256 amountIn; { uint256 poolAmount = _vault.poolAmounts(_tokenOut); uint256 reservedAmount = _vault.reservedAmounts(_tokenOut); uint256 bufferAmount = _vault.bufferAmounts(_tokenOut); uint256 subAmount = reservedAmount > bufferAmount ? reservedAmount : bufferAmount; if (subAmount >= poolAmount) { return 0; } uint256 availableAmount = poolAmount.sub(subAmount); amountIn = availableAmount.mul(priceOut).div(priceIn).mul(10 ** tokenInDecimals).div(10 ** tokenOutDecimals); } uint256 maxUsdgAmount = _vault.maxUsdgAmounts(_tokenIn); if (maxUsdgAmount != 0) { uint256 maxAmountIn = maxUsdgAmount.mul(10 ** tokenInDecimals).div(10 ** USDG_DECIMALS); maxAmountIn = maxAmountIn.mul(PRICE_PRECISION).div(priceIn); if (amountIn > maxAmountIn) { return maxAmountIn; } } return amountIn; } function getAmountOut(IVault _vault, address _tokenIn, address _tokenOut, uint256 _amountIn) public view returns (uint256, uint256) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 tokenOutDecimals = _vault.tokenDecimals(_tokenOut); uint256 feeBasisPoints; { uint256 usdgAmount = _amountIn.mul(priceIn).div(PRICE_PRECISION); usdgAmount = usdgAmount.mul(10 ** USDG_DECIMALS).div(10 ** tokenInDecimals); bool isStableSwap = _vault.stableTokens(_tokenIn) && _vault.stableTokens(_tokenOut); uint256 baseBps = isStableSwap ? _vault.stableSwapFeeBasisPoints() : _vault.swapFeeBasisPoints(); uint256 taxBps = isStableSwap ? _vault.stableTaxBasisPoints() : _vault.taxBasisPoints(); uint256 feesBasisPoints0 = _vault.getFeeBasisPoints(_tokenIn, usdgAmount, baseBps, taxBps, true); uint256 feesBasisPoints1 = _vault.getFeeBasisPoints(_tokenOut, usdgAmount, baseBps, taxBps, false); // use the higher of the two fee basis points feeBasisPoints = feesBasisPoints0 > feesBasisPoints1 ? feesBasisPoints0 : feesBasisPoints1; } uint256 priceOut = _vault.getMaxPrice(_tokenOut); uint256 amountOut = _amountIn.mul(priceIn).div(priceOut); amountOut = amountOut.mul(10 ** tokenOutDecimals).div(10 ** tokenInDecimals); uint256 amountOutAfterFees = amountOut.mul(BASIS_POINTS_DIVISOR.sub(feeBasisPoints)).div(BASIS_POINTS_DIVISOR); uint256 feeAmount = amountOut.sub(amountOutAfterFees); return (amountOutAfterFees, feeAmount); } function getFeeBasisPoints(IVault _vault, address _tokenIn, address _tokenOut, uint256 _amountIn) public view returns (uint256, uint256, uint256) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 usdgAmount = _amountIn.mul(priceIn).div(PRICE_PRECISION); usdgAmount = usdgAmount.mul(10 ** USDG_DECIMALS).div(10 ** tokenInDecimals); bool isStableSwap = _vault.stableTokens(_tokenIn) && _vault.stableTokens(_tokenOut); uint256 baseBps = isStableSwap ? _vault.stableSwapFeeBasisPoints() : _vault.swapFeeBasisPoints(); uint256 taxBps = isStableSwap ? _vault.stableTaxBasisPoints() : _vault.taxBasisPoints(); uint256 feesBasisPoints0 = _vault.getFeeBasisPoints(_tokenIn, usdgAmount, baseBps, taxBps, true); uint256 feesBasisPoints1 = _vault.getFeeBasisPoints(_tokenOut, usdgAmount, baseBps, taxBps, false); // use the higher of the two fee basis points uint256 feeBasisPoints = feesBasisPoints0 > feesBasisPoints1 ? feesBasisPoints0 : feesBasisPoints1; return (feeBasisPoints, feesBasisPoints0, feesBasisPoints1); } function getFees(address _vault, address[] memory _tokens) public view returns (uint256[] memory) { uint256[] memory amounts = new uint256[](_tokens.length); for (uint256 i = 0; i < _tokens.length; i++) { amounts[i] = IVault(_vault).feeReserves(_tokens[i]); } return amounts; } function getTotalStaked(address[] memory _yieldTokens) public view returns (uint256[] memory) { uint256[] memory amounts = new uint256[](_yieldTokens.length); for (uint256 i = 0; i < _yieldTokens.length; i++) { IYieldToken yieldToken = IYieldToken(_yieldTokens[i]); amounts[i] = yieldToken.totalStaked(); } return amounts; } function getStakingInfo(address _account, address[] memory _yieldTrackers) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory amounts = new uint256[](_yieldTrackers.length * propsLength); for (uint256 i = 0; i < _yieldTrackers.length; i++) { IYieldTracker yieldTracker = IYieldTracker(_yieldTrackers[i]); amounts[i * propsLength] = yieldTracker.claimable(_account); amounts[i * propsLength + 1] = yieldTracker.getTokensPerInterval(); } return amounts; } function getVestingInfo(address _account, address[] memory _vesters) public view returns (uint256[] memory) { uint256 propsLength = 7; uint256[] memory amounts = new uint256[](_vesters.length * propsLength); for (uint256 i = 0; i < _vesters.length; i++) { IVester vester = IVester(_vesters[i]); amounts[i * propsLength] = vester.pairAmounts(_account); amounts[i * propsLength + 1] = vester.getVestedAmount(_account); amounts[i * propsLength + 2] = IERC20(_vesters[i]).balanceOf(_account); amounts[i * propsLength + 3] = vester.claimedAmounts(_account); amounts[i * propsLength + 4] = vester.claimable(_account); amounts[i * propsLength + 5] = vester.getMaxVestableAmount(_account); amounts[i * propsLength + 6] = vester.getCombinedAverageStakedAmount(_account); } return amounts; } function getPairInfo(address _factory, address[] memory _tokens) public view returns (uint256[] memory) { uint256 inputLength = 2; uint256 propsLength = 2; uint256[] memory amounts = new uint256[](_tokens.length / inputLength * propsLength); for (uint256 i = 0; i < _tokens.length / inputLength; i++) { address token0 = _tokens[i * inputLength]; address token1 = _tokens[i * inputLength + 1]; address pair = IPancakeFactory(_factory).getPair(token0, token1); amounts[i * propsLength] = IERC20(token0).balanceOf(pair); amounts[i * propsLength + 1] = IERC20(token1).balanceOf(pair); } return amounts; } function getFundingRates(address _vault, address _weth, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory fundingRates = new uint256[](_tokens.length * propsLength); IVault vault = IVault(_vault); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } uint256 fundingRateFactor = vault.stableTokens(token) ? vault.stableFundingRateFactor() : vault.fundingRateFactor(); uint256 reservedAmount = vault.reservedAmounts(token); uint256 poolAmount = vault.poolAmounts(token); if (poolAmount > 0) { fundingRates[i * propsLength] = fundingRateFactor.mul(reservedAmount).div(poolAmount); } if (vault.cumulativeFundingRates(token) > 0) { uint256 nextRate = vault.getNextFundingRate(token); uint256 baseRate = vault.cumulativeFundingRates(token); fundingRates[i * propsLength + 1] = baseRate.add(nextRate); } } return fundingRates; } function getTokenSupply(IERC20 _token, address[] memory _excludedAccounts) public view returns (uint256) { uint256 supply = _token.totalSupply(); for (uint256 i = 0; i < _excludedAccounts.length; i++) { address account = _excludedAccounts[i]; uint256 balance = _token.balanceOf(account); supply = supply.sub(balance); } return supply; } function getTotalBalance(IERC20 _token, address[] memory _accounts) public view returns (uint256) { uint256 totalBalance = 0; for (uint256 i = 0; i < _accounts.length; i++) { address account = _accounts[i]; uint256 balance = _token.balanceOf(account); totalBalance = totalBalance.add(balance); } return totalBalance; } function getTokenBalances(address _account, address[] memory _tokens) public view returns (uint256[] memory) { uint256[] memory balances = new uint256[](_tokens.length); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { balances[i] = _account.balance; continue; } balances[i] = IERC20(token).balanceOf(_account); } return balances; } function getTokenBalancesWithSupplies(address _account, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory balances = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { balances[i * propsLength] = _account.balance; balances[i * propsLength + 1] = 0; continue; } balances[i * propsLength] = IERC20(token).balanceOf(_account); balances[i * propsLength + 1] = IERC20(token).totalSupply(); } return balances; } function getPrices(IVaultPriceFeed _priceFeed, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 6; uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; amounts[i * propsLength] = _priceFeed.getPrice(token, true, true, false); amounts[i * propsLength + 1] = _priceFeed.getPrice(token, false, true, false); amounts[i * propsLength + 2] = _priceFeed.getPrimaryPrice(token, true); amounts[i * propsLength + 3] = _priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 4] = _priceFeed.isAdjustmentAdditive(token) ? 1 : 0; amounts[i * propsLength + 5] = _priceFeed.adjustmentBasisPoints(token); } return amounts; } function getVaultTokenInfo(address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 10; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.getMinPrice(token); amounts[i * propsLength + 6] = vault.getMaxPrice(token); amounts[i * propsLength + 7] = vault.guaranteedUsd(token); amounts[i * propsLength + 8] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 9] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getFullVaultTokenInfo(address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 12; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.bufferAmounts(token); amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token); amounts[i * propsLength + 7] = vault.getMinPrice(token); amounts[i * propsLength + 8] = vault.getMaxPrice(token); amounts[i * propsLength + 9] = vault.guaranteedUsd(token); amounts[i * propsLength + 10] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 11] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getVaultTokenInfoV2(address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 14; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } uint256 maxGlobalShortSize = hasMaxGlobalShortSizes ? vault.maxGlobalShortSizes(token) : 0; amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.bufferAmounts(token); amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token); amounts[i * propsLength + 7] = vault.globalShortSizes(token); amounts[i * propsLength + 8] = maxGlobalShortSize; amounts[i * propsLength + 9] = vault.getMinPrice(token); amounts[i * propsLength + 10] = vault.getMaxPrice(token); amounts[i * propsLength + 11] = vault.guaranteedUsd(token); amounts[i * propsLength + 12] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 13] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getPositions(address _vault, address _account, address[] memory _collateralTokens, address[] memory _indexTokens, bool[] memory _isLong) public view returns(uint256[] memory) { uint256[] memory amounts = new uint256[](_collateralTokens.length * POSITION_PROPS_LENGTH); for (uint256 i = 0; i < _collateralTokens.length; i++) { { (uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, /* reserveAmount */, uint256 realisedPnl, bool hasRealisedProfit, uint256 lastIncreasedTime) = IVault(_vault).getPosition(_account, _collateralTokens[i], _indexTokens[i], _isLong[i]); amounts[i * POSITION_PROPS_LENGTH] = size; amounts[i * POSITION_PROPS_LENGTH + 1] = collateral; amounts[i * POSITION_PROPS_LENGTH + 2] = averagePrice; amounts[i * POSITION_PROPS_LENGTH + 3] = entryFundingRate; amounts[i * POSITION_PROPS_LENGTH + 4] = hasRealisedProfit ? 1 : 0; amounts[i * POSITION_PROPS_LENGTH + 5] = realisedPnl; amounts[i * POSITION_PROPS_LENGTH + 6] = lastIncreasedTime; } uint256 size = amounts[i * POSITION_PROPS_LENGTH]; uint256 averagePrice = amounts[i * POSITION_PROPS_LENGTH + 2]; uint256 lastIncreasedTime = amounts[i * POSITION_PROPS_LENGTH + 6]; if (averagePrice > 0) { (bool hasProfit, uint256 delta) = IVault(_vault).getDelta(_indexTokens[i], size, averagePrice, _isLong[i], lastIncreasedTime); amounts[i * POSITION_PROPS_LENGTH + 7] = hasProfit ? 1 : 0; amounts[i * POSITION_PROPS_LENGTH + 8] = delta; } } return amounts; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POSITION_PROPS_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDG_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFullVaultTokenInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFundingRates","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"getMaxAmountIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getPairInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_collateralTokens","type":"address[]"},{"internalType":"address[]","name":"_indexTokens","type":"address[]"},{"internalType":"bool[]","name":"_isLong","type":"bool[]"}],"name":"getPositions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVaultPriceFeed","name":"_priceFeed","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_yieldTrackers","type":"address[]"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getTokenBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getTokenBalancesWithSupplies","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_excludedAccounts","type":"address[]"}],"name":"getTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_yieldTokens","type":"address[]"}],"name":"getTotalStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getVaultTokenInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getVaultTokenInfoV2","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_vesters","type":"address[]"}],"name":"getVestingInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasMaxGlobalShortSizes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasMaxGlobalShortSizes","type":"bool"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916331790556158eb80620000336000396000f3fe608060405234801561001057600080fd5b506004361061013e5760003560e01c8063126082cf1461014357806312d43a511461015d57806320542568146101815780632413c8c1146102925780632ac0184c146103335780632e3e3342146103e45780633613d52714610495578063440f018c1461054657806348211934146105a05780637b906e931461065157806386d4d0f514610712578063870d917c146107c35780638e83ca32146107cb578063937a0be81461088c57806395082d251461093d57806395a7535a146109455780639b0183c3146109ff578063a4543ead14610a20578063ad7e549714610ad1578063c6f1d67614610ad9578063cfad57a214610af5578063d7176ca914610b1b578063d802178e14610b70578063dc383cab14610c21578063f3535e6c14610ddf578063fbdb05ca14610e17575b600080fd5b61014b610ec8565b60408051918252519081900360200190f35b610165610ece565b604080516001600160a01b039092168252519081900360200190f35b6102426004803603608081101561019757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156101d157600080fd5b8201836020820111156101e357600080fd5b803590602001918460208302840111600160201b8311171561020457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610edd945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561027e578181015183820152602001610266565b505050509050019250505060405180910390f35b610242600480360360208110156102a857600080fd5b810190602081018135600160201b8111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460208302840111600160201b831117156102f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506115eb945050505050565b61014b6004803603604081101561034957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460208302840111600160201b831117156103a657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506116e4945050505050565b610242600480360360408110156103fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561042457600080fd5b82018360208201111561043657600080fd5b803590602001918460208302840111600160201b8311171561045757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061180f945050505050565b610242600480360360408110156104ab57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104d557600080fd5b8201836020820111156104e757600080fd5b803590602001918460208302840111600160201b8311171561050857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a14945050505050565b6105826004803603608081101561055c57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611e4e565b60408051938452602084019290925282820152519081900360600190f35b610242600480360360408110156105b657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105e057600080fd5b8201836020820111156105f257600080fd5b803590602001918460208302840111600160201b8311171561061357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506123b3945050505050565b6102426004803603608081101561066757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156106a157600080fd5b8201836020820111156106b357600080fd5b803590602001918460208302840111600160201b831117156106d457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612867945050505050565b6102426004803603604081101561072857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561075257600080fd5b82018360208201111561076457600080fd5b803590602001918460208302840111600160201b8311171561078557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613098945050505050565b61014b613198565b610242600480360360808110156107e157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061319d945050505050565b610242600480360360408110156108a257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156108cc57600080fd5b8201836020820111156108de57600080fd5b803590602001918460208302840111600160201b831117156108ff57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b1a945050505050565b61014b613caf565b6102426004803603606081101561095b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561098e57600080fd5b8201836020820111156109a057600080fd5b803590602001918460208302840111600160201b831117156109c157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613cbf945050505050565b610a1e60048036036020811015610a1557600080fd5b5035151561418d565b005b61024260048036036040811015610a3657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610a6057600080fd5b820183602082011115610a7257600080fd5b803590602001918460208302840111600160201b83111715610a9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614202945050505050565b61014b61446e565b610ae1614473565b604080519115158252519081900360200190f35b610a1e60048036036020811015610b0b57600080fd5b50356001600160a01b0316614483565b610b5760048036036080811015610b3157600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356144fc565b6040805192835260208301919091528051918290030190f35b61024260048036036040811015610b8657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610bb057600080fd5b820183602082011115610bc257600080fd5b803590602001918460208302840111600160201b83111715610be357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614bb2945050505050565b610242600480360360a0811015610c3757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610c6a57600080fd5b820183602082011115610c7c57600080fd5b803590602001918460208302840111600160201b83111715610c9d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610cec57600080fd5b820183602082011115610cfe57600080fd5b803590602001918460208302840111600160201b83111715610d1f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d6e57600080fd5b820183602082011115610d8057600080fd5b803590602001918460208302840111600160201b83111715610da157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614cfe945050505050565b61014b60048036036060811015610df557600080fd5b506001600160a01b0381358116916020810135821691604090910135166150fa565b61014b60048036036040811015610e2d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610e5757600080fd5b820183602082011115610e6957600080fd5b803590602001918460208302840111600160201b83111715610e8a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506155ad945050505050565b61271081565b6000546001600160a01b031681565b60606000600a905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d6020811015610f4f57600080fd5b5051855190915060609084026001600160401b0381118015610f7057600080fd5b50604051908082528060200260200182016040528015610f9a578160200160208202803683370190505b50905060005b86518110156115de576000878281518110610fb757fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415610fdf5750885b846001600160a01b03166352f55eed826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d602081101561105657600080fd5b50518351849084890290811061106857fe5b602002602001018181525050846001600160a01b031663c3c7b9e9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d60208110156110eb57600080fd5b5051835184906001858a020190811061110057fe5b602002602001018181525050846001600160a01b0316631aa4ace5826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b5051835184906002858a020190811061119857fe5b602002602001018181525050846001600160a01b0316632c668ec1828b6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156111f957600080fd5b505afa15801561120d573d6000803e3d6000fd5b505050506040513d602081101561122357600080fd5b5051835184906003858a020190811061123857fe5b602002602001018181525050846001600160a01b031663ab2f3ad4826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561129157600080fd5b505afa1580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b5051835184906004858a02019081106112d057fe5b602002602001018181525050846001600160a01b03166381a612d6826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b5051835184906005858a020190811061136857fe5b602002602001018181525050846001600160a01b031663e124e6d2826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d60208110156113eb57600080fd5b5051835184906006858a020190811061140057fe5b602002602001018181525050846001600160a01b031663f07456ce826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561145957600080fd5b505afa15801561146d573d6000803e3d6000fd5b505050506040513d602081101561148357600080fd5b5051835184906007858a020190811061149857fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918716926356c8c2c192604480840193829003018186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b5051835184906008858a020190811061153157fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918716926356c8c2c192604480840193829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d60208110156115b557600080fd5b5051835184906009858a02019081106115ca57fe5b602090810291909101015250600101610fa0565b5098975050505050505050565b60608082516001600160401b038111801561160557600080fd5b5060405190808252806020026020018201604052801561162f578160200160208202803683370190505b50905060005b83518110156116dd57600084828151811061164c57fe5b60200260200101519050806001600160a01b031663817b1cd26040518163ffffffff1660e01b815260040160206040518083038186803b15801561168f57600080fd5b505afa1580156116a3573d6000803e3d6000fd5b505050506040513d60208110156116b957600080fd5b505183518490849081106116c957fe5b602090810291909101015250600101611635565b5092915050565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d602081101561174a57600080fd5b5051905060005b835181101561180557600084828151811061176857fe5b602002602001015190506000866001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117c157600080fd5b505afa1580156117d5573d6000803e3d6000fd5b505050506040513d60208110156117eb57600080fd5b505190506117f98482615666565b93505050600101611751565b5090505b92915050565b60606000600290506060818451026001600160401b038111801561183257600080fd5b5060405190808252806020026020018201604052801561185c578160200160208202803683370190505b50905060005b8451811015611a0b57600085828151811061187957fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156118e857866001600160a01b03163183858402815181106118b757fe5b602002602001018181525050600083858402600101815181106118d657fe5b60200260200101818152505050611a03565b806001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561193557600080fd5b505afa158015611949573d6000803e3d6000fd5b505050506040513d602081101561195f57600080fd5b50518351849084870290811061197157fe5b602002602001018181525050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119b657600080fd5b505afa1580156119ca573d6000803e3d6000fd5b505050506040513d60208110156119e057600080fd5b5051835184906001858802019081106119f557fe5b602002602001018181525050505b600101611862565b50949350505050565b60606000600690506060818451026001600160401b0381118015611a3757600080fd5b50604051908082528060200260200182016040528015611a61578160200160208202803683370190505b50905060005b8451811015611a0b576000858281518110611a7e57fe5b602090810291909101810151604080516317e1d38560e11b81526001600160a01b0380841660048301526001602483018190526044830152600060648301529151929450908a1692632fc3a70a92608480840193829003018186803b158015611ae657600080fd5b505afa158015611afa573d6000803e3d6000fd5b505050506040513d6020811015611b1057600080fd5b505183518490848702908110611b2257fe5b602090810291909101810191909152604080516317e1d38560e11b81526001600160a01b0384811660048301526000602483018190526001604484015260648301529151918a1692632fc3a70a92608480840193829003018186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b505183518490600185880201908110611bc957fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918a16926356c8c2c192604480840193829003018186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b505183518490600285880201908110611c6257fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918a16926356c8c2c192604480840193829003018186803b158015611cbc57600080fd5b505afa158015611cd0573d6000803e3d6000fd5b505050506040513d6020811015611ce657600080fd5b505183518490600385880201908110611cfb57fe5b602002602001018181525050866001600160a01b0316636ce8a44b826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d6020811015611d7e57600080fd5b5051611d8b576000611d8e565b60015b60ff168385840260040181518110611da257fe5b602002602001018181525050866001600160a01b03166348cac277826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611dfb57600080fd5b505afa158015611e0f573d6000803e3d6000fd5b505050506040513d6020811015611e2557600080fd5b505183518490600585880201908110611e3a57fe5b602090810291909101015250600101611a67565b600080600080876001600160a01b03166381a612d6886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ea157600080fd5b505afa158015611eb5573d6000803e3d6000fd5b505050506040513d6020811015611ecb57600080fd5b5051604080516323b95ceb60e21b81526001600160a01b038a811660048301529151929350600092918b1691638ee573ac91602480820192602092909190829003018186803b158015611f1d57600080fd5b505afa158015611f31573d6000803e3d6000fd5b505050506040513d6020811015611f4757600080fd5b505190506000611f6d68327cb2734119d3b7a9601e1b611f6789866156a8565b90615701565b9050611f89600a83900a611f6783670de0b6b3a76400006156a8565b905060008a6001600160a01b03166342b60b038b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611fda57600080fd5b505afa158015611fee573d6000803e3d6000fd5b505050506040513d602081101561200457600080fd5b5051801561208757508a6001600160a01b03166342b60b038a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d602081101561208457600080fd5b50515b90506000816120fa578b6001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b1580156120c957600080fd5b505afa1580156120dd573d6000803e3d6000fd5b505050506040513d60208110156120f357600080fd5b5051612160565b8b6001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b15801561213357600080fd5b505afa158015612147573d6000803e3d6000fd5b505050506040513d602081101561215d57600080fd5b50515b90506000826121d3578c6001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121a257600080fd5b505afa1580156121b6573d6000803e3d6000fd5b505050506040513d60208110156121cc57600080fd5b5051612239565b8c6001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d602081101561223657600080fd5b50515b905060008d6001600160a01b031663c7e074c38e87868660016040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b1580156122ad57600080fd5b505afa1580156122c1573d6000803e3d6000fd5b505050506040513d60208110156122d757600080fd5b8101908080519060200190929190505050905060008e6001600160a01b031663c7e074c38e88878760006040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b15801561235c57600080fd5b505afa158015612370573d6000803e3d6000fd5b505050506040513d602081101561238657600080fd5b505190506000818311612399578161239b565b825b9b509199509750505050505050509450945094915050565b60606000600790506060818451026001600160401b03811180156123d657600080fd5b50604051908082528060200260200182016040528015612400578160200160208202803683370190505b50905060005b8451811015611a0b57600085828151811061241d57fe5b60200260200101519050806001600160a01b0316635d50e729886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561247457600080fd5b505afa158015612488573d6000803e3d6000fd5b505050506040513d602081101561249e57600080fd5b5051835184908487029081106124b057fe5b602002602001018181525050806001600160a01b031663d5a73fdd886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561250957600080fd5b505afa15801561251d573d6000803e3d6000fd5b505050506040513d602081101561253357600080fd5b50518351849060018588020190811061254857fe5b60200260200101818152505085828151811061256057fe5b60200260200101516001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b5051835184906002858802019081106125f357fe5b602002602001018181525050806001600160a01b03166371417b32886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561264c57600080fd5b505afa158015612660573d6000803e3d6000fd5b505050506040513d602081101561267657600080fd5b50518351849060038588020190811061268b57fe5b602002602001018181525050806001600160a01b031663402914f5886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156126e457600080fd5b505afa1580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518351849060048588020190811061272357fe5b602002602001018181525050806001600160a01b03166308f26c76886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561277c57600080fd5b505afa158015612790573d6000803e3d6000fd5b505050506040513d60208110156127a657600080fd5b5051835184906005858802019081106127bb57fe5b602002602001018181525050806001600160a01b03166345f01ee6886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561281457600080fd5b505afa158015612828573d6000803e3d6000fd5b505050506040513d602081101561283e57600080fd5b50518351849060068588020190811061285357fe5b602090810291909101015250600101612406565b60606000600c905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128af57600080fd5b505afa1580156128c3573d6000803e3d6000fd5b505050506040513d60208110156128d957600080fd5b5051855190915060609084026001600160401b03811180156128fa57600080fd5b50604051908082528060200260200182016040528015612924578160200160208202803683370190505b50905060005b86518110156115de57600087828151811061294157fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156129695750885b846001600160a01b03166352f55eed826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156129b657600080fd5b505afa1580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b5051835184908489029081106129f257fe5b602002602001018181525050846001600160a01b031663c3c7b9e9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612a4b57600080fd5b505afa158015612a5f573d6000803e3d6000fd5b505050506040513d6020811015612a7557600080fd5b5051835184906001858a0201908110612a8a57fe5b602002602001018181525050846001600160a01b0316631aa4ace5826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ae357600080fd5b505afa158015612af7573d6000803e3d6000fd5b505050506040513d6020811015612b0d57600080fd5b5051835184906002858a0201908110612b2257fe5b602002602001018181525050846001600160a01b0316632c668ec1828b6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015612b8357600080fd5b505afa158015612b97573d6000803e3d6000fd5b505050506040513d6020811015612bad57600080fd5b5051835184906003858a0201908110612bc257fe5b602002602001018181525050846001600160a01b031663ab2f3ad4826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d6020811015612c4557600080fd5b5051835184906004858a0201908110612c5a57fe5b602002602001018181525050846001600160a01b0316634a993ee9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b5051835184906005858a0201908110612cf257fe5b602002602001018181525050846001600160a01b031663ad1e4f8d826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612d4b57600080fd5b505afa158015612d5f573d6000803e3d6000fd5b505050506040513d6020811015612d7557600080fd5b5051835184906006858a0201908110612d8a57fe5b602002602001018181525050846001600160a01b03166381a612d6826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d6020811015612e0d57600080fd5b5051835184906007858a0201908110612e2257fe5b602002602001018181525050846001600160a01b031663e124e6d2826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612e7b57600080fd5b505afa158015612e8f573d6000803e3d6000fd5b505050506040513d6020811015612ea557600080fd5b5051835184906008858a0201908110612eba57fe5b602002602001018181525050846001600160a01b031663f07456ce826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612f1357600080fd5b505afa158015612f27573d6000803e3d6000fd5b505050506040513d6020811015612f3d57600080fd5b5051835184906009858a0201908110612f5257fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918716926356c8c2c192604480840193829003018186803b158015612fac57600080fd5b505afa158015612fc0573d6000803e3d6000fd5b505050506040513d6020811015612fd657600080fd5b505183518490600a858a0201908110612feb57fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918716926356c8c2c192604480840193829003018186803b15801561304557600080fd5b505afa158015613059573d6000803e3d6000fd5b505050506040513d602081101561306f57600080fd5b505183518490600b858a020190811061308457fe5b60209081029190910101525060010161292a565b60608082516001600160401b03811180156130b257600080fd5b506040519080825280602002602001820160405280156130dc578160200160208202803683370190505b50905060005b835181101561180557846001600160a01b0316631ce9cb8f85838151811061310657fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561314b57600080fd5b505afa15801561315f573d6000803e3d6000fd5b505050506040513d602081101561317557600080fd5b5051825183908390811061318557fe5b60209081029190910101526001016130e2565b601281565b60606000600e905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156131e557600080fd5b505afa1580156131f9573d6000803e3d6000fd5b505050506040513d602081101561320f57600080fd5b5051855190915060609084026001600160401b038111801561323057600080fd5b5060405190808252806020026020018201604052801561325a578160200160208202803683370190505b50905060005b86518110156115de57600087828151811061327757fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561329f5750885b60008054600160a01b900460ff166132b8576000613332565b856001600160a01b0316639698d25a836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561330557600080fd5b505afa158015613319573d6000803e3d6000fd5b505050506040513d602081101561332f57600080fd5b50515b9050856001600160a01b03166352f55eed836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561338157600080fd5b505afa158015613395573d6000803e3d6000fd5b505050506040513d60208110156133ab57600080fd5b505184518590858a029081106133bd57fe5b602002602001018181525050856001600160a01b031663c3c7b9e9836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561341657600080fd5b505afa15801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b5051845185906001868b020190811061345557fe5b602002602001018181525050856001600160a01b0316631aa4ace5836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156134ae57600080fd5b505afa1580156134c2573d6000803e3d6000fd5b505050506040513d60208110156134d857600080fd5b5051845185906002868b02019081106134ed57fe5b602002602001018181525050856001600160a01b0316632c668ec1838c6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561354e57600080fd5b505afa158015613562573d6000803e3d6000fd5b505050506040513d602081101561357857600080fd5b5051845185906003868b020190811061358d57fe5b602002602001018181525050856001600160a01b031663ab2f3ad4836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156135e657600080fd5b505afa1580156135fa573d6000803e3d6000fd5b505050506040513d602081101561361057600080fd5b5051845185906004868b020190811061362557fe5b602002602001018181525050856001600160a01b0316634a993ee9836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561367e57600080fd5b505afa158015613692573d6000803e3d6000fd5b505050506040513d60208110156136a857600080fd5b5051845185906005868b02019081106136bd57fe5b602002602001018181525050856001600160a01b031663ad1e4f8d836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561371657600080fd5b505afa15801561372a573d6000803e3d6000fd5b505050506040513d602081101561374057600080fd5b5051845185906006868b020190811061375557fe5b602002602001018181525050856001600160a01b0316638a78daa8836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156137ae57600080fd5b505afa1580156137c2573d6000803e3d6000fd5b505050506040513d60208110156137d857600080fd5b5051845185906007868b02019081106137ed57fe5b60200260200101818152505080848885026008018151811061380b57fe5b602002602001018181525050856001600160a01b03166381a612d6836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561386457600080fd5b505afa158015613878573d6000803e3d6000fd5b505050506040513d602081101561388e57600080fd5b5051845185906009868b02019081106138a357fe5b602002602001018181525050856001600160a01b031663e124e6d2836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138fc57600080fd5b505afa158015613910573d6000803e3d6000fd5b505050506040513d602081101561392657600080fd5b505184518590600a868b020190811061393b57fe5b602002602001018181525050856001600160a01b031663f07456ce836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561399457600080fd5b505afa1580156139a8573d6000803e3d6000fd5b505050506040513d60208110156139be57600080fd5b505184518590600b868b02019081106139d357fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038581166004830152600060248301529151918816926356c8c2c192604480840193829003018186803b158015613a2d57600080fd5b505afa158015613a41573d6000803e3d6000fd5b505050506040513d6020811015613a5757600080fd5b505184518590600c868b0201908110613a6c57fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038581166004830152600160248301529151918816926356c8c2c192604480840193829003018186803b158015613ac657600080fd5b505afa158015613ada573d6000803e3d6000fd5b505050506040513d6020811015613af057600080fd5b505184518590600d868b0201908110613b0557fe5b60209081029190910101525050600101613260565b60606000600290506060818451026001600160401b0381118015613b3d57600080fd5b50604051908082528060200260200182016040528015613b67578160200160208202803683370190505b50905060005b8451811015611a0b576000858281518110613b8457fe5b60200260200101519050806001600160a01b031663402914f5886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6020811015613c0557600080fd5b505183518490848702908110613c1757fe5b602002602001018181525050806001600160a01b0316632459f51d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5c57600080fd5b505afa158015613c70573d6000803e3d6000fd5b505050506040513d6020811015613c8657600080fd5b505183518490600185880201908110613c9b57fe5b602090810291909101015250600101613b6d565b68327cb2734119d3b7a9601e1b81565b60606000600290506060818451026001600160401b0381118015613ce257600080fd5b50604051908082528060200260200182016040528015613d0c578160200160208202803683370190505b5090508560005b855181101561417f576000868281518110613d2a57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415613d525750865b6000836001600160a01b03166342b60b03836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613da157600080fd5b505afa158015613db5573d6000803e3d6000fd5b505050506040513d6020811015613dcb57600080fd5b5051613e3b57836001600160a01b031663c4f718bf6040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0a57600080fd5b505afa158015613e1e573d6000803e3d6000fd5b505050506040513d6020811015613e3457600080fd5b5051613ea1565b836001600160a01b031663134ca63b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613e7457600080fd5b505afa158015613e88573d6000803e3d6000fd5b505050506040513d6020811015613e9e57600080fd5b50515b90506000846001600160a01b031663c3c7b9e9846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613ef257600080fd5b505afa158015613f06573d6000803e3d6000fd5b505050506040513d6020811015613f1c57600080fd5b5051604080516352f55eed60e01b81526001600160a01b0386811660048301529151929350600092918816916352f55eed91602480820192602092909190829003018186803b158015613f6e57600080fd5b505afa158015613f82573d6000803e3d6000fd5b505050506040513d6020811015613f9857600080fd5b505190508015613fcb57613fb081611f6785856156a8565b8789870281518110613fbe57fe5b6020026020010181815250505b6000866001600160a01b031663c65bc7b1866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561401a57600080fd5b505afa15801561402e573d6000803e3d6000fd5b505050506040513d602081101561404457600080fd5b5051111561416f576000866001600160a01b031663a93acac2866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561409b57600080fd5b505afa1580156140af573d6000803e3d6000fd5b505050506040513d60208110156140c557600080fd5b50516040805163c65bc7b160e01b81526001600160a01b0388811660048301529151929350600092918a169163c65bc7b191602480820192602092909190829003018186803b15801561411757600080fd5b505afa15801561412b573d6000803e3d6000fd5b505050506040513d602081101561414157600080fd5b5051905061414f8183615740565b898b89026001018151811061416057fe5b60200260200101818152505050505b505060019092019150613d139050565b5090925050505b9392505050565b6000546001600160a01b031633146141e4576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b60008054911515600160a01b0260ff60a01b19909216919091179055565b80516060906002908190839082900482026001600160401b038111801561422857600080fd5b50604051908082528060200260200182016040528015614252578160200160208202803683370190505b50905060005b8386518161426257fe5b04811015614464576000868583028151811061427a57fe5b602002602001015190506000878684026001018151811061429757fe5b602002602001015190506000896001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561430157600080fd5b505afa158015614315573d6000803e3d6000fd5b505050506040513d602081101561432b57600080fd5b5051604080516370a0823160e01b81526001600160a01b0380841660048301529151929350908516916370a0823191602480820192602092909190829003018186803b15801561437a57600080fd5b505afa15801561438e573d6000803e3d6000fd5b505050506040513d60208110156143a457600080fd5b5051855186908689029081106143b657fe5b602002602001018181525050816001600160a01b03166370a08231826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561440f57600080fd5b505afa158015614423573d6000803e3d6000fd5b505050506040513d602081101561443957600080fd5b5051855186906001878a020190811061444e57fe5b6020908102919091010152505050600101614258565b5095945050505050565b600981565b600054600160a01b900460ff1681565b6000546001600160a01b031633146144da576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000866001600160a01b03166381a612d6876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561454e57600080fd5b505afa158015614562573d6000803e3d6000fd5b505050506040513d602081101561457857600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0389811660048301529151929350600092918a1691638ee573ac91602480820192602092909190829003018186803b1580156145ca57600080fd5b505afa1580156145de573d6000803e3d6000fd5b505050506040513d60208110156145f457600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0389811660048301529151929350600092918b1691638ee573ac91602480820192602092909190829003018186803b15801561464657600080fd5b505afa15801561465a573d6000803e3d6000fd5b505050506040513d602081101561467057600080fd5b5051905060008061469168327cb2734119d3b7a9601e1b611f678a886156a8565b90506146ad600a85900a611f6783670de0b6b3a76400006156a8565b905060008b6001600160a01b03166342b60b038c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156146fe57600080fd5b505afa158015614712573d6000803e3d6000fd5b505050506040513d602081101561472857600080fd5b505180156147ab57508b6001600160a01b03166342b60b038b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561477e57600080fd5b505afa158015614792573d6000803e3d6000fd5b505050506040513d60208110156147a857600080fd5b50515b905060008161481e578c6001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b1580156147ed57600080fd5b505afa158015614801573d6000803e3d6000fd5b505050506040513d602081101561481757600080fd5b5051614884565b8c6001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b15801561485757600080fd5b505afa15801561486b573d6000803e3d6000fd5b505050506040513d602081101561488157600080fd5b50515b90506000826148f7578d6001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156148c657600080fd5b505afa1580156148da573d6000803e3d6000fd5b505050506040513d60208110156148f057600080fd5b505161495d565b8d6001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561493057600080fd5b505afa158015614944573d6000803e3d6000fd5b505050506040513d602081101561495a57600080fd5b50515b905060008e6001600160a01b031663c7e074c38f87868660016040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b1580156149d157600080fd5b505afa1580156149e5573d6000803e3d6000fd5b505050506040513d60208110156149fb57600080fd5b8101908080519060200190929190505050905060008f6001600160a01b031663c7e074c38f88878760006040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b158015614a8057600080fd5b505afa158015614a94573d6000803e3d6000fd5b505050506040513d6020811015614aaa57600080fd5b50519050808211614abb5780614abd565b815b965050505050505060008a6001600160a01b031663e124e6d28a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614b1457600080fd5b505afa158015614b28573d6000803e3d6000fd5b505050506040513d6020811015614b3e57600080fd5b505190506000614b5282611f678b896156a8565b9050614b7185600a0a611f6786600a0a846156a890919063ffffffff16565b90506000614b8f612710611f67614b888288615666565b85906156a8565b90506000614b9d8383615666565b919e919d50909b505050505050505050505050565b60608082516001600160401b0381118015614bcc57600080fd5b50604051908082528060200260200182016040528015614bf6578160200160208202803683370190505b50905060005b8351811015611805576000848281518110614c1357fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415614c6157856001600160a01b031631838381518110614c4f57fe5b60200260200101818152505050614cf6565b806001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614cae57600080fd5b505afa158015614cc2573d6000803e3d6000fd5b505050506040513d6020811015614cd857600080fd5b50518351849084908110614ce857fe5b602002602001018181525050505b600101614bfc565b60608060098551026001600160401b0381118015614d1b57600080fd5b50604051908082528060200260200182016040528015614d45578160200160208202803683370190505b50905060005b85518110156150ef5760008060008060008060008e6001600160a01b0316634a3f088d8f8f8b81518110614d7b57fe5b60200260200101518f8c81518110614d8f57fe5b60200260200101518f8d81518110614da357fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019450505050506101006040518083038186803b158015614e1257600080fd5b505afa158015614e26573d6000803e3d6000fd5b505050506040513d610100811015614e3d57600080fd5b50805160208201516040830151606084015160a085015160c086015160e0909601518f51959d50939b509199509750955091935090915087908a9060098b02908110614e8557fe5b602002602001018181525050858960098a0260010181518110614ea457fe5b602002602001018181525050848960098a0260020181518110614ec357fe5b602002602001018181525050838960098a0260030181518110614ee257fe5b60200260200101818152505081614efa576000614efd565b60015b60ff168960098a0260040181518110614f1257fe5b602002602001018181525050828960098a0260050181518110614f3157fe5b602002602001018181525050808960098a0260060181518110614f5057fe5b602002602001018181525050505050505050506000826009830281518110614f7457fe5b602002602001015190506000836009840260020181518110614f9257fe5b602002602001015190506000846009850260060181518110614fb057fe5b6020026020010151905060008211156150e4576000808c6001600160a01b0316635c07eaab8b8881518110614fe157fe5b602002602001015187878d8b81518110614ff757fe5b6020026020010151886040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001831515815260200182815260200195505050505050604080518083038186803b15801561505a57600080fd5b505afa15801561506e573d6000803e3d6000fd5b505050506040513d604081101561508457600080fd5b50805160209091015190925090508161509e5760006150a1565b60015b60ff168760098802600701815181106150b657fe5b602002602001018181525050808760098802600801815181106150d557fe5b60200260200101818152505050505b505050600101614d4b565b509695505050505050565b600080846001600160a01b03166381a612d6856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561514a57600080fd5b505afa15801561515e573d6000803e3d6000fd5b505050506040513d602081101561517457600080fd5b505160408051637092736960e11b81526001600160a01b03868116600483015291519293506000929188169163e124e6d291602480820192602092909190829003018186803b1580156151c657600080fd5b505afa1580156151da573d6000803e3d6000fd5b505050506040513d60208110156151f057600080fd5b5051604080516323b95ceb60e21b81526001600160a01b038881166004830152915192935060009291891691638ee573ac91602480820192602092909190829003018186803b15801561524257600080fd5b505afa158015615256573d6000803e3d6000fd5b505050506040513d602081101561526c57600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0388811660048301529151929350600092918a1691638ee573ac91602480820192602092909190829003018186803b1580156152be57600080fd5b505afa1580156152d2573d6000803e3d6000fd5b505050506040513d60208110156152e857600080fd5b5051604080516352f55eed60e01b81526001600160a01b038981166004830152915192935060009283928c16916352f55eed916024808301926020929190829003018186803b15801561533a57600080fd5b505afa15801561534e573d6000803e3d6000fd5b505050506040513d602081101561536457600080fd5b50516040805163c3c7b9e960e01b81526001600160a01b038b811660048301529151929350600092918d169163c3c7b9e991602480820192602092909190829003018186803b1580156153b657600080fd5b505afa1580156153ca573d6000803e3d6000fd5b505050506040513d60208110156153e057600080fd5b505160408051634a993ee960e01b81526001600160a01b038c811660048301529151929350600092918e1691634a993ee991602480820192602092909190829003018186803b15801561543257600080fd5b505afa158015615446573d6000803e3d6000fd5b505050506040513d602081101561545c57600080fd5b50519050600081831161546f5781615471565b825b905083811061548c5760009950505050505050505050614186565b60006154988583615666565b90506154c587600a0a611f678a600a0a6154bf8e611f678f886156a890919063ffffffff16565b906156a8565b955050505050506000896001600160a01b031663ad1e4f8d8a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561551b57600080fd5b505afa15801561552f573d6000803e3d6000fd5b505050506040513d602081101561554557600080fd5b5051905080156115de57600061556b670de0b6b3a7640000611f6784600a89900a6156a8565b905061558787611f678368327cb2734119d3b7a9601e1b6156a8565b90508083111561559f57965061418695505050505050565b505098975050505050505050565b600080805b83518110156118055760008482815181106155c957fe5b602002602001015190506000866001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561562257600080fd5b505afa158015615636573d6000803e3d6000fd5b505050506040513d602081101561564c57600080fd5b5051905061565a8482615740565b935050506001016155b2565b600061418683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615798565b6000826156b757506000611809565b828202828482816156c457fe5b04146141865760405162461bcd60e51b81526004018080602001828103825260218152602001806158956021913960400191505060405180910390fd5b600061418683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061582f565b600082820183811015614186576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600081848411156158275760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156157ec5781810151838201526020016157d4565b50505050905090810190601f1680156158195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361587e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156157ec5781810151838201526020016157d4565b50600083858161588a57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122041d4c1a683d9061f2c7515e4a46c7a7deb3a27f58d820446e948783d5a211b5c64736f6c634300060c0033
Deployed ByteCode Sourcemap
19118:18562:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19190:52;;;:::i;:::-;;;;;;;;;;;;;;;;89:18;;;:::i;:::-;;;;-1:-1:-1;;;;;89:18:0;;;;;;;;;;;;;;31172:1360;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31172:1360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31172:1360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31172:1360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31172:1360:0;;-1:-1:-1;31172:1360:0;;-1:-1:-1;;;;;31172:1360:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24283:391;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24283:391:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24283:391:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24283:391:0;;-1:-1:-1;24283:391:0;;-1:-1:-1;;;;;24283:391:0:i;28179:416::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28179:416:0;;;;;;;;;;;;;;;-1:-1:-1;;;28179:416:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28179:416:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28179:416:0;;-1:-1:-1;28179:416:0;;-1:-1:-1;;;;;28179:416:0:i;29529:726::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29529:726:0;;;;;;;;;;;;;;;-1:-1:-1;;;29529:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29529:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29529:726:0;;-1:-1:-1;29529:726:0;;-1:-1:-1;;;;;29529:726:0:i;30263:901::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30263:901:0;;;;;;;;;;;;;;;-1:-1:-1;;;30263:901:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30263:901:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30263:901:0;;-1:-1:-1;30263:901:0;;-1:-1:-1;;;;;30263:901:0:i;22742:1194::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22742:1194:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;25264:935;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25264:935:0;;;;;;;;;;;;;;;-1:-1:-1;;;25264:935:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25264:935:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25264:935:0;;-1:-1:-1;25264:935:0;;-1:-1:-1;;;;;25264:935:0:i;32540:1511::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32540:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32540:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32540:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32540:1511:0;;-1:-1:-1;32540:1511:0;;-1:-1:-1;;;;;32540:1511:0:i;23944:331::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23944:331:0;;;;;;;;;;;;;;;-1:-1:-1;;;23944:331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23944:331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23944:331:0;;-1:-1:-1;23944:331:0;;-1:-1:-1;;;;;23944:331:0:i;19362:42::-;;;:::i;34059:1757::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34059:1757:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34059:1757:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34059:1757:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34059:1757:0;;-1:-1:-1;34059:1757:0;;-1:-1:-1;;;;;34059:1757:0:i;24682:574::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24682:574:0;;;;;;;;;;;;;;;-1:-1:-1;;;24682:574:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24682:574:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24682:574:0;;-1:-1:-1;24682:574:0;;-1:-1:-1;;;;;24682:574:0:i;19305:50::-;;;:::i;26941:1230::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26941:1230:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26941:1230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26941:1230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26941:1230:0;;-1:-1:-1;26941:1230:0;;-1:-1:-1;;;;;26941:1230:0:i;19456:131::-;;;;;;;;;;;;;;;;-1:-1:-1;19456:131:0;;;;:::i;:::-;;26207:726;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26207:726:0;;;;;;;;;;;;;;;-1:-1:-1;;;26207:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26207:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26207:726:0;;-1:-1:-1;26207:726:0;;-1:-1:-1;;;;;26207:726:0:i;19249:49::-;;;:::i;19413:34::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;289:76;;;;;;;;;;;;;;;;-1:-1:-1;289:76:0;-1:-1:-1;;;;;289:76:0;;:::i;21019:1715::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21019:1715:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29009:512;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29009:512:0;;;;;;;;;;;;;;;-1:-1:-1;;;29009:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29009:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29009:512:0;;-1:-1:-1;29009:512:0;;-1:-1:-1;;;;;29009:512:0:i;35824:1853::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35824:1853:0;;;;;;;;-1:-1:-1;35824:1853:0;;-1:-1:-1;;;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35824:1853:0;;;;;;;;-1:-1:-1;35824:1853:0;;-1:-1:-1;;;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35824:1853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35824:1853:0;;-1:-1:-1;35824:1853:0;;-1:-1:-1;;;;;35824:1853:0:i;19595:1416::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19595:1416:0;;;;;;;;;;;;;;;;;;;:::i;28603:398::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28603:398:0;;;;;;;;;;;;;;;-1:-1:-1;;;28603:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28603:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28603:398:0;;-1:-1:-1;28603:398:0;;-1:-1:-1;;;;;28603:398:0:i;19190:52::-;19237:5;19190:52;:::o;89:18::-;;;-1:-1:-1;;;;;89:18:0;;:::o;31172:1360::-;31298:16;31327:19;31349:2;31327:24;;31364:12;31386:6;31364:29;;31404:25;31448:5;-1:-1:-1;;;;;31448:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31448:17:0;31520:14;;31448:17;;-1:-1:-1;31479:24:0;;31520:28;;-1:-1:-1;;;;;31506:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31506:43:0;;31479:70;;31565:9;31560:938;31584:7;:14;31580:1;:18;31560:938;;;31620:13;31636:7;31644:1;31636:10;;;;;;;;;;;;;;31620:26;;31682:1;-1:-1:-1;;;;;31665:19:0;:5;-1:-1:-1;;;;;31665:19:0;;31661:73;;;-1:-1:-1;31713:5:0;31661:73;31775:5;-1:-1:-1;;;;;31775:17:0;;31793:5;31775:24;;;;;;;;;;;;;-1:-1:-1;;;;;31775:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31775:24:0;31748;;:7;;31756:15;;;;31748:24;;;;;;;;;;;:51;;;;;31845:5;-1:-1:-1;;;;;31845:21:0;;31867:5;31845:28;;;;;;;;;;;;;-1:-1:-1;;;;;31845:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31845:28:0;31814;;:7;;31840:1;31822:15;;;:19;;31814:28;;;;;;;;;;;:59;;;;;31919:5;-1:-1:-1;;;;;31919:17:0;;31937:5;31919:24;;;;;;;;;;;;;-1:-1:-1;;;;;31919:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31919:24:0;31888:28;;:7;;31914:1;31896:15;;;:19;;31888:28;;;;;;;;;;;:55;;;;;31989:5;-1:-1:-1;;;;;31989:25:0;;32015:5;32022:11;31989:45;;;;;;;;;;;;;-1:-1:-1;;;;;31989:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31989:45:0;31958:28;;:7;;31984:1;31966:15;;;:19;;31958:28;;;;;;;;;;;:76;;;;;32080:5;-1:-1:-1;;;;;32080:18:0;;32099:5;32080:25;;;;;;;;;;;;;-1:-1:-1;;;;;32080:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32080:25:0;32049:28;;:7;;32075:1;32057:15;;;:19;;32049:28;;;;;;;;;;;:56;;;;;32151:5;-1:-1:-1;;;;;32151:17:0;;32169:5;32151:24;;;;;;;;;;;;;-1:-1:-1;;;;;32151:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32151:24:0;32120:28;;:7;;32146:1;32128:15;;;:19;;32120:28;;;;;;;;;;;:55;;;;;32221:5;-1:-1:-1;;;;;32221:17:0;;32239:5;32221:24;;;;;;;;;;;;;-1:-1:-1;;;;;32221:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32221:24:0;32190:28;;:7;;32216:1;32198:15;;;:19;;32190:28;;;;;;;;;;;:55;;;;;32291:5;-1:-1:-1;;;;;32291:19:0;;32311:5;32291:26;;;;;;;;;;;;;-1:-1:-1;;;;;32291:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32291:26:0;32260:28;;:7;;32286:1;32268:15;;;:19;;32260:28;;;;;;;;;;;;;;;;:57;;;;32363:39;;;-1:-1:-1;;;32363:39:0;;-1:-1:-1;;;;;32363:39:0;;;;;;;32396:5;32363:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32363:39:0;32332:28;;:7;;32358:1;32340:15;;;:19;;32332:28;;;;;;;;;;;;;;;;:70;;;;32448:38;;;-1:-1:-1;;;32448:38:0;;-1:-1:-1;;;;;32448:38:0;;;;;;;32481:4;32448:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32448:38:0;32417:28;;:7;;32443:1;32425:15;;;:19;;32417:28;;;;;;;;;;;;;;;:69;-1:-1:-1;31600:3:0;;31560:938;;;-1:-1:-1;32517:7:0;31172:1360;-1:-1:-1;;;;;;;;31172:1360:0:o;24283:391::-;24359:16;24388:24;24429:12;:19;-1:-1:-1;;;;;24415:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24415:34:0;;24388:61;;24465:9;24460:182;24484:12;:19;24480:1;:23;24460:182;;;24525:22;24562:12;24575:1;24562:15;;;;;;;;;;;;;;24525:53;;24606:10;-1:-1:-1;;;;;24606:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24606:24:0;24593:10;;:7;;24601:1;;24593:10;;;;;;;;;;;;;;;:37;-1:-1:-1;24505:3:0;;24460:182;;;-1:-1:-1;24659:7:0;24283:391;-1:-1:-1;;24283:391:0:o;28179:416::-;28275:7;28295:14;28312:6;-1:-1:-1;;;;;28312:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28312:20:0;;-1:-1:-1;28348:9:0;28343:221;28367:17;:24;28363:1;:28;28343:221;;;28413:15;28431:17;28449:1;28431:20;;;;;;;;;;;;;;28413:38;;28466:15;28484:6;-1:-1:-1;;;;;28484:16:0;;28501:7;28484:25;;;;;;;;;;;;;-1:-1:-1;;;;;28484:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28484:25:0;;-1:-1:-1;28533:19:0;:6;28484:25;28533:10;:19::i;:::-;28524:28;-1:-1:-1;;;28393:3:0;;28343:221;;;-1:-1:-1;28581:6:0;-1:-1:-1;28179:416:0;;;;;:::o;29529:726::-;29632:16;29661:19;29683:1;29661:23;;29695:25;29754:11;29737:7;:14;:28;-1:-1:-1;;;;;29723:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29723:43:0;;29695:71;;29782:9;29777:445;29801:7;:14;29797:1;:18;29777:445;;;29837:13;29853:7;29861:1;29853:10;;;;;;;;;;;;;;29837:26;;29899:1;-1:-1:-1;;;;;29882:19:0;:5;-1:-1:-1;;;;;29882:19:0;;29878:183;;;29950:8;-1:-1:-1;;;;;29950:16:0;;29922:8;29935:11;29931:1;:15;29922:25;;;;;;;;;;;;;:44;;;;;30017:1;29985:8;29998:11;29994:1;:15;30012:1;29994:19;29985:29;;;;;;;;;;;;;:33;;;;;30037:8;;;29878:183;30110:5;-1:-1:-1;;;;;30103:23:0;;30127:8;30103:33;;;;;;;;;;;;;-1:-1:-1;;;;;30103:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30103:33:0;30075:25;;:8;;30084:15;;;;30075:25;;;;;;;;;;;:61;;;;;30190:5;-1:-1:-1;;;;;30183:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30183:27:0;30151:29;;:8;;30178:1;30160:15;;;:19;;30151:29;;;;;;;;;;;:59;;;;;29777:445;;29817:3;;29777:445;;;-1:-1:-1;30239:8:0;29529:726;-1:-1:-1;;;;29529:726:0:o;30263:901::-;30357:16;30386:19;30408:1;30386:23;;30422:24;30480:11;30463:7;:14;:28;-1:-1:-1;;;;;30449:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30449:43:0;;30422:70;;30510:9;30505:625;30529:7;:14;30525:1;:18;30505:625;;;30565:13;30581:7;30589:1;30581:10;;;;;;;;;;;;;;;;;;;30633:45;;;-1:-1:-1;;;30633:45:0;;-1:-1:-1;;;;;30633:45:0;;;;;;;30660:4;30633:45;;;;;;;;;;30672:5;30633:45;;;;;;30581:10;;-1:-1:-1;30633:19:0;;;;;;:45;;;;;;;;;;:19;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30633:45:0;30606:24;;:7;;30614:15;;;;30606:24;;;;;;;;;;;;;;;;:72;;;;30724:46;;;-1:-1:-1;;;30724:46:0;;-1:-1:-1;;;;;30724:46:0;;;;;;;30751:5;30724:46;;;;;;30758:4;30724:46;;;;;;;;;;:19;;;;;;:46;;;;;;;;;;:19;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30724:46:0;30693:28;;:7;;30719:1;30701:15;;;:19;;30693:28;;;;;;;;;;;;;;;;:77;;;;30816:39;;;-1:-1:-1;;;30816:39:0;;-1:-1:-1;;;;;30816:39:0;;;;;;;30850:4;30816:39;;;;;;:26;;;;;;:39;;;;;;;;;;:26;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30816:39:0;30785:28;;:7;;30811:1;30793:15;;;:19;;30785:28;;;;;;;;;;;;;;;;:70;;;;30901:40;;;-1:-1:-1;;;30901:40:0;;-1:-1:-1;;;;;30901:40:0;;;;;;;30935:5;30901:40;;;;;;:26;;;;;;:40;;;;;;;;;;:26;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30901:40:0;30870:28;;:7;;30896:1;30878:15;;;:19;;30870:28;;;;;;;;;;;:71;;;;;30987:10;-1:-1:-1;;;;;30987:31:0;;31019:5;30987:38;;;;;;;;;;;;;-1:-1:-1;;;;;30987:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30987:38:0;:46;;31032:1;30987:46;;;31028:1;30987:46;30956:77;;:7;30968:11;30964:1;:15;30982:1;30964:19;30956:28;;;;;;;;;;;;;:77;;;;;31079:10;-1:-1:-1;;;;;31079:32:0;;31112:5;31079:39;;;;;;;;;;;;;-1:-1:-1;;;;;31079:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31079:39:0;31048:28;;:7;;31074:1;31056:15;;;:19;;31048:28;;;;;;;;;;;;;;;:70;-1:-1:-1;30545:3:0;;30505:625;;22742:1194;22861:7;22870;22879;22899:15;22917:6;-1:-1:-1;;;;;22917:18:0;;22936:8;22917:28;;;;;;;;;;;;;-1:-1:-1;;;;;22917:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22917:28:0;22982:30;;;-1:-1:-1;;;22982:30:0;;-1:-1:-1;;;;;22982:30:0;;;;;;;;;22917:28;;-1:-1:-1;22956:23:0;;22982:20;;;;;;:30;;;;;22917:28;;22982:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22982:30:0;;-1:-1:-1;23025:18:0;23046:43;-1:-1:-1;;;23046:22:0;:9;23060:7;23046:13;:22::i;:::-;:26;;:43::i;:::-;23025:64;-1:-1:-1;23113:62:0;23153:2;:21;;;23113:35;23025:64;23128:19;23113:14;:35::i;:62::-;23100:75;;23188:17;23208:6;-1:-1:-1;;;;;23208:19:0;;23228:8;23208:29;;;;;;;;;;;;;-1:-1:-1;;;;;23208:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23208:29:0;:63;;;;;23241:6;-1:-1:-1;;;;;23241:19:0;;23261:9;23241:30;;;;;;;;;;;;;-1:-1:-1;;;;;23241:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23241:30:0;23208:63;23188:83;;23282:15;23300:12;:78;;23351:6;-1:-1:-1;;;;;23351:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23351:27:0;23300:78;;;23315:6;-1:-1:-1;;;;;23315:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23315:33:0;23300:78;23282:96;;23389:14;23406:12;:70;;23453:6;-1:-1:-1;;;;;23453:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23453:23:0;23406:70;;;23421:6;-1:-1:-1;;;;;23421:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23421:29:0;23406:70;23389:87;;23487:24;23514:6;-1:-1:-1;;;;;23514:24:0;;23539:8;23549:10;23561:7;23570:6;23578:4;23514:69;;;;;;;;;;;;;-1:-1:-1;;;;;23514:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23487:96;;23594:24;23621:6;-1:-1:-1;;;;;23621:24:0;;23646:9;23657:10;23669:7;23678:6;23686:5;23621:71;;;;;;;;;;;;;-1:-1:-1;;;;;23621:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23621:71:0;;-1:-1:-1;23758:22:0;23783:35;;;:73;;23840:16;23783:73;;;23821:16;23783:73;23758:98;-1:-1:-1;23893:16:0;;-1:-1:-1;23911:16:0;-1:-1:-1;;;;;;;;22742:1194:0;;;;;;;;:::o;25264:935::-;25354:16;25383:19;25405:1;25383:23;;25417:24;25476:11;25458:8;:15;:29;-1:-1:-1;;;;;25444:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25444:44:0;;25417:71;;25504:9;25499:668;25523:8;:15;25519:1;:19;25499:668;;;25560:14;25585:8;25594:1;25585:11;;;;;;;;;;;;;;25560:37;;25639:6;-1:-1:-1;;;;;25639:18:0;;25658:8;25639:28;;;;;;;;;;;;;-1:-1:-1;;;;;25639:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25639:28:0;25612:24;;:7;;25620:15;;;;25612:24;;;;;;;;;;;:55;;;;;25713:6;-1:-1:-1;;;;;25713:22:0;;25736:8;25713:32;;;;;;;;;;;;;-1:-1:-1;;;;;25713:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25713:32:0;25682:28;;:7;;25708:1;25690:15;;;:19;;25682:28;;;;;;;;;;;:63;;;;;25798:8;25807:1;25798:11;;;;;;;;;;;;;;-1:-1:-1;;;;;25791:29:0;;25821:8;25791:39;;;;;;;;;;;;;-1:-1:-1;;;;;25791:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25791:39:0;25760:28;;:7;;25786:1;25768:15;;;:19;;25760:28;;;;;;;;;;;:70;;;;;25876:6;-1:-1:-1;;;;;25876:21:0;;25898:8;25876:31;;;;;;;;;;;;;-1:-1:-1;;;;;25876:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25876:31:0;25845:28;;:7;;25871:1;25853:15;;;:19;;25845:28;;;;;;;;;;;:62;;;;;25953:6;-1:-1:-1;;;;;25953:16:0;;25970:8;25953:26;;;;;;;;;;;;;-1:-1:-1;;;;;25953:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25953:26:0;25922:28;;:7;;25948:1;25930:15;;;:19;;25922:28;;;;;;;;;;;:57;;;;;26025:6;-1:-1:-1;;;;;26025:27:0;;26053:8;26025:37;;;;;;;;;;;;;-1:-1:-1;;;;;26025:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26025:37:0;25994:28;;:7;;26020:1;26002:15;;;:19;;25994:28;;;;;;;;;;;:68;;;;;26108:6;-1:-1:-1;;;;;26108:37:0;;26146:8;26108:47;;;;;;;;;;;;;-1:-1:-1;;;;;26108:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26108:47:0;26077:28;;:7;;26103:1;26085:15;;;:19;;26077:28;;;;;;;;;;;;;;;:78;-1:-1:-1;25540:3:0;;25499:668;;32540:1511;32670:16;32699:19;32721:2;32699:24;;32736:12;32758:6;32736:29;;32776:25;32820:5;-1:-1:-1;;;;;32820:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32820:17:0;32892:14;;32820:17;;-1:-1:-1;32851:24:0;;32892:28;;-1:-1:-1;;;;;32878:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32878:43:0;;32851:70;;32937:9;32932:1085;32956:7;:14;32952:1;:18;32932:1085;;;32992:13;33008:7;33016:1;33008:10;;;;;;;;;;;;;;32992:26;;33054:1;-1:-1:-1;;;;;33037:19:0;:5;-1:-1:-1;;;;;33037:19:0;;33033:73;;;-1:-1:-1;33085:5:0;33033:73;33147:5;-1:-1:-1;;;;;33147:17:0;;33165:5;33147:24;;;;;;;;;;;;;-1:-1:-1;;;;;33147:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33147:24:0;33120;;:7;;33128:15;;;;33120:24;;;;;;;;;;;:51;;;;;33217:5;-1:-1:-1;;;;;33217:21:0;;33239:5;33217:28;;;;;;;;;;;;;-1:-1:-1;;;;;33217:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33217:28:0;33186;;:7;;33212:1;33194:15;;;:19;;33186:28;;;;;;;;;;;:59;;;;;33291:5;-1:-1:-1;;;;;33291:17:0;;33309:5;33291:24;;;;;;;;;;;;;-1:-1:-1;;;;;33291:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33291:24:0;33260:28;;:7;;33286:1;33268:15;;;:19;;33260:28;;;;;;;;;;;:55;;;;;33361:5;-1:-1:-1;;;;;33361:25:0;;33387:5;33394:11;33361:45;;;;;;;;;;;;;-1:-1:-1;;;;;33361:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33361:45:0;33330:28;;:7;;33356:1;33338:15;;;:19;;33330:28;;;;;;;;;;;:76;;;;;33452:5;-1:-1:-1;;;;;33452:18:0;;33471:5;33452:25;;;;;;;;;;;;;-1:-1:-1;;;;;33452:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33452:25:0;33421:28;;:7;;33447:1;33429:15;;;:19;;33421:28;;;;;;;;;;;:56;;;;;33523:5;-1:-1:-1;;;;;33523:19:0;;33543:5;33523:26;;;;;;;;;;;;;-1:-1:-1;;;;;33523:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33523:26:0;33492:28;;:7;;33518:1;33500:15;;;:19;;33492:28;;;;;;;;;;;:57;;;;;33595:5;-1:-1:-1;;;;;33595:20:0;;33616:5;33595:27;;;;;;;;;;;;;-1:-1:-1;;;;;33595:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33595:27:0;33564:28;;:7;;33590:1;33572:15;;;:19;;33564:28;;;;;;;;;;;:58;;;;;33668:5;-1:-1:-1;;;;;33668:17:0;;33686:5;33668:24;;;;;;;;;;;;;-1:-1:-1;;;;;33668:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33668:24:0;33637:28;;:7;;33663:1;33645:15;;;:19;;33637:28;;;;;;;;;;;:55;;;;;33738:5;-1:-1:-1;;;;;33738:17:0;;33756:5;33738:24;;;;;;;;;;;;;-1:-1:-1;;;;;33738:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33738:24:0;33707:28;;:7;;33733:1;33715:15;;;:19;;33707:28;;;;;;;;;;;:55;;;;;33808:5;-1:-1:-1;;;;;33808:19:0;;33828:5;33808:26;;;;;;;;;;;;;-1:-1:-1;;;;;33808:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33808:26:0;33777:28;;:7;;33803:1;33785:15;;;:19;;33777:28;;;;;;;;;;;;;;;;:57;;;;33881:39;;;-1:-1:-1;;;33881:39:0;;-1:-1:-1;;;;;33881:39:0;;;;;;;33914:5;33881:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33881:39:0;33849:29;;:7;;33875:2;33857:15;;;:20;;33849:29;;;;;;;;;;;;;;;;:71;;;;33967:38;;;-1:-1:-1;;;33967:38:0;;-1:-1:-1;;;;;33967:38:0;;;;;;;34000:4;33967:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33967:38:0;33935:29;;:7;;33961:2;33943:15;;;:20;;33935:29;;;;;;;;;;;;;;;:70;-1:-1:-1;32972:3:0;;32932:1085;;23944:331;24024:16;24053:24;24094:7;:14;-1:-1:-1;;;;;24080:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24080:29:0;;24053:56;;24125:9;24120:123;24144:7;:14;24140:1;:18;24120:123;;;24200:6;-1:-1:-1;;;;;24193:26:0;;24220:7;24228:1;24220:10;;;;;;;;;;;;;;24193:38;;;;;;;;;;;;;-1:-1:-1;;;;;24193:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24193:38:0;24180:10;;:7;;24188:1;;24180:10;;;;;;;;;;;;;;;:51;24160:3;;24120:123;;19362:42;19402:2;19362:42;:::o;34059:1757::-;34187:16;34216:19;34238:2;34216:24;;34253:12;34275:6;34253:29;;34293:25;34337:5;-1:-1:-1;;;;;34337:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34337:17:0;34409:14;;34337:17;;-1:-1:-1;34368:24:0;;34409:28;;-1:-1:-1;;;;;34395:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34395:43:0;;34368:70;;34454:9;34449:1333;34473:7;:14;34469:1;:18;34449:1333;;;34509:13;34525:7;34533:1;34525:10;;;;;;;;;;;;;;34509:26;;34571:1;-1:-1:-1;;;;;34554:19:0;:5;-1:-1:-1;;;;;34554:19:0;;34550:73;;;-1:-1:-1;34602:5:0;34550:73;34639:26;34668:22;;-1:-1:-1;;;34668:22:0;;;;:61;;34728:1;34668:61;;;34693:5;-1:-1:-1;;;;;34693:25:0;;34719:5;34693:32;;;;;;;;;;;;;-1:-1:-1;;;;;34693:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34693:32:0;34668:61;34639:90;;34771:5;-1:-1:-1;;;;;34771:17:0;;34789:5;34771:24;;;;;;;;;;;;;-1:-1:-1;;;;;34771:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34771:24:0;34744;;:7;;34752:15;;;;34744:24;;;;;;;;;;;:51;;;;;34841:5;-1:-1:-1;;;;;34841:21:0;;34863:5;34841:28;;;;;;;;;;;;;-1:-1:-1;;;;;34841:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34841:28:0;34810;;:7;;34836:1;34818:15;;;:19;;34810:28;;;;;;;;;;;:59;;;;;34915:5;-1:-1:-1;;;;;34915:17:0;;34933:5;34915:24;;;;;;;;;;;;;-1:-1:-1;;;;;34915:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34915:24:0;34884:28;;:7;;34910:1;34892:15;;;:19;;34884:28;;;;;;;;;;;:55;;;;;34985:5;-1:-1:-1;;;;;34985:25:0;;35011:5;35018:11;34985:45;;;;;;;;;;;;;-1:-1:-1;;;;;34985:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34985:45:0;34954:28;;:7;;34980:1;34962:15;;;:19;;34954:28;;;;;;;;;;;:76;;;;;35076:5;-1:-1:-1;;;;;35076:18:0;;35095:5;35076:25;;;;;;;;;;;;;-1:-1:-1;;;;;35076:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35076:25:0;35045:28;;:7;;35071:1;35053:15;;;:19;;35045:28;;;;;;;;;;;:56;;;;;35147:5;-1:-1:-1;;;;;35147:19:0;;35167:5;35147:26;;;;;;;;;;;;;-1:-1:-1;;;;;35147:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35147:26:0;35116:28;;:7;;35142:1;35124:15;;;:19;;35116:28;;;;;;;;;;;:57;;;;;35219:5;-1:-1:-1;;;;;35219:20:0;;35240:5;35219:27;;;;;;;;;;;;;-1:-1:-1;;;;;35219:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35219:27:0;35188:28;;:7;;35214:1;35196:15;;;:19;;35188:28;;;;;;;;;;;:58;;;;;35292:5;-1:-1:-1;;;;;35292:22:0;;35315:5;35292:29;;;;;;;;;;;;;-1:-1:-1;;;;;35292:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35292:29:0;35261:28;;:7;;35287:1;35269:15;;;:19;;35261:28;;;;;;;;;;;:60;;;;;35367:18;35336:7;35348:11;35344:1;:15;35362:1;35344:19;35336:28;;;;;;;;;;;;;:49;;;;;35431:5;-1:-1:-1;;;;;35431:17:0;;35449:5;35431:24;;;;;;;;;;;;;-1:-1:-1;;;;;35431:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35431:24:0;35400:28;;:7;;35426:1;35408:15;;;:19;;35400:28;;;;;;;;;;;:55;;;;;35502:5;-1:-1:-1;;;;;35502:17:0;;35520:5;35502:24;;;;;;;;;;;;;-1:-1:-1;;;;;35502:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35502:24:0;35470:29;;:7;;35496:2;35478:15;;;:20;;35470:29;;;;;;;;;;;:56;;;;;35573:5;-1:-1:-1;;;;;35573:19:0;;35593:5;35573:26;;;;;;;;;;;;;-1:-1:-1;;;;;35573:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35573:26:0;35541:29;;:7;;35567:2;35549:15;;;:20;;35541:29;;;;;;;;;;;;;;;;:58;;;;35646:39;;;-1:-1:-1;;;35646:39:0;;-1:-1:-1;;;;;35646:39:0;;;;;;;35679:5;35646:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35646:39:0;35614:29;;:7;;35640:2;35622:15;;;:20;;35614:29;;;;;;;;;;;;;;;;:71;;;;35732:38;;;-1:-1:-1;;;35732:38:0;;-1:-1:-1;;;;;35732:38:0;;;;;;;35765:4;35732:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35732:38:0;35700:29;;:7;;35726:2;35708:15;;;:20;;35700:29;;;;;;;;;;;;;;;:70;-1:-1:-1;;34489:3:0;;34449:1333;;24682:574;24778:16;24807:19;24829:1;24807:23;;24841:24;24906:11;24882:14;:21;:35;-1:-1:-1;;;;;24868:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24868:50:0;;24841:77;;24934:9;24929:295;24953:14;:21;24949:1;:25;24929:295;;;24996:26;25039:14;25054:1;25039:17;;;;;;;;;;;;;;24996:61;;25099:12;-1:-1:-1;;;;;25099:22:0;;25122:8;25099:32;;;;;;;;;;;;;-1:-1:-1;;;;;25099:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25099:32:0;25072:24;;:7;;25080:15;;;;25072:24;;;;;;;;;;;:59;;;;;25177:12;-1:-1:-1;;;;;25177:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25177:35:0;25146:28;;:7;;25172:1;25154:15;;;:19;;25146:28;;;;;;;;;;;;;;;:66;-1:-1:-1;24976:3:0;;24929:295;;19305:50;-1:-1:-1;;;19305:50:0;:::o;26941:1230::-;27044:16;27073:19;27095:1;27073:23;;27107:29;27170:11;27153:7;:14;:28;-1:-1:-1;;;;;27139:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27139:43:0;-1:-1:-1;27107:75:0;-1:-1:-1;27215:6:0;27193:12;27235:897;27259:7;:14;27255:1;:18;27235:897;;;27295:13;27311:7;27319:1;27311:10;;;;;;;;;;;;;;27295:26;;27357:1;-1:-1:-1;;;;;27340:19:0;:5;-1:-1:-1;;;;;27340:19:0;;27336:73;;;-1:-1:-1;27388:5:0;27336:73;27425:25;27453:5;-1:-1:-1;;;;;27453:18:0;;27472:5;27453:25;;;;;;;;;;;;;-1:-1:-1;;;;;27453:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27453:25:0;:87;;27515:5;-1:-1:-1;;;;;27515:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27515:25:0;27453:87;;;27481:5;-1:-1:-1;;;;;27481:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27481:31:0;27453:87;27425:115;;27555:22;27580:5;-1:-1:-1;;;;;27580:21:0;;27602:5;27580:28;;;;;;;;;;;;;-1:-1:-1;;;;;27580:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27580:28:0;27644:24;;;-1:-1:-1;;;27644:24:0;;-1:-1:-1;;;;;27644:24:0;;;;;;;;;27580:28;;-1:-1:-1;27623:18:0;;27644:17;;;;;;:24;;;;;27580:28;;27644:24;;;;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27644:24:0;;-1:-1:-1;27689:14:0;;27685:140;;27756:53;27798:10;27756:37;:17;27778:14;27756:21;:37::i;:53::-;27724:12;27741:11;27737:1;:15;27724:29;;;;;;;;;;;;;:85;;;;;27685:140;27883:1;27845:5;-1:-1:-1;;;;;27845:28:0;;27874:5;27845:35;;;;;;;;;;;;;-1:-1:-1;;;;;27845:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27845:35:0;:39;27841:280;;;27905:16;27924:5;-1:-1:-1;;;;;27924:24:0;;27949:5;27924:31;;;;;;;;;;;;;-1:-1:-1;;;;;27924:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27924:31:0;27993:35;;;-1:-1:-1;;;27993:35:0;;-1:-1:-1;;;;;27993:35:0;;;;;;;;;27924:31;;-1:-1:-1;27974:16:0;;27993:28;;;;;;:35;;;;;27924:31;;27993:35;;;;;;;;:28;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27993:35:0;;-1:-1:-1;28083:22:0;27993:35;28096:8;28083:12;:22::i;:::-;28047:12;28064:11;28060:1;:15;28078:1;28060:19;28047:33;;;;;;;;;;;;;:58;;;;;27841:280;;;-1:-1:-1;;27275:3:0;;;;;-1:-1:-1;27235:897:0;;-1:-1:-1;27235:897:0;;-1:-1:-1;28151:12:0;;-1:-1:-1;;;26941:1230:0;;;;;;:::o;19456:131::-;232:3;;-1:-1:-1;;;;;232:3:0;218:10;:17;210:51;;;;;-1:-1:-1;;;210:51:0;;;;;;;;;;;;-1:-1:-1;;;210:51:0;;;;;;;;;;;;;;;19531:22:::1;:48:::0;;;::::1;;-1:-1:-1::0;;;19531:48:0::1;-1:-1:-1::0;;;;19531:48:0;;::::1;::::0;;;::::1;::::0;;19456:131::o;26207:726::-;26431:14;;26293:16;;26344:1;;;;26293:16;;26431:28;;;:42;;-1:-1:-1;;;;;26417:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26417:57:0;;26390:84;;26490:9;26485:416;26526:11;26509:7;:14;:28;;;;;;26505:1;:32;26485:416;;;26559:14;26576:7;26588:11;26584:1;:15;26576:24;;;;;;;;;;;;;;26559:41;;26615:14;26632:7;26644:11;26640:1;:15;26658:1;26640:19;26632:28;;;;;;;;;;;;;;26615:45;;26675:12;26706:8;-1:-1:-1;;;;;26690:33:0;;26724:6;26732;26690:49;;;;;;;;;;;;;-1:-1:-1;;;;;26690:49:0;;;;;;-1:-1:-1;;;;;26690:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26690:49:0;26783:30;;;-1:-1:-1;;;26783:30:0;;-1:-1:-1;;;;;26783:30:0;;;;;;;;;26690:49;;-1:-1:-1;26783:24:0;;;;;;:30;;;;;26690:49;;26783:30;;;;;;;;:24;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26783:30:0;26756:24;;:7;;26764:15;;;;26756:24;;;;;;;;;;;:57;;;;;26866:6;-1:-1:-1;;;;;26859:24:0;;26884:4;26859:30;;;;;;;;;;;;;-1:-1:-1;;;;;26859:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26859:30:0;26828:28;;:7;;26854:1;26836:15;;;:19;;26828:28;;;;;;;;;;;;;;;:61;-1:-1:-1;;;26539:3:0;;26485:416;;;-1:-1:-1;26918:7:0;26207:726;-1:-1:-1;;;;;26207:726:0:o;19249:49::-;19297:1;19249:49;:::o;19413:34::-;;;-1:-1:-1;;;19413:34:0;;;;;:::o;289:76::-;232:3;;-1:-1:-1;;;;;232:3:0;218:10;:17;210:51;;;;;-1:-1:-1;;;210:51:0;;;;;;;;;;;;-1:-1:-1;;;210:51:0;;;;;;;;;;;;;;;347:3:::1;:10:::0;;-1:-1:-1;;;;;;347:10:0::1;-1:-1:-1::0;;;;;347:10:0;;;::::1;::::0;;;::::1;::::0;;289:76::o;21019:1715::-;21133:7;21142;21162:15;21180:6;-1:-1:-1;;;;;21180:18:0;;21199:8;21180:28;;;;;;;;;;;;;-1:-1:-1;;;;;21180:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21180:28:0;21247:30;;;-1:-1:-1;;;21247:30:0;;-1:-1:-1;;;;;21247:30:0;;;;;;;;;21180:28;;-1:-1:-1;21221:23:0;;21247:20;;;;;;:30;;;;;21180:28;;21247:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21247:30:0;21315:31;;;-1:-1:-1;;;21315:31:0;;-1:-1:-1;;;;;21315:31:0;;;;;;;;;21247:30;;-1:-1:-1;21288:24:0;;21315:20;;;;;;:31;;;;;21247:30;;21315:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21315:31:0;;-1:-1:-1;21359:22:0;;21428:43;-1:-1:-1;;;21428:22:0;:9;21442:7;21428:13;:22::i;:43::-;21407:64;-1:-1:-1;21499:62:0;21539:2;:21;;;21499:35;21407:64;21514:19;21499:14;:35::i;:62::-;21486:75;;21578:17;21598:6;-1:-1:-1;;;;;21598:19:0;;21618:8;21598:29;;;;;;;;;;;;;-1:-1:-1;;;;;21598:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21598:29:0;:63;;;;;21631:6;-1:-1:-1;;;;;21631:19:0;;21651:9;21631:30;;;;;;;;;;;;;-1:-1:-1;;;;;21631:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21631:30:0;21598:63;21578:83;;21676:15;21694:12;:78;;21745:6;-1:-1:-1;;;;;21745:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21745:27:0;21694:78;;;21709:6;-1:-1:-1;;;;;21709:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21709:33:0;21694:78;21676:96;;21787:14;21804:12;:70;;21851:6;-1:-1:-1;;;;;21851:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21851:23:0;21804:70;;;21819:6;-1:-1:-1;;;;;21819:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21819:29:0;21804:70;21787:87;;21889:24;21916:6;-1:-1:-1;;;;;21916:24:0;;21941:8;21951:10;21963:7;21972:6;21980:4;21916:69;;;;;;;;;;;;;-1:-1:-1;;;;;21916:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21889:96;;22000:24;22027:6;-1:-1:-1;;;;;22027:24:0;;22052:9;22063:10;22075:7;22084:6;22092:5;22027:71;;;;;;;;;;;;;-1:-1:-1;;;;;22027:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22027:71:0;;-1:-1:-1;22189:35:0;;;:73;;22246:16;22189:73;;;22227:16;22189:73;22172:90;;21019:1715;;;;;;22286:16;22305:6;-1:-1:-1;;;;;22305:18:0;;22324:9;22305:29;;;;;;;;;;;;;-1:-1:-1;;;;;22305:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22305:29:0;;-1:-1:-1;22345:17:0;22365:36;22305:29;22365:22;:9;22379:7;22365:13;:22::i;:36::-;22345:56;;22424:64;22472:15;22466:2;:21;22424:37;22444:16;22438:2;:22;22424:9;:13;;:37;;;;:::i;:64::-;22412:76;-1:-1:-1;22501:26:0;22530:81;19237:5;22530:55;22544:40;19237:5;22569:14;22544:24;:40::i;:::-;22530:9;;:13;:55::i;:81::-;22501:110;-1:-1:-1;22622:17:0;22642:33;:9;22501:110;22642:13;:33::i;:::-;22696:18;;;;-1:-1:-1;21019:1715:0;;-1:-1:-1;;;;;;;;;;;;21019:1715:0:o;29009:512::-;29100:16;29129:25;29171:7;:14;-1:-1:-1;;;;;29157:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29157:29:0;;29129:57;;29202:9;29197:291;29221:7;:14;29217:1;:18;29197:291;;;29257:13;29273:7;29281:1;29273:10;;;;;;;;;;;;;;29257:26;;29319:1;-1:-1:-1;;;;;29302:19:0;:5;-1:-1:-1;;;;;29302:19:0;;29298:117;;;29356:8;-1:-1:-1;;;;;29356:16:0;;29342:8;29351:1;29342:11;;;;;;;;;;;;;:30;;;;;29391:8;;;29298:117;29450:5;-1:-1:-1;;;;;29443:23:0;;29467:8;29443:33;;;;;;;;;;;;;-1:-1:-1;;;;;29443:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29443:33:0;29429:11;;:8;;29438:1;;29429:11;;;;;;;;;;;:47;;;;;29197:291;;29237:3;;29197:291;;35824:1853;35990:16;36019:24;19297:1;36060:17;:24;:48;-1:-1:-1;;;;;36046:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36046:63:0;;36019:90;;36127:9;36122:1521;36146:17;:24;36142:1;:28;36122:1521;;;36208:12;36236:18;36270:20;36306:24;36381:19;36416:22;36454:25;36490:6;-1:-1:-1;;;;;36483:26:0;;36510:8;36520:17;36538:1;36520:20;;;;;;;;;;;;;;36542:12;36555:1;36542:15;;;;;;;;;;;;;;36559:7;36567:1;36559:10;;;;;;;;;;;;;;36483:87;;;;;;;;;;;;;-1:-1:-1;;;;;36483:87:0;;;;;;-1:-1:-1;;;;;36483:87:0;;;;;;-1:-1:-1;;;;;36483:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36483:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36587:34;;36483:87;;-1:-1:-1;36483:87:0;;-1:-1:-1;36483:87:0;;-1:-1:-1;36483:87:0;-1:-1:-1;36483:87:0;-1:-1:-1;36483:87:0;;-1:-1:-1;36483:87:0;;-1:-1:-1;36483:87:0;;36587:7;;19297:1;36595:25;;;36587:34;;;;;;;;;;;:41;;;;;36684:10;36643:7;19297:1;36651;:25;36679:1;36651:29;36643:38;;;;;;;;;;;;;:51;;;;;36750:12;36709:7;19297:1;36717;:25;36745:1;36717:29;36709:38;;;;;;;;;;;;;:53;;;;;36818:16;36777:7;19297:1;36785;:25;36813:1;36785:29;36777:38;;;;;;;;;;;;;:57;;;;;36890:17;:25;;36914:1;36890:25;;;36910:1;36890:25;36849:66;;:7;19297:1;36857;:25;36885:1;36857:29;36849:38;;;;;;;;;;;;;:66;;;;;36971:11;36930:7;19297:1;36938;:25;36966:1;36938:29;36930:38;;;;;;;;;;;;;:52;;;;;37038:17;36997:7;19297:1;37005;:25;37033:1;37005:29;36997:38;;;;;;;;;;;;;:58;;;;;36122:1521;;;;;;;37087:12;37102:7;19297:1;37110;:25;37102:34;;;;;;;;;;;;;;37087:49;;37151:20;37174:7;19297:1;37182;:25;37210:1;37182:29;37174:38;;;;;;;;;;;;;;37151:61;;37227:25;37255:7;19297:1;37263;:25;37291:1;37263:29;37255:38;;;;;;;;;;;;;;37227:66;;37327:1;37312:12;:16;37308:324;;;37350:14;37366:13;37390:6;-1:-1:-1;;;;;37383:23:0;;37407:12;37420:1;37407:15;;;;;;;;;;;;;;37424:4;37430:12;37444:7;37452:1;37444:10;;;;;;;;;;;;;;37456:17;37383:91;;;;;;;;;;;;;-1:-1:-1;;;;;37383:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37383:91:0;;;;;;;;;-1:-1:-1;37383:91:0;-1:-1:-1;37383:91:0;37534:17;;37550:1;37534:17;;;37546:1;37534:17;37493:58;;:7;19297:1;37501;:25;37529:1;37501:29;37493:38;;;;;;;;;;;;;:58;;;;;37611:5;37570:7;19297:1;37578;:25;37606:1;37578:29;37570:38;;;;;;;;;;;;;:46;;;;;37308:324;;;-1:-1:-1;;;36172:3:0;;36122:1521;;;-1:-1:-1;37662:7:0;35824:1853;-1:-1:-1;;;;;;35824:1853:0:o;19595:1416::-;19692:7;19712:15;19730:6;-1:-1:-1;;;;;19730:18:0;;19749:8;19730:28;;;;;;;;;;;;;-1:-1:-1;;;;;19730:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19730:28:0;19788:29;;;-1:-1:-1;;;19788:29:0;;-1:-1:-1;;;;;19788:29:0;;;;;;;;;19730:28;;-1:-1:-1;19769:16:0;;19788:18;;;;;;:29;;;;;19730:28;;19788:29;;;;;;;;:18;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19788:29:0;19856:30;;;-1:-1:-1;;;19856:30:0;;-1:-1:-1;;;;;19856:30:0;;;;;;;;;19788:29;;-1:-1:-1;19830:23:0;;19856:20;;;;;;:30;;;;;19788:29;;19856:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19856:30:0;19924:31;;;-1:-1:-1;;;19924:31:0;;-1:-1:-1;;;;;19924:31:0;;;;;;;;;19856:30;;-1:-1:-1;19897:24:0;;19924:20;;;;;;:31;;;;;19856:30;;19924:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19924:31:0;20033:29;;;-1:-1:-1;;;20033:29:0;;-1:-1:-1;;;;;20033:29:0;;;;;;;;;19924:31;;-1:-1:-1;19968:16:0;;;;20033:18;;;;;:29;;;;;19924:31;;20033:29;;;;;;;:18;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20033:29:0;20102:33;;;-1:-1:-1;;;20102:33:0;;-1:-1:-1;;;;;20102:33:0;;;;;;;;;20033:29;;-1:-1:-1;20077:22:0;;20102;;;;;;:33;;;;;20033:29;;20102:33;;;;;;;;:22;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20102:33:0;20173:31;;;-1:-1:-1;;;20173:31:0;;-1:-1:-1;;;;;20173:31:0;;;;;;;;;20102:33;;-1:-1:-1;20150:20:0;;20173;;;;;;:31;;;;;20102:33;;20173:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20173:31:0;;-1:-1:-1;20219:17:0;20239:29;;;:61;;20288:12;20239:61;;;20271:14;20239:61;20219:81;;20332:10;20319:9;:23;20315:72;;20370:1;20363:8;;;;;;;;;;;;;20315:72;20401:23;20427:25;:10;20442:9;20427:14;:25::i;:::-;20401:51;;20478:97;20558:16;20552:2;:22;20478:69;20531:15;20525:2;:21;20478:42;20512:7;20478:29;20498:8;20478:15;:19;;:29;;;;:::i;:42::-;:46;;:69::i;:97::-;20467:108;;19595:1416;;;;;20599:21;20623:6;-1:-1:-1;;;;;20623:21:0;;20645:8;20623:31;;;;;;;;;;;;;-1:-1:-1;;;;;20623:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20623:31:0;;-1:-1:-1;20671:18:0;;20667:309;;20706:19;20728:65;20773:19;20728:40;:13;20773:2;20746:21;;;20728:17;:40::i;:65::-;20706:87;-1:-1:-1;20822:45:0;20859:7;20822:32;20706:87;-1:-1:-1;;;20822:15:0;:32::i;:45::-;20808:59;;20899:11;20888:8;:22;20884:81;;;20938:11;-1:-1:-1;20931:18:0;;-1:-1:-1;;;;;;20931:18:0;20884:81;20667:309;-1:-1:-1;20995:8:0;19595:1416;-1:-1:-1;;;;;;;;19595:1416:0:o;28603:398::-;28692:7;;;28747:217;28771:9;:16;28767:1;:20;28747:217;;;28809:15;28827:9;28837:1;28827:12;;;;;;;;;;;;;;28809:30;;28854:15;28872:6;-1:-1:-1;;;;;28872:16:0;;28889:7;28872:25;;;;;;;;;;;;;-1:-1:-1;;;;;28872:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28872:25:0;;-1:-1:-1;28927:25:0;:12;28872:25;28927:16;:25::i;:::-;28912:40;-1:-1:-1;;;28789:3:0;;28747:217;;12351:136;12409:7;12436:43;12440:1;12443;12436:43;;;;;;;;;;;;;;;;;:3;:43::i;13241:471::-;13299:7;13544:6;13540:47;;-1:-1:-1;13574:1:0;13567:8;;13540:47;13611:5;;;13615:1;13611;:5;:1;13635:5;;;;;:10;13627:56;;;;-1:-1:-1;;;13627:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14188:132;14246:7;14273:39;14277:1;14280;14273:39;;;;;;;;;;;;;-1:-1:-1;;;14273:39:0;;;:3;:39::i;11887:181::-;11945:7;11977:5;;;12001:6;;;;11993:46;;;;;-1:-1:-1;;;11993:46:0;;;;;;;;;;;;-1:-1:-1;;;11993:46:0;;;;;;;;;;;;;;12790:192;12876:7;12912:12;12904:6;;;;12896:29;;;;-1:-1:-1;;;12896:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12948:5:0;;;12790:192::o;14816:278::-;14902:7;14937:12;14930:5;14922:28;;;;-1:-1:-1;;;14922:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14961:9;14977:1;14973;:5;;;;;;;14816:278;-1:-1:-1;;;;;14816:278:0:o
Swarm Source
ipfs://41d4c1a683d9061f2c7515e4a46c7a7deb3a27f58d820446e948783d5a211b5c
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.