Contract
0x198634d01a8e1646fae8676904343c33b1d2c6b9
1
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xf58c00042731a54a3c325d8018a590b4d2e096a6b7b36caea24e820625f4fa1d | 51710076 | 113 days 15 hrs ago | Mummy Finance: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
FastPriceFeed
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2022-12-05 */ // SPDX-License-Identifier: MIT 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; } } interface ISecondaryPriceFeed { function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256); } interface IFastPriceFeed { function lastUpdatedAt() external view returns (uint256); function lastUpdatedBlock() external view returns (uint256); function setSigner(address _account, bool _isActive) external; function setUpdater(address _account, bool _isActive) external; function setPriceDuration(uint256 _priceDuration) external; function setMaxPriceUpdateDelay(uint256 _maxPriceUpdateDelay) external; function setSpreadBasisPointsIfInactive(uint256 _spreadBasisPointsIfInactive) external; function setSpreadBasisPointsIfChainError(uint256 _spreadBasisPointsIfChainError) external; function setMinBlockInterval(uint256 _minBlockInterval) external; function setIsSpreadEnabled(bool _isSpreadEnabled) external; function setMaxDeviationBasisPoints(uint256 _maxDeviationBasisPoints) external; function setMaxCumulativeDeltaDiffs(address[] memory _tokens, uint256[] memory _maxCumulativeDeltaDiffs) external; function setPriceDataInterval(uint256 _priceDataInterval) external; function setVaultPriceFeed(address _vaultPriceFeed) external; } interface IFastPriceEvents { function emitPriceEvent(address _token, uint256 _price) external; } 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 getLatestPrimaryPrice(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; } interface IPositionRouter { function increasePositionRequestKeysStart() external returns (uint256); function decreasePositionRequestKeysStart() external returns (uint256); function executeIncreasePositions(uint256 _count, address payable _executionFeeReceiver) external; function executeDecreasePositions(uint256 _count, address payable _executionFeeReceiver) external; } 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; } } contract FastPriceFeed is ISecondaryPriceFeed, IFastPriceFeed, Governable { using SafeMath for uint256; // fit data in a uint256 slot to save gas costs struct PriceDataItem { uint160 refPrice; // Chainlink price uint32 refTime; // last updated at time uint32 cumulativeRefDelta; // cumulative Chainlink price delta uint32 cumulativeFastDelta; // cumulative fast price delta } uint256 public constant PRICE_PRECISION = 10 ** 30; uint256 public constant CUMULATIVE_DELTA_PRECISION = 10 * 1000 * 1000; uint256 public constant MAX_REF_PRICE = type(uint160).max; uint256 public constant MAX_CUMULATIVE_REF_DELTA = type(uint32).max; uint256 public constant MAX_CUMULATIVE_FAST_DELTA = type(uint32).max; // uint256(~0) is 256 bits of 1s // shift the 1s by (256 - 32) to get (256 - 32) 0s followed by 32 1s uint256 constant public BITMASK_32 = uint256(~0) >> (256 - 32); uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant MAX_PRICE_DURATION = 30 minutes; bool public isInitialized; bool public isSpreadEnabled = false; address public vaultPriceFeed; address public fastPriceEvents; address public tokenManager; address public positionRouter; uint256 public override lastUpdatedAt; uint256 public override lastUpdatedBlock; uint256 public priceDuration; uint256 public maxPriceUpdateDelay; uint256 public spreadBasisPointsIfInactive; uint256 public spreadBasisPointsIfChainError; uint256 public minBlockInterval; uint256 public maxTimeDeviation; uint256 public priceDataInterval; // allowed deviation from primary price uint256 public maxDeviationBasisPoints; uint256 public minAuthorizations; uint256 public disableFastPriceVoteCount = 0; mapping (address => bool) public isUpdater; mapping (address => uint256) public prices; mapping (address => PriceDataItem) public priceData; mapping (address => uint256) public maxCumulativeDeltaDiffs; mapping (address => bool) public isSigner; mapping (address => bool) public disableFastPriceVotes; // array of tokens used in setCompactedPrices, saves L1 calldata gas costs address[] public tokens; // array of tokenPrecisions used in setCompactedPrices, saves L1 calldata gas costs // if the token price will be sent with 3 decimals, then tokenPrecision for that token // should be 10 ** 3 uint256[] public tokenPrecisions; event DisableFastPrice(address signer); event EnableFastPrice(address signer); event PriceData(address token, uint256 refPrice, uint256 fastPrice, uint256 cumulativeRefDelta, uint256 cumulativeFastDelta); event MaxCumulativeDeltaDiffExceeded(address token, uint256 refPrice, uint256 fastPrice, uint256 cumulativeRefDelta, uint256 cumulativeFastDelta); modifier onlySigner() { require(isSigner[msg.sender], "FastPriceFeed: forbidden"); _; } modifier onlyUpdater() { require(isUpdater[msg.sender], "FastPriceFeed: forbidden"); _; } modifier onlyTokenManager() { require(msg.sender == tokenManager, "FastPriceFeed: forbidden"); _; } constructor( uint256 _priceDuration, uint256 _maxPriceUpdateDelay, uint256 _minBlockInterval, uint256 _maxDeviationBasisPoints, address _fastPriceEvents, address _tokenManager, address _positionRouter ) public { require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration"); priceDuration = _priceDuration; maxPriceUpdateDelay = _maxPriceUpdateDelay; minBlockInterval = _minBlockInterval; maxDeviationBasisPoints = _maxDeviationBasisPoints; fastPriceEvents = _fastPriceEvents; tokenManager = _tokenManager; positionRouter = _positionRouter; } function initialize(uint256 _minAuthorizations, address[] memory _signers, address[] memory _updaters) public onlyGov { require(!isInitialized, "FastPriceFeed: already initialized"); isInitialized = true; minAuthorizations = _minAuthorizations; for (uint256 i = 0; i < _signers.length; i++) { address signer = _signers[i]; isSigner[signer] = true; } for (uint256 i = 0; i < _updaters.length; i++) { address updater = _updaters[i]; isUpdater[updater] = true; } } function setSigner(address _account, bool _isActive) external override onlyGov { isSigner[_account] = _isActive; } function setUpdater(address _account, bool _isActive) external override onlyGov { isUpdater[_account] = _isActive; } function setFastPriceEvents(address _fastPriceEvents) external onlyGov { fastPriceEvents = _fastPriceEvents; } function setVaultPriceFeed(address _vaultPriceFeed) external override onlyGov { vaultPriceFeed = _vaultPriceFeed; } function setMaxTimeDeviation(uint256 _maxTimeDeviation) external onlyGov { maxTimeDeviation = _maxTimeDeviation; } function setPriceDuration(uint256 _priceDuration) external override onlyGov { require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration"); priceDuration = _priceDuration; } function setMaxPriceUpdateDelay(uint256 _maxPriceUpdateDelay) external override onlyGov { maxPriceUpdateDelay = _maxPriceUpdateDelay; } function setSpreadBasisPointsIfInactive(uint256 _spreadBasisPointsIfInactive) external override onlyGov { spreadBasisPointsIfInactive = _spreadBasisPointsIfInactive; } function setSpreadBasisPointsIfChainError(uint256 _spreadBasisPointsIfChainError) external override onlyGov { spreadBasisPointsIfChainError = _spreadBasisPointsIfChainError; } function setMinBlockInterval(uint256 _minBlockInterval) external override onlyGov { minBlockInterval = _minBlockInterval; } function setIsSpreadEnabled(bool _isSpreadEnabled) external override onlyGov { isSpreadEnabled = _isSpreadEnabled; } function setLastUpdatedAt(uint256 _lastUpdatedAt) external onlyGov { lastUpdatedAt = _lastUpdatedAt; } function setTokenManager(address _tokenManager) external onlyTokenManager { tokenManager = _tokenManager; } function setMaxDeviationBasisPoints(uint256 _maxDeviationBasisPoints) external override onlyTokenManager { maxDeviationBasisPoints = _maxDeviationBasisPoints; } function setMaxCumulativeDeltaDiffs(address[] memory _tokens, uint256[] memory _maxCumulativeDeltaDiffs) external override onlyTokenManager { for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; maxCumulativeDeltaDiffs[token] = _maxCumulativeDeltaDiffs[i]; } } function setPriceDataInterval(uint256 _priceDataInterval) external override onlyTokenManager { priceDataInterval = _priceDataInterval; } function setMinAuthorizations(uint256 _minAuthorizations) external onlyTokenManager { minAuthorizations = _minAuthorizations; } function setTokens(address[] memory _tokens, uint256[] memory _tokenPrecisions) external onlyGov { require(_tokens.length == _tokenPrecisions.length, "FastPriceFeed: invalid lengths"); tokens = _tokens; tokenPrecisions = _tokenPrecisions; } function setPrices(address[] memory _tokens, uint256[] memory _prices, uint256 _timestamp) external onlyUpdater { bool shouldUpdate = _setLastUpdatedValues(_timestamp); if (shouldUpdate) { address _fastPriceEvents = fastPriceEvents; address _vaultPriceFeed = vaultPriceFeed; for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; _setPrice(token, _prices[i], _vaultPriceFeed, _fastPriceEvents); } } } function setCompactedPrices(uint256[] memory _priceBitArray, uint256 _timestamp) external onlyUpdater { bool shouldUpdate = _setLastUpdatedValues(_timestamp); if (shouldUpdate) { address _fastPriceEvents = fastPriceEvents; address _vaultPriceFeed = vaultPriceFeed; for (uint256 i = 0; i < _priceBitArray.length; i++) { uint256 priceBits = _priceBitArray[i]; for (uint256 j = 0; j < 8; j++) { uint256 index = i * 8 + j; if (index >= tokens.length) { return; } uint256 startBit = 32 * j; uint256 price = (priceBits >> startBit) & BITMASK_32; address token = tokens[i * 8 + j]; uint256 tokenPrecision = tokenPrecisions[i * 8 + j]; uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision); _setPrice(token, adjustedPrice, _vaultPriceFeed, _fastPriceEvents); } } } } function setPricesWithBits(uint256 _priceBits, uint256 _timestamp) external onlyUpdater { _setPricesWithBits(_priceBits, _timestamp); } function setPricesWithBitsAndExecute( uint256 _priceBits, uint256 _timestamp, uint256 _endIndexForIncreasePositions, uint256 _endIndexForDecreasePositions, uint256 _maxIncreasePositions, uint256 _maxDecreasePositions ) external onlyUpdater { _setPricesWithBits(_priceBits, _timestamp); IPositionRouter _positionRouter = IPositionRouter(positionRouter); uint256 maxEndIndexForIncrease = _positionRouter.increasePositionRequestKeysStart().add(_maxIncreasePositions); uint256 maxEndIndexForDecrease = _positionRouter.decreasePositionRequestKeysStart().add(_maxDecreasePositions); if (_endIndexForIncreasePositions > maxEndIndexForIncrease) { _endIndexForIncreasePositions = maxEndIndexForIncrease; } if (_endIndexForDecreasePositions > maxEndIndexForDecrease) { _endIndexForDecreasePositions = maxEndIndexForDecrease; } _positionRouter.executeIncreasePositions(_endIndexForIncreasePositions, payable(msg.sender)); _positionRouter.executeDecreasePositions(_endIndexForDecreasePositions, payable(msg.sender)); } function disableFastPrice() external onlySigner { require(!disableFastPriceVotes[msg.sender], "FastPriceFeed: already voted"); disableFastPriceVotes[msg.sender] = true; disableFastPriceVoteCount = disableFastPriceVoteCount.add(1); emit DisableFastPrice(msg.sender); } function enableFastPrice() external onlySigner { require(disableFastPriceVotes[msg.sender], "FastPriceFeed: already enabled"); disableFastPriceVotes[msg.sender] = false; disableFastPriceVoteCount = disableFastPriceVoteCount.sub(1); emit EnableFastPrice(msg.sender); } // under regular operation, the fastPrice (prices[token]) is returned and there is no spread returned from this function, // though VaultPriceFeed might apply its own spread // // if the fastPrice has not been updated within priceDuration then it is ignored and only _refPrice with a spread is used (spread: spreadBasisPointsIfInactive) // in case the fastPrice has not been updated for maxPriceUpdateDelay then the _refPrice with a larger spread is used (spread: spreadBasisPointsIfChainError) // // there will be a spread from the _refPrice to the fastPrice in the following cases: // - in case isSpreadEnabled is set to true // - in case the maxDeviationBasisPoints between _refPrice and fastPrice is exceeded // - in case watchers flag an issue // - in case the cumulativeFastDelta exceeds the cumulativeRefDelta by the maxCumulativeDeltaDiff function getPrice(address _token, uint256 _refPrice, bool _maximise) external override view returns (uint256) { if (block.timestamp > lastUpdatedAt.add(maxPriceUpdateDelay)) { if (_maximise) { return _refPrice.mul(BASIS_POINTS_DIVISOR.add(spreadBasisPointsIfChainError)).div(BASIS_POINTS_DIVISOR); } return _refPrice.mul(BASIS_POINTS_DIVISOR.sub(spreadBasisPointsIfChainError)).div(BASIS_POINTS_DIVISOR); } if (block.timestamp > lastUpdatedAt.add(priceDuration)) { if (_maximise) { return _refPrice.mul(BASIS_POINTS_DIVISOR.add(spreadBasisPointsIfInactive)).div(BASIS_POINTS_DIVISOR); } return _refPrice.mul(BASIS_POINTS_DIVISOR.sub(spreadBasisPointsIfInactive)).div(BASIS_POINTS_DIVISOR); } uint256 fastPrice = prices[_token]; if (fastPrice == 0) { return _refPrice; } uint256 diffBasisPoints = _refPrice > fastPrice ? _refPrice.sub(fastPrice) : fastPrice.sub(_refPrice); diffBasisPoints = diffBasisPoints.mul(BASIS_POINTS_DIVISOR).div(_refPrice); // create a spread between the _refPrice and the fastPrice if the maxDeviationBasisPoints is exceeded // or if watchers have flagged an issue with the fast price bool hasSpread = !favorFastPrice(_token) || diffBasisPoints > maxDeviationBasisPoints; if (hasSpread) { // return the higher of the two prices if (_maximise) { return _refPrice > fastPrice ? _refPrice : fastPrice; } // return the lower of the two prices return _refPrice < fastPrice ? _refPrice : fastPrice; } return fastPrice; } function favorFastPrice(address _token) public view returns (bool) { if (isSpreadEnabled) { return false; } if (disableFastPriceVoteCount >= minAuthorizations) { // force a spread if watchers have flagged an issue with the fast price return false; } (/* uint256 prevRefPrice */, /* uint256 refTime */, uint256 cumulativeRefDelta, uint256 cumulativeFastDelta) = getPriceData(_token); if (cumulativeFastDelta > cumulativeRefDelta && cumulativeFastDelta.sub(cumulativeRefDelta) > maxCumulativeDeltaDiffs[_token]) { // force a spread if the cumulative delta for the fast price feed exceeds the cumulative delta // for the Chainlink price feed by the maxCumulativeDeltaDiff allowed return false; } return true; } function getPriceData(address _token) public view returns (uint256, uint256, uint256, uint256) { PriceDataItem memory data = priceData[_token]; return (uint256(data.refPrice), uint256(data.refTime), uint256(data.cumulativeRefDelta), uint256(data.cumulativeFastDelta)); } function _setPricesWithBits(uint256 _priceBits, uint256 _timestamp) private { bool shouldUpdate = _setLastUpdatedValues(_timestamp); if (shouldUpdate) { address _fastPriceEvents = fastPriceEvents; address _vaultPriceFeed = vaultPriceFeed; for (uint256 j = 0; j < 8; j++) { uint256 index = j; if (index >= tokens.length) { return; } uint256 startBit = 32 * j; uint256 price = (_priceBits >> startBit) & BITMASK_32; address token = tokens[j]; uint256 tokenPrecision = tokenPrecisions[j]; uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision); _setPrice(token, adjustedPrice, _vaultPriceFeed, _fastPriceEvents); } } } function _setPrice(address _token, uint256 _price, address _vaultPriceFeed, address _fastPriceEvents) private { if (_vaultPriceFeed != address(0)) { uint256 refPrice = IVaultPriceFeed(_vaultPriceFeed).getLatestPrimaryPrice(_token); uint256 fastPrice = prices[_token]; (uint256 prevRefPrice, uint256 refTime, uint256 cumulativeRefDelta, uint256 cumulativeFastDelta) = getPriceData(_token); if (prevRefPrice > 0) { uint256 refDeltaAmount = refPrice > prevRefPrice ? refPrice.sub(prevRefPrice) : prevRefPrice.sub(refPrice); uint256 fastDeltaAmount = fastPrice > _price ? fastPrice.sub(_price) : _price.sub(fastPrice); // reset cumulative delta values if it is a new time window if (refTime.div(priceDataInterval) != block.timestamp.div(priceDataInterval)) { cumulativeRefDelta = 0; cumulativeFastDelta = 0; } cumulativeRefDelta = cumulativeRefDelta.add(refDeltaAmount.mul(CUMULATIVE_DELTA_PRECISION).div(prevRefPrice)); cumulativeFastDelta = cumulativeFastDelta.add(fastDeltaAmount.mul(CUMULATIVE_DELTA_PRECISION).div(fastPrice)); } if (cumulativeFastDelta > cumulativeRefDelta && cumulativeFastDelta.sub(cumulativeRefDelta) > maxCumulativeDeltaDiffs[_token]) { emit MaxCumulativeDeltaDiffExceeded(_token, refPrice, fastPrice, cumulativeRefDelta, cumulativeFastDelta); } _setPriceData(_token, refPrice, cumulativeRefDelta, cumulativeFastDelta); emit PriceData(_token, refPrice, fastPrice, cumulativeRefDelta, cumulativeFastDelta); } prices[_token] = _price; _emitPriceEvent(_fastPriceEvents, _token, _price); } function _setPriceData(address _token, uint256 _refPrice, uint256 _cumulativeRefDelta, uint256 _cumulativeFastDelta) private { require(_refPrice < MAX_REF_PRICE, "FastPriceFeed: invalid refPrice"); // skip validation of block.timestamp, it should only be out of range after the year 2100 require(_cumulativeRefDelta < MAX_CUMULATIVE_REF_DELTA, "FastPriceFeed: invalid cumulativeRefDelta"); require(_cumulativeFastDelta < MAX_CUMULATIVE_FAST_DELTA, "FastPriceFeed: invalid cumulativeFastDelta"); priceData[_token] = PriceDataItem( uint160(_refPrice), uint32(block.timestamp), uint32(_cumulativeRefDelta), uint32(_cumulativeFastDelta) ); } function _emitPriceEvent(address _fastPriceEvents, address _token, uint256 _price) private { if (_fastPriceEvents == address(0)) { return; } IFastPriceEvents(_fastPriceEvents).emitPriceEvent(_token, _price); } function _setLastUpdatedValues(uint256 _timestamp) private returns (bool) { if (minBlockInterval > 0) { require(block.number.sub(lastUpdatedBlock) >= minBlockInterval, "FastPriceFeed: minBlockInterval not yet passed"); } uint256 _maxTimeDeviation = maxTimeDeviation; require(_timestamp > block.timestamp.sub(_maxTimeDeviation), "FastPriceFeed: _timestamp below allowed range"); require(_timestamp < block.timestamp.add(_maxTimeDeviation), "FastPriceFeed: _timestamp exceeds allowed range"); // do not update prices if _timestamp is before the current lastUpdatedAt value if (_timestamp < lastUpdatedAt) { return false; } lastUpdatedAt = _timestamp; lastUpdatedBlock = block.number; return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"},{"internalType":"uint256","name":"_maxPriceUpdateDelay","type":"uint256"},{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"},{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"},{"internalType":"address","name":"_fastPriceEvents","type":"address"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_positionRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"DisableFastPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"EnableFastPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"refPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fastPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cumulativeRefDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cumulativeFastDelta","type":"uint256"}],"name":"MaxCumulativeDeltaDiffExceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"refPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fastPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cumulativeRefDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cumulativeFastDelta","type":"uint256"}],"name":"PriceData","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BITMASK_32","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CUMULATIVE_DELTA_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CUMULATIVE_FAST_DELTA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CUMULATIVE_REF_DELTA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRICE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REF_PRICE","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":"disableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFastPriceVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disableFastPriceVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastPriceEvents","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"favorFastPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_refPrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPriceData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"},{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_updaters","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpreadEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUpdater","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxCumulativeDeltaDiffs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeviationBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPriceUpdateDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTimeDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAuthorizations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceData","outputs":[{"internalType":"uint160","name":"refPrice","type":"uint160"},{"internalType":"uint32","name":"refTime","type":"uint32"},{"internalType":"uint32","name":"cumulativeRefDelta","type":"uint32"},{"internalType":"uint32","name":"cumulativeFastDelta","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDataInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_priceBitArray","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setCompactedPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fastPriceEvents","type":"address"}],"name":"setFastPriceEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSpreadEnabled","type":"bool"}],"name":"setIsSpreadEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdatedAt","type":"uint256"}],"name":"setLastUpdatedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_maxCumulativeDeltaDiffs","type":"uint256[]"}],"name":"setMaxCumulativeDeltaDiffs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"}],"name":"setMaxDeviationBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPriceUpdateDelay","type":"uint256"}],"name":"setMaxPriceUpdateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTimeDeviation","type":"uint256"}],"name":"setMaxTimeDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"}],"name":"setMinAuthorizations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"}],"name":"setMinBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDataInterval","type":"uint256"}],"name":"setPriceDataInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"}],"name":"setPriceDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPricesWithBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_endIndexForIncreasePositions","type":"uint256"},{"internalType":"uint256","name":"_endIndexForDecreasePositions","type":"uint256"},{"internalType":"uint256","name":"_maxIncreasePositions","type":"uint256"},{"internalType":"uint256","name":"_maxDecreasePositions","type":"uint256"}],"name":"setPricesWithBitsAndExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_spreadBasisPointsIfChainError","type":"uint256"}],"name":"setSpreadBasisPointsIfChainError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_spreadBasisPointsIfInactive","type":"uint256"}],"name":"setSpreadBasisPointsIfInactive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_tokenPrecisions","type":"uint256[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultPriceFeed","type":"address"}],"name":"setVaultPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spreadBasisPointsIfChainError","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spreadBasisPointsIfInactive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrecisions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b1916815560105534801561002057600080fd5b5060405162002f2c38038062002f2c833981810160405260e081101561004557600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151600080546001600160a01b0319163317905594959394929391929091906107088711156100c65760405162461bcd60e51b815260040180806020018281038252602581526020018062002f076025913960400191505060405180910390fd5b600796909655600894909455600b92909255600e55600280546001600160a01b039283166001600160a01b031991821617909155600380549383169382169390931790925560048054919093169116179055612ddf80620001286000396000f3fe608060405234801561001057600080fd5b50600436106102e05760003560e01c806303b04936146102e557806303cd25711461031f57806303f4d7dc146103395780630604ddea146103de5780630e9272ea146103e6578063126082cf1461040a57806312d43a511461041257806314dd2dce1461041a578063162ac4e01461043757806317835d1c1461045d5780631a15339114610480578063238aafb7146104ae578063287800c9146104d45780632a709b14146104dc5780632e9cd94b146104e457806331cb610514610501578063392e53cd1461052f5780633aa08f861461053757806344c231931461053f5780634bd66c1c146103de5780634c0e31c81461055c5780634d11fb4a1461067f5780634f64b2be1461069c5780634fdfb086146106b957806354aea127146106df578063574ec1be146106e757806361ef161f14610722578063668d3d651461072a578063695d4184146107325780636c56fd051461073a5780636ccd47c414610760578063715c75361461076857806372279ba11461077057806374bfed89146107bc578063776d16c1146107c4578063782661bc146107e15780637cb2b79c146109065780637df73e271461092c5780637fbc79c6146109525780637fece36814610a7c578063807c9782146103de57806382553aad14610ab05780638b7677f414610acd57806395082d2514610aea578063a2b47c1614610af2578063a374242514610afa578063a6eca89614610b20578063b0a2566614610b28578063b3606b5614610b30578063b70c7b7014610b38578063c8390a4814610b55578063c84a912414610c78578063cab44b7614610c80578063ce98dfa814610cde578063cfad57a214610cfd578063cfed246b14610d23578063d6a153f114610d49578063d925351a14610d66578063de0d1b9414610d83578063dfb481c914610da0578063e64559ad14610da8578063e68a22c014610db0578063eeaa783a14610db8578063f90ce5ba14610dc0575b600080fd5b61030b600480360360208110156102fb57600080fd5b50356001600160a01b0316610dc8565b604080519115158252519081900360200190f35b610327610ddd565b60408051918252519081900360200190f35b6103dc6004803603604081101561034f57600080fd5b810190602081018135600160201b81111561036957600080fd5b82018360208201111561037b57600080fd5b803590602001918460208302840111600160201b8311171561039c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610de3915050565b005b610327610f5a565b6103ee610f62565b604080516001600160a01b039092168252519081900360200190f35b610327610f71565b6103ee610f77565b6103dc6004803603602081101561043057600080fd5b5035610f86565b6103dc6004803603602081101561044d57600080fd5b50356001600160a01b0316610fd8565b6103dc6004803603604081101561047357600080fd5b5080359060200135611047565b6103dc6004803603604081101561049657600080fd5b506001600160a01b03813516906020013515156110a3565b6103dc600480360360208110156104c457600080fd5b50356001600160a01b031661111b565b61032761118a565b6103ee611190565b6103dc600480360360208110156104fa57600080fd5b503561119f565b6103dc6004803603604081101561051757600080fd5b506001600160a01b03813516906020013515156111f1565b61030b611269565b610327611279565b6103dc6004803603602081101561055557600080fd5b503561127f565b6103dc6004803603604081101561057257600080fd5b810190602081018135600160201b81111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460208302840111600160201b831117156105bf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561060e57600080fd5b82018360208201111561062057600080fd5b803590602001918460208302840111600160201b8311171561064157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611312945050505050565b6103276004803603602081101561069557600080fd5b50356113bd565b6103ee600480360360208110156106b257600080fd5b50356113db565b61030b600480360360208110156106cf57600080fd5b50356001600160a01b0316611402565b610327611417565b6103dc600480360360c08110156106fd57600080fd5b5080359060208101359060408101359060608101359060808101359060a0013561141d565b6103ee61162c565b61032761163b565b61030b611641565b61030b6004803603602081101561075057600080fd5b50356001600160a01b0316611651565b6103dc6116dc565b6103276117ef565b6107966004803603602081101561078657600080fd5b50356001600160a01b03166117f5565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610327611873565b6103dc600480360360208110156107da57600080fd5b5035611879565b6103dc600480360360608110156107f757600080fd5b810190602081018135600160201b81111561081157600080fd5b82018360208201111561082357600080fd5b803590602001918460208302840111600160201b8311171561084457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561089357600080fd5b8201836020820111156108a557600080fd5b803590602001918460208302840111600160201b831117156108c657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506118cb915050565b6103dc6004803603602081101561091c57600080fd5b50356001600160a01b0316611999565b61030b6004803603602081101561094257600080fd5b50356001600160a01b0316611a08565b6103dc6004803603606081101561096857600080fd5b81359190810190604081016020820135600160201b81111561098957600080fd5b82018360208201111561099b57600080fd5b803590602001918460208302840111600160201b831117156109bc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a0b57600080fd5b820183602082011115610a1d57600080fd5b803590602001918460208302840111600160201b83111715610a3e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a1d945050505050565b61032760048036036060811015610a9257600080fd5b506001600160a01b0381351690602081013590604001351515611b76565b6103dc60048036036020811015610ac657600080fd5b5035611cfc565b6103dc60048036036020811015610ae357600080fd5b5035611d4e565b610327611da0565b610327611db0565b61032760048036036020811015610b1057600080fd5b50356001600160a01b0316611db7565b610327611dc9565b610327611dcf565b610327611dd5565b6103dc60048036036020811015610b4e57600080fd5b5035611ddb565b6103dc60048036036040811015610b6b57600080fd5b810190602081018135600160201b811115610b8557600080fd5b820183602082011115610b9757600080fd5b803590602001918460208302840111600160201b83111715610bb857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c0757600080fd5b820183602082011115610c1957600080fd5b803590602001918460208302840111600160201b83111715610c3a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e2d945050505050565b6103dc611ef7565b610ca660048036036020811015610c9657600080fd5b50356001600160a01b031661200e565b604080516001600160a01b03909516855263ffffffff9384166020860152918316848301529091166060830152519081900360800190f35b6103dc60048036036020811015610cf457600080fd5b5035151561204d565b6103dc60048036036020811015610d1357600080fd5b50356001600160a01b03166120b8565b61032760048036036020811015610d3957600080fd5b50356001600160a01b0316612127565b6103dc60048036036020811015610d5f57600080fd5b5035612139565b6103dc60048036036020811015610d7c57600080fd5b503561218b565b6103dc60048036036020811015610d9957600080fd5b50356121dd565b61032761222f565b610327612235565b61032761223b565b6103ee612246565b610327612255565b60166020526000908152604090205460ff1681565b60075481565b3360009081526011602052604090205460ff16610e35576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b6000610e408261225b565b90508015610f54576002546001546001600160a01b03918216911660005b8551811015610f50576000868281518110610e7557fe5b6020026020010151905060005b6008811015610f4657601754600884028201908110610ea75750505050505050610f56565b60178054602084029185831c63ffffffff169160009190600889028701908110610ecd57fe5b6000918252602082200154601880546001600160a01b0390921693509060088a028801908110610ef957fe5b60009182526020822001549150610f2682610f208668327cb2734119d3b7a9601e1b612367565b906123c9565b9050610f3483828c8e612408565b505060019094019350610e8292505050565b5050600101610e5e565b5050505b505b5050565b63ffffffff81565b6002546001600160a01b031681565b61271081565b6000546001600160a01b031681565b6000546001600160a01b03163314610fd3576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600555565b6000546001600160a01b03163314611025576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526011602052604090205460ff16611099576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b610f56828261269d565b6000546001600160a01b031633146110f0576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611168576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600f5481565b6003546001600160a01b031681565b6003546001600160a01b031633146111ec576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b600d55565b6000546001600160a01b0316331461123e576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b600054600160a01b900460ff1681565b600c5481565b6000546001600160a01b031633146112cc576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b61070881111561130d5760405162461bcd60e51b8152600401808060200182810382526025815260200180612c256025913960400191505060405180910390fd5b600755565b6003546001600160a01b0316331461135f576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b60005b8251811015610f5457600083828151811061137957fe5b6020026020010151905082828151811061138f57fe5b6020908102919091018101516001600160a01b03909216600090815260149091526040902055600101611362565b601881815481106113ca57fe5b600091825260209091200154905081565b601781815481106113e857fe5b6000918252602090912001546001600160a01b0316905081565b60116020526000908152604090205460ff1681565b60055481565b3360009081526011602052604090205460ff1661146f576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b611479868661269d565b60048054604080516304dabc3160e51b815290516001600160a01b03909216926000926114f99287928692639b57862092808301926020929182900301818987803b1580156114c757600080fd5b505af11580156114db573d6000803e3d6000fd5b505050506040513d60208110156114f157600080fd5b505190612773565b9050600061153c84846001600160a01b0316631bca8cf06040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156114c757600080fd5b90508187111561154a578196505b80861115611556578095505b60408051629a208160e81b81526004810189905233602482015290516001600160a01b03851691639a20810091604480830192600092919082900301818387803b1580156115a357600080fd5b505af11580156115b7573d6000803e3d6000fd5b50506040805163f3883d8b60e01b8152600481018a905233602482015290516001600160a01b038716935063f3883d8b9250604480830192600092919082900301818387803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b50505050505050505050505050565b6004546001600160a01b031681565b61070881565b600054600160a81b900460ff1681565b60008054600160a81b900460ff161561166c575060006116d7565b600f546010541061167f575060006116d7565b60008061168b846117f5565b93509350505081811180156116c057506001600160a01b0384166000908152601460205260409020546116be82846127cb565b115b156116d0576000925050506116d7565b6001925050505b919050565b3360009081526015602052604090205460ff1661172e576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b3360009081526016602052604090205460ff16611792576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20616c726561647920656e61626c65640000604482015290519081900360640190fd5b336000908152601660205260409020805460ff191690556010546117b79060016127cb565b6010556040805133815290517f9fe0c305c33aa92757a537936872a60be0d91549a4303cc99fd8b7fce8a002759181900360200190a1565b600e5481565b600080600080611803612b1d565b505050506001600160a01b039182166000908152601360209081526040918290208251608081018452905494851680825263ffffffff600160a01b87048116938301849052600160c01b87048116948301859052600160e01b909604909516606090910181905293949093919250565b60095481565b6000546001600160a01b031633146118c6576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600c55565b3360009081526011602052604090205460ff1661191d576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b60006119288261225b565b90508015611993576002546001546001600160a01b03918216911660005b865181101561198f57600087828151811061195d57fe5b602002602001015190506119868188848151811061197757fe5b60200260200101518587612408565b50600101611946565b5050505b50505050565b6003546001600160a01b031633146119e6576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60156020526000908152604090205460ff1681565b6000546001600160a01b03163314611a6a576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600054600160a01b900460ff1615611ab35760405162461bcd60e51b8152600401808060200182810382526022815260200180612d886022913960400191505060405180910390fd5b6000805460ff60a01b1916600160a01b178155600f8490555b8251811015611b1f576000838281518110611ae357fe5b6020908102919091018101516001600160a01b03166000908152601590915260409020805460ff19166001908117909155919091019050611acc565b5060005b8151811015611993576000828281518110611b3a57fe5b6020908102919091018101516001600160a01b03166000908152601190915260409020805460ff19166001908117909155919091019050611b23565b6000611b8f60085460055461277390919063ffffffff16565b421115611bea578115611bca57611bc3612710610f20611bbc600a5461271061277390919063ffffffff16565b8690612367565b9050611cf5565b611bc3612710610f20611bbc600a546127106127cb90919063ffffffff16565b600754600554611bf991612773565b421115611c46578115611c2657611bc3612710610f20611bbc60095461271061277390919063ffffffff16565b611bc3612710610f20611bbc6009546127106127cb90919063ffffffff16565b6001600160a01b03841660009081526012602052604090205480611c6d5783915050611cf5565b6000818511611c8557611c8082866127cb565b611c8f565b611c8f85836127cb565b9050611ca185610f2083612710612367565b90506000611cae87611651565b1580611cbb5750600e5482115b90508015611cef578415611ce257828611611cd65782611cd8565b855b9350505050611cf5565b828610611cd65782611cd8565b50909150505b9392505050565b6003546001600160a01b03163314611d49576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b600e55565b6000546001600160a01b03163314611d9b576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600855565b68327cb2734119d3b7a9601e1b81565b6298968081565b60146020526000908152604090205481565b600a5481565b60105481565b600b5481565b6000546001600160a01b03163314611e28576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600955565b6000546001600160a01b03163314611e7a576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b8051825114611ed0576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20696e76616c6964206c656e677468730000604482015290519081900360640190fd5b8151611ee3906017906020850190612b44565b508051610f54906018906020840190612ba9565b3360009081526015602052604090205460ff16611f49576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b3360009081526016602052604090205460ff1615611fad576040805162461bcd60e51b815260206004820152601c60248201527b11985cdd141c9a58d9519959590e88185b1c9958591e481d9bdd195960221b604482015290519081900360640190fd5b336000908152601660205260409020805460ff19166001908117909155601054611fd691612773565b6010556040805133815290517f4c0c5fabf50e808e3bc8d19577d305e3a7163eea7e8a74a50caa8896694cd44b9181900360200190a1565b6013602052600090815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b8104821691600160e01b9091041684565b6000546001600160a01b0316331461209a576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b60008054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314612105576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b6000546001600160a01b03163314612186576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600b55565b6003546001600160a01b031633146121d8576040805162461bcd60e51b81526020600482015260186024820152600080516020612c94833981519152604482015290519081900360640190fd5b600f55565b6000546001600160a01b0316331461222a576040805162461bcd60e51b81526020600482015260156024820152600080516020612c74833981519152604482015290519081900360640190fd5b600a55565b600d5481565b60085481565b6001600160a01b0381565b6001546001600160a01b031681565b60065481565b600b54600090156122b457600b546006546122779043906127cb565b10156122b45760405162461bcd60e51b815260040180806020018281038252602e815260200180612d31602e913960400191505060405180910390fd5b600c546122c142826127cb565b83116122fe5760405162461bcd60e51b815260040180806020018281038252602d815260200180612d04602d913960400191505060405180910390fd5b6123084282612773565b83106123455760405162461bcd60e51b815260040180806020018281038252602f815260200180612cb4602f913960400191505060405180910390fd5b6005548310156123595760009150506116d7565b505060055543600655600190565b600082612376575060006123c3565b8282028284828161238357fe5b04146123c05760405162461bcd60e51b8152600401808060200182810382526021815260200180612ce36021913960400191505060405180910390fd5b90505b92915050565b60006123c083836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061280d565b6001600160a01b03821615612677576000826001600160a01b03166356bf9de4866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561246657600080fd5b505afa15801561247a573d6000803e3d6000fd5b505050506040513d602081101561249057600080fd5b50516001600160a01b0386166000908152601260205260408120549192508080806124ba8a6117f5565b935093509350935060008411156125815760008487116124e3576124de85886127cb565b6124ed565b6124ed87866127cb565b905060008a8711612507576125028b886127cb565b612511565b612511878c6127cb565b9050612528600d54426123c990919063ffffffff16565b600d546125369087906123c9565b146125445760009350600092505b61255f61255887610f208562989680612367565b8590612773565b935061257c61257588610f208462989680612367565b8490612773565b925050505b81811180156125b057506001600160a01b038a166000908152601460205260409020546125ae82846127cb565b115b1561260d57604080516001600160a01b038c16815260208101889052808201879052606081018490526080810183905290517fe582322b389ad06b2bbf619cd6da3f16a288ec873ea0fa6df4d72f3d9480b4479181900360a00190a15b6126198a8784846128af565b604080516001600160a01b038c16815260208101889052808201879052606081018490526080810183905290517f23b9387f81fca646aac1dc4487ede045c65f5f7445482906565f01e05afdb3a89181900360a00190a15050505050505b6001600160a01b0384166000908152601260205260409020839055611993818585612a45565b60006126a88261225b565b90508015610f54576002546001546001600160a01b03918216911660005b6008811015610f5057601754819081106126e4575050505050610f56565b60178054602084029189831c63ffffffff1691600091908690811061270557fe5b6000918252602082200154601880546001600160a01b039092169350908790811061272c57fe5b6000918252602082200154915061275382610f208668327cb2734119d3b7a9601e1b612367565b905061276183828a8c612408565b5050600190940193506126c692505050565b6000828201838110156123c0576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60006123c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac3565b600081836128995760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561285e578181015183820152602001612846565b50505050905090810190601f16801561288b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816128a557fe5b0495945050505050565b6001600160a01b03831061290a576040805162461bcd60e51b815260206004820152601f60248201527f466173745072696365466565643a20696e76616c696420726566507269636500604482015290519081900360640190fd5b63ffffffff821061294c5760405162461bcd60e51b8152600401808060200182810382526029815260200180612d5f6029913960400191505060405180910390fd5b63ffffffff811061298e5760405162461bcd60e51b815260040180806020018281038252602a815260200180612c4a602a913960400191505060405180910390fd5b604080516080810182526001600160a01b03948516815263ffffffff4281166020808401918252958216838501908152948216606084019081529787166000908152601390965292909420905181549251935196518516600160e01b026001600160e01b03978616600160c01b0263ffffffff60c01b1995909616600160a01b0263ffffffff60a01b19929097166001600160a01b0319909416939093171694909417919091169190911792909216919091179055565b6001600160a01b038316612a5857610f54565b826001600160a01b031663e0409c7183836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aaf57600080fd5b505af115801561198f573d6000803e3d6000fd5b60008184841115612b155760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561285e578181015183820152602001612846565b505050900390565b60408051608081018252600080825260208201819052918101829052606081019190915290565b828054828255906000526020600020908101928215612b99579160200282015b82811115612b9957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612b64565b50612ba5929150612bf0565b5090565b828054828255906000526020600020908101928215612be4579160200282015b82811115612be4578251825591602001919060010190612bc9565b50612ba5929150612c0f565b5b80821115612ba55780546001600160a01b0319168155600101612bf1565b5b80821115612ba55760008155600101612c1056fe466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e466173745072696365466565643a20696e76616c69642063756d756c61746976654661737444656c7461476f7665726e61626c653a20666f7262696464656e0000000000000000000000466173745072696365466565643a20666f7262696464656e0000000000000000466173745072696365466565643a205f74696d657374616d70206578636565647320616c6c6f7765642072616e6765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77466173745072696365466565643a205f74696d657374616d702062656c6f7720616c6c6f7765642072616e6765466173745072696365466565643a206d696e426c6f636b496e74657276616c206e6f742079657420706173736564466173745072696365466565643a20696e76616c69642063756d756c617469766552656644656c7461466173745072696365466565643a20616c726561647920696e697469616c697a6564a2646970667358221220d75eadb6661d9b73682efc3275a329d669995d6d1dc6ffba90d510741f74757264736f6c634300060c0033466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000001e9b35785ef3f7ef2677c371442976bd550f32000000000000000000000000030b12942912cee5a719edec2dd147224fcc373a00000000000000000000000002d270f66fee6ac9e27ff6551af5a8cfb5c8a7493
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000001e9b35785ef3f7ef2677c371442976bd550f32000000000000000000000000030b12942912cee5a719edec2dd147224fcc373a00000000000000000000000002d270f66fee6ac9e27ff6551af5a8cfb5c8a7493
-----Decoded View---------------
Arg [0] : _priceDuration (uint256): 300
Arg [1] : _maxPriceUpdateDelay (uint256): 3600
Arg [2] : _minBlockInterval (uint256): 1
Arg [3] : _maxDeviationBasisPoints (uint256): 250
Arg [4] : _fastPriceEvents (address): 0x01e9b35785ef3f7ef2677c371442976bd550f320
Arg [5] : _tokenManager (address): 0x30b12942912cee5a719edec2dd147224fcc373a0
Arg [6] : _positionRouter (address): 0x2d270f66fee6ac9e27ff6551af5a8cfb5c8a7493
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [4] : 00000000000000000000000001e9b35785ef3f7ef2677c371442976bd550f320
Arg [5] : 00000000000000000000000030b12942912cee5a719edec2dd147224fcc373a0
Arg [6] : 0000000000000000000000002d270f66fee6ac9e27ff6551af5a8cfb5c8a7493
Deployed ByteCode Sourcemap
8894:19835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11066:54;;;;;;;;;;;;;;;;-1:-1:-1;11066:54:0;-1:-1:-1;;;;;11066:54:0;;:::i;:::-;;;;;;;;;;;;;;;;;;10313:28;;;:::i;:::-;;;;;;;;;;;;;;;;17173:1090;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17173:1090:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17173:1090:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17173:1090:0;;-1:-1:-1;;17173:1090:0;;;-1:-1:-1;17173:1090:0;;-1:-1:-1;;17173:1090:0:i;:::-;;9536:67;;;:::i;10107:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;10107:30:0;;;;;;;;;;;;;;9870:52;;;:::i;8609:18::-;;;:::i;15261:116::-;;;;;;;;;;;;;;;;-1:-1:-1;15261:116:0;;:::i;13804:122::-;;;;;;;;;;;;;;;;-1:-1:-1;13804:122:0;-1:-1:-1;;;;;13804:122:0;;:::i;18271:149::-;;;;;;;;;;;;;;;;-1:-1:-1;18271:149:0;;;;;;;:::i;13666:130::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13666:130:0;;;;;;;;;;:::i;13934:127::-;;;;;;;;;;;;;;;;-1:-1:-1;13934:127:0;-1:-1:-1;;;;;13934:127:0;;:::i;10700:32::-;;;:::i;10146:27::-;;;:::i;16036:150::-;;;;;;;;;;;;;;;;-1:-1:-1;16036:150:0;;:::i;13530:128::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13530:128:0;;;;;;;;;;:::i;9995:25::-;;;:::i;10527:31::-;;;:::i;14205:222::-;;;;;;;;;;;;;;;;-1:-1:-1;14205:222:0;;:::i;15696:332::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15696:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15696:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15696:332:0;;;;;;;;-1:-1:-1;15696:332:0;;-1:-1:-1;;;;;15696:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15696:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15696:332:0;;-1:-1:-1;15696:332:0;;-1:-1:-1;;;;;15696:332:0:i;11446:32::-;;;;;;;;;;;;;;;;-1:-1:-1;11446:32:0;;:::i;11209:23::-;;;;;;;;;;;;;;;;-1:-1:-1;11209:23:0;;:::i;10792:42::-;;;;;;;;;;;;;;;;-1:-1:-1;10792:42:0;-1:-1:-1;;;;;10792:42:0;;:::i;10220:37::-;;;:::i;18428:1194::-;;;;;;;;;;;;;;;;-1:-1:-1;18428:1194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10182:29::-;;;:::i;9931:55::-;;;:::i;10027:35::-;;;:::i;22959:868::-;;;;;;;;;;;;;;;;-1:-1:-1;22959:868:0;-1:-1:-1;;;;;22959:868:0;;:::i;19948:310::-;;;:::i;10653:38::-;;;:::i;23835:293::-;;;;;;;;;;;;;;;;-1:-1:-1;23835:293:0;-1:-1:-1;;;;;23835:293:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10389:42;;;:::i;14069:128::-;;;;;;;;;;;;;;;;-1:-1:-1;14069:128:0;;:::i;16623:542::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16623:542:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16623:542:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16623:542:0;;;;;;;;-1:-1:-1;16623:542:0;;-1:-1:-1;;;;;16623:542:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16623:542:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16623:542:0;;-1:-1:-1;;16623:542:0;;;-1:-1:-1;16623:542:0;;-1:-1:-1;;16623:542:0:i;15385:121::-;;;;;;;;;;;;;;;;-1:-1:-1;15385:121:0;-1:-1:-1;;;;;15385:121:0;;:::i;11018:41::-;;;;;;;;;;;;;;;;-1:-1:-1;11018:41:0;-1:-1:-1;;;;;11018:41:0;;:::i;12935:587::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12935:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12935:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12935:587:0;;;;;;;;-1:-1:-1;12935:587:0;;-1:-1:-1;;;;;12935:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12935:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12935:587:0;;-1:-1:-1;12935:587:0;;-1:-1:-1;;;;;12935:587:0:i;21168:1783::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21168:1783:0;;;;;;;;;;;;;;;:::i;15514:174::-;;;;;;;;;;;;;;;;-1:-1:-1;15514:174:0;;:::i;14435:149::-;;;;;;;;;;;;;;;;-1:-1:-1;14435:149:0;;:::i;9335:50::-;;;:::i;9394:69::-;;;:::i;10950:59::-;;;;;;;;;;;;;;;;-1:-1:-1;10950:59:0;-1:-1:-1;;;;;10950:59:0;;:::i;10438:44::-;;;:::i;10739:::-;;;:::i;10489:31::-;;;:::i;14592:181::-;;;;;;;;;;;;;;;;-1:-1:-1;14592:181:0;;:::i;16343:272::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16343:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16343:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16343:272:0;;;;;;;;-1:-1:-1;16343:272:0;;-1:-1:-1;;;;;16343:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16343:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16343:272:0;;-1:-1:-1;16343:272:0;;-1:-1:-1;;;;;16343:272:0:i;19630:310::-;;;:::i;10892:51::-;;;;;;;;;;;;;;;;-1:-1:-1;10892:51:0;-1:-1:-1;;;;;10892:51:0;;:::i;:::-;;;;-1:-1:-1;;;;;10892:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15123:130;;;;;;;;;;;;;;;;-1:-1:-1;15123:130:0;;;;:::i;8809:76::-;;;;;;;;;;;;;;;;-1:-1:-1;8809:76:0;-1:-1:-1;;;;;8809:76:0;;:::i;10843:42::-;;;;;;;;;;;;;;;;-1:-1:-1;10843:42:0;-1:-1:-1;;;;;10843:42:0;;:::i;14978:137::-;;;;;;;;;;;;;;;;-1:-1:-1;14978:137:0;;:::i;16194:141::-;;;;;;;;;;;;;;;;-1:-1:-1;16194:141:0;;:::i;14781:189::-;;;;;;;;;;;;;;;;-1:-1:-1;14781:189:0;;:::i;10567:32::-;;;:::i;10348:34::-;;;:::i;9472:57::-;;;:::i;10071:29::-;;;:::i;10264:40::-;;;:::i;11066:54::-;;;;;;;;;;;;;;;:::o;10313:28::-;;;;:::o;17173:1090::-;12031:10;12021:21;;;;:9;:21;;;;;;;;12013:58;;;;;-1:-1:-1;;;12013:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12013:58:0;;;;;;;;;;;;;;;17286:17:::1;17306:33;17328:10;17306:21;:33::i;:::-;17286:53;;17356:12;17352:904;;;17412:15;::::0;;17468:14;-1:-1:-1;;;;;17412:15:0;;::::1;::::0;17468:14:::1;17385:24;17499:746;17523:14;:21;17519:1;:25;17499:746;;;17570:17;17590:14;17605:1;17590:17;;;;;;;;;;;;;;17570:37;;17633:9;17628:602;17652:1;17648;:5;17628:602;;;17744:6;:13:::0;17703:1:::1;17699:5:::0;::::1;:9:::0;::::1;::::0;17735:22;::::1;17731:39;;17761:7;;;;;;;;;17731:39;17935:6;:17:::0;;17813:2:::1;:6:::0;::::1;::::0;17859:21;;::::1;9836:25:::0;17858:36:::1;::::0;17794:16:::1;::::0;17935:6;17946:1:::1;17942:5:::0;::::1;:9:::0;::::1;::::0;17935:17;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;18000:15:::1;:26:::0;;-1:-1:-1;;;;;17935:17:0;;::::1;::::0;-1:-1:-1;18000:15:0;18020:1:::1;18016:5:::0;::::1;:9:::0;::::1;::::0;18000:26;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;18073:46:0::1;18000:26:::0;18073::::1;:5:::0;-1:-1:-1;;;18073:9:0::1;:26::i;:::-;:30:::0;::::1;:46::i;:::-;18049:70;;18144:66;18154:5;18161:13;18176:15;18193:16;18144:9;:66::i;:::-;-1:-1:-1::0;;17655:3:0::1;::::0;;::::1;::::0;-1:-1:-1;17628:602:0::1;::::0;-1:-1:-1;;;17628:602:0::1;;-1:-1:-1::0;;17546:3:0::1;;17499:746;;;;17352:904;;;12082:1;;17173:1090:::0;;:::o;9536:67::-;9587:16;9536:67;:::o;10107:30::-;;;-1:-1:-1;;;;;10107:30:0;;:::o;9870:52::-;9917:5;9870:52;:::o;8609:18::-;;;-1:-1:-1;;;;;8609:18:0;;:::o;15261:116::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;15339:13:::1;:30:::0;15261:116::o;13804:122::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;13884:15:::1;:34:::0;;-1:-1:-1;;;;;;13884:34:0::1;-1:-1:-1::0;;;;;13884:34:0;;;::::1;::::0;;;::::1;::::0;;13804:122::o;18271:149::-;12031:10;12021:21;;;;:9;:21;;;;;;;;12013:58;;;;;-1:-1:-1;;;12013:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12013:58:0;;;;;;;;;;;;;;;18370:42:::1;18389:10;18401;18370:18;:42::i;13666:130::-:0;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13757:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:31;;-1:-1:-1;;13757:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13666:130::o;13934:127::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;14021:14:::1;:32:::0;;-1:-1:-1;;;;;;14021:32:0::1;-1:-1:-1::0;;;;;14021:32:0;;;::::1;::::0;;;::::1;::::0;;13934:127::o;10700:32::-;;;;:::o;10146:27::-;;;-1:-1:-1;;;;;10146:27:0;;:::o;16036:150::-;12160:12;;-1:-1:-1;;;;;12160:12:0;12146:10;:26;12138:63;;;;;-1:-1:-1;;;12138:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12138:63:0;;;;;;;;;;;;;;;16140:17:::1;:38:::0;16036:150::o;13530:128::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13620:18:0;;;::::1;;::::0;;;:8:::1;:18;::::0;;;;:30;;-1:-1:-1;;13620:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13530:128::o;9995:25::-;;;-1:-1:-1;;;9995:25:0;;;;;:::o;10527:31::-;;;;:::o;14205:222::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;9976:10:::1;14300:14;:36;;14292:86;;;;-1:-1:-1::0;;;14292:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14389:13;:30:::0;14205:222::o;15696:332::-;12160:12;;-1:-1:-1;;;;;12160:12:0;12146:10;:26;12138:63;;;;;-1:-1:-1;;;12138:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12138:63:0;;;;;;;;;;;;;;;15853:9:::1;15848:173;15872:7;:14;15868:1;:18;15848:173;;;15908:13;15924:7;15932:1;15924:10;;;;;;;;;;;;;;15908:26;;15982:24;16007:1;15982:27;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;15949:30:0;;::::1;;::::0;;;:23:::1;:30:::0;;;;;;:60;15888:3:::1;;15848:173;;11446:32:::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11446:32:0;:::o;11209:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11209:23:0;;-1:-1:-1;11209:23:0;:::o;10792:42::-;;;;;;;;;;;;;;;:::o;10220:37::-;;;;:::o;18428:1194::-;12031:10;12021:21;;;;:9;:21;;;;;;;;12013:58;;;;;-1:-1:-1;;;12013:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12013:58:0;;;;;;;;;;;;;;;18738:42:::1;18757:10;18769;18738:18;:42::i;:::-;18843:14;::::0;;18902:50:::1;::::0;;-1:-1:-1;;;18902:50:0;;;;-1:-1:-1;;;;;18843:14:0;;::::1;::::0;18793:31:::1;::::0;18902:77:::1;::::0;18957:21;;18843:14;;18902:48:::1;::::0;:50;;::::1;::::0;::::1;::::0;;;;;;;18793:31;18843:14;18902:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18902:50:0;;:54:::1;:77::i;:::-;18869:110;;18990:30;19023:77;19078:21;19023:15;-1:-1:-1::0;;;;;19023:48:0::1;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:77;18990:110;;19149:22;19117:29;:54;19113:141;;;19220:22;19188:54;;19113:141;19302:22;19270:29;:54;19266:141;;;19373:22;19341:54;;19266:141;19419:92;::::0;;-1:-1:-1;;;19419:92:0;;::::1;::::0;::::1;::::0;;;19499:10:::1;19419:92:::0;;;;;;-1:-1:-1;;;;;19419:40:0;::::1;::::0;::::1;::::0;:92;;;;;-1:-1:-1;;19419:92:0;;;;;;;-1:-1:-1;19419:40:0;:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19522:92:0::1;::::0;;-1:-1:-1;;;19522:92:0;;::::1;::::0;::::1;::::0;;;19602:10:::1;19522:92:::0;;;;;;-1:-1:-1;;;;;19522:40:0;::::1;::::0;-1:-1:-1;19522:40:0::1;::::0;-1:-1:-1;19522:92:0;;;;;-1:-1:-1;;19522:92:0;;;;;;;-1:-1:-1;19522:40:0;:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12082:1;;;18428:1194:::0;;;;;;:::o;10182:29::-;;;-1:-1:-1;;;;;10182:29:0;;:::o;9931:55::-;9976:10;9931:55;:::o;10027:35::-;;;-1:-1:-1;;;10027:35:0;;;;;:::o;22959:868::-;23020:4;23041:15;;-1:-1:-1;;;23041:15:0;;;;23037:60;;;-1:-1:-1;23080:5:0;23073:12;;23037:60;23142:17;;23113:25;;:46;23109:176;;-1:-1:-1;23268:5:0;23261:12;;23109:176;23349:26;23377:27;23408:20;23421:6;23408:12;:20::i;:::-;23297:131;;;;;;23465:18;23443:19;:40;:121;;;;-1:-1:-1;;;;;;23533:31:0;;;;;;:23;:31;;;;;;23487:43;:19;23511:18;23487:23;:43::i;:::-;:77;23443:121;23439:357;;;23779:5;23772:12;;;;;;23439:357;23815:4;23808:11;;;;22959:868;;;;:::o;19948:310::-;11911:10;11902:20;;;;:8;:20;;;;;;;;11894:57;;;;;-1:-1:-1;;;11894:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11894:57:0;;;;;;;;;;;;;;;20036:10:::1;20014:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;20006:76;;;::::0;;-1:-1:-1;;;20006:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20115:10;20129:5;20093:33:::0;;;:21:::1;:33;::::0;;;;:41;;-1:-1:-1;;20093:41:0::1;::::0;;20173:25:::1;::::0;:32:::1;::::0;20093:41;20173:29:::1;:32::i;:::-;20145:25;:60:::0;20223:27:::1;::::0;;20239:10:::1;20223:27:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;19948:310::o:0;10653:38::-;;;;:::o;23835:293::-;23894:7;23903;23912;23921;23941:25;;:::i;:::-;-1:-1:-1;;;;;;;;;23969:17:0;;;;;;;:9;:17;;;;;;;;;23941:45;;;;;;;;;;;;;;;;-1:-1:-1;;;23941:45:0;;;;;;;;;;-1:-1:-1;;;23941:45:0;;;;;;;;;;-1:-1:-1;;;23941:45:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;23835:293:0:o;10389:42::-;;;;:::o;14069:128::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;14153:16:::1;:36:::0;14069:128::o;16623:542::-;12031:10;12021:21;;;;:9;:21;;;;;;;;12013:58;;;;;-1:-1:-1;;;12013:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12013:58:0;;;;;;;;;;;;;;;16746:17:::1;16766:33;16788:10;16766:21;:33::i;:::-;16746:53;;16816:12;16812:346;;;16872:15;::::0;;16928:14;-1:-1:-1;;;;;16872:15:0;;::::1;::::0;16928:14:::1;16845:24;16959:188;16983:7;:14;16979:1;:18;16959:188;;;17023:13;17039:7;17047:1;17039:10;;;;;;;;;;;;;;17023:26;;17068:63;17078:5;17085:7;17093:1;17085:10;;;;;;;;;;;;;;17097:15;17114:16;17068:9;:63::i;:::-;-1:-1:-1::0;16999:3:0::1;;16959:188;;;;16812:346;;;12082:1;16623:542:::0;;;:::o;15385:121::-;12160:12;;-1:-1:-1;;;;;12160:12:0;12146:10;:26;12138:63;;;;;-1:-1:-1;;;12138:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12138:63:0;;;;;;;;;;;;;;;15470:12:::1;:28:::0;;-1:-1:-1;;;;;;15470:28:0::1;-1:-1:-1::0;;;;;15470:28:0;;;::::1;::::0;;;::::1;::::0;;15385:121::o;11018:41::-;;;;;;;;;;;;;;;:::o;12935:587::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;13073:13:::1;::::0;-1:-1:-1;;;13073:13:0;::::1;;;13072:14;13064:61;;;;-1:-1:-1::0;;;13064:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13136:13;:20:::0;;-1:-1:-1;;;;13136:20:0::1;-1:-1:-1::0;;;13136:20:0::1;::::0;;13169:17:::1;:38:::0;;;13220:139:::1;13244:8;:15;13240:1;:19;13220:139;;;13281:14;13298:8;13307:1;13298:11;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;13324:16:0::1;;::::0;;;:8:::1;:16:::0;;;;;;:23;;-1:-1:-1;;13324:23:0::1;13343:4;13324:23:::0;;::::1;::::0;;;13261:3;;;::::1;::::0;-1:-1:-1;13220:139:0::1;;;;13376:9;13371:144;13395:9;:16;13391:1;:20;13371:144;;;13433:15;13451:9;13461:1;13451:12;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;13478:18:0::1;;::::0;;;:9:::1;:18:::0;;;;;;:25;;-1:-1:-1;;13478:25:0::1;13499:4;13478:25:::0;;::::1;::::0;;;13413:3;;;::::1;::::0;-1:-1:-1;13371:144:0::1;;21168:1783:::0;21269:7;21311:38;21329:19;;21311:13;;:17;;:38;;;;:::i;:::-;21293:15;:56;21289:361;;;21370:9;21366:153;;;21407:96;9917:5;21407:70;21421:55;21446:29;;9917:5;21421:24;;:55;;;;:::i;:::-;21407:9;;:13;:70::i;:96::-;21400:103;;;;21366:153;21542:96;9917:5;21542:70;21556:55;21581:29;;9917:5;21556:24;;:55;;;;:::i;21289:361::-;21702:13;;21684;;:32;;:17;:32::i;:::-;21666:15;:50;21662:351;;;21737:9;21733:151;;;21774:94;9917:5;21774:68;21788:53;21813:27;;9917:5;21788:24;;:53;;;;:::i;21733:151::-;21907:94;9917:5;21907:68;21921:53;21946:27;;9917:5;21921:24;;:53;;;;:::i;21662:351::-;-1:-1:-1;;;;;22045:14:0;;22025:17;22045:14;;;:6;:14;;;;;;22074;22070:41;;22099:9;22092:16;;;;;22070:41;22123:23;22161:9;22149;:21;:75;;22200:24;:9;22214;22200:13;:24::i;:::-;22149:75;;;22173:24;:9;22187;22173:13;:24::i;:::-;22123:101;-1:-1:-1;22253:56:0;22299:9;22253:41;22123:101;9917:5;22253:19;:41::i;:56::-;22235:74;;22502:14;22520:22;22535:6;22520:14;:22::i;:::-;22519:23;:68;;;;22564:23;;22546:15;:41;22519:68;22502:85;;22604:9;22600:315;;;22686:9;22682:102;;;22735:9;22723;:21;:45;;22759:9;22723:45;;;22747:9;22723:45;22716:52;;;;;;;22682:102;22870:9;22858;:21;:45;;22894:9;22858:45;;22600:315;-1:-1:-1;22934:9:0;;-1:-1:-1;;21168:1783:0;;;;;;:::o;15514:174::-;12160:12;;-1:-1:-1;;;;;12160:12:0;12146:10;:26;12138:63;;;;;-1:-1:-1;;;12138:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12138:63:0;;;;;;;;;;;;;;;15630:23:::1;:50:::0;15514:174::o;14435:149::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;14534:19:::1;:42:::0;14435:149::o;9335:50::-;-1:-1:-1;;;9335:50:0;:::o;9394:69::-;9447:16;9394:69;:::o;10950:59::-;;;;;;;;;;;;;:::o;10438:44::-;;;;:::o;10739:::-;;;;:::o;10489:31::-;;;;:::o;14592:181::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;14707:27:::1;:58:::0;14592:181::o;16343:272::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;16477:16:::1;:23;16459:7;:14;:41;16451:84;;;::::0;;-1:-1:-1;;;16451:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16546:16:::0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;16573:34:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;19630:310::-:0;11911:10;11902:20;;;;:8;:20;;;;;;;;11894:57;;;;;-1:-1:-1;;;11894:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11894:57:0;;;;;;;;;;;;;;;19720:10:::1;19698:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;19697:34;19689:75;;;::::0;;-1:-1:-1;;;19689:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19689:75:0;;;;;;;;;;;;;::::1;;19797:10;19775:33;::::0;;;:21:::1;:33;::::0;;;;:40;;-1:-1:-1;;19775:40:0::1;19811:4;19775:40:::0;;::::1;::::0;;;19854:25:::1;::::0;:32:::1;::::0;:29:::1;:32::i;:::-;19826:25;:60:::0;19904:28:::1;::::0;;19921:10:::1;19904:28:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;19630:310::o:0;10892:51::-;;;;;;;;;;;;-1:-1:-1;;;;;10892:51:0;;;;-1:-1:-1;;;10892:51:0;;;;;-1:-1:-1;;;10892:51:0;;;;;-1:-1:-1;;;10892:51:0;;;;;:::o;15123:130::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;15211:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;15211:34:0::1;-1:-1:-1::0;;;;15211:34:0;;::::1;::::0;;;::::1;::::0;;15123:130::o;8809:76::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;8867:3:::1;:10:::0;;-1:-1:-1;;;;;;8867:10:0::1;-1:-1:-1::0;;;;;8867:10:0;;;::::1;::::0;;;::::1;::::0;;8809:76::o;10843:42::-;;;;;;;;;;;;;:::o;14978:137::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;15071:16:::1;:36:::0;14978:137::o;16194:141::-;12160:12;;-1:-1:-1;;;;;12160:12:0;12146:10;:26;12138:63;;;;;-1:-1:-1;;;12138:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12138:63:0;;;;;;;;;;;;;;;16289:17:::1;:38:::0;16194:141::o;14781:189::-;8752:3;;-1:-1:-1;;;;;8752:3:0;8738:10;:17;8730:51;;;;;-1:-1:-1;;;8730:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8730:51:0;;;;;;;;;;;;;;;14900:29:::1;:62:::0;14781:189::o;10567:32::-;;;;:::o;10348:34::-;;;;:::o;9472:57::-;-1:-1:-1;;;;;9472:57:0;:::o;10071:29::-;;;-1:-1:-1;;;;;10071:29:0;;:::o;10264:40::-;;;;:::o;27892:834::-;27981:16;;27960:4;;27981:20;27977:166;;28064:16;;28043;;28026:34;;:12;;:16;:34::i;:::-;:54;;28018:113;;;;-1:-1:-1;;;28018:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28183:16;;28231:38;:15;28183:16;28231:19;:38::i;:::-;28218:10;:51;28210:109;;;;-1:-1:-1;;;28210:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28351:38;:15;28371:17;28351:19;:38::i;:::-;28338:10;:51;28330:111;;;;-1:-1:-1;;;28330:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28560:13;;28547:10;:26;28543:71;;;28597:5;28590:12;;;;;28543:71;-1:-1:-1;;28626:13:0;:26;28682:12;28663:16;:31;28714:4;;27892:834::o;2258:471::-;2316:7;2561:6;2557:47;;-1:-1:-1;2591:1:0;2584:8;;2557:47;2628:5;;;2632:1;2628;:5;:1;2652:5;;;;;:10;2644:56;;;;-1:-1:-1;;;2644:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2720:1;-1:-1:-1;2258:471:0;;;;;:::o;3205:132::-;3263:7;3290:39;3294:1;3297;3290:39;;;;;;;;;;;;;-1:-1:-1;;;3290:39:0;;;:3;:39::i;25005:1857::-;-1:-1:-1;;;;;25130:29:0;;;25126:1633;;25176:16;25211:15;-1:-1:-1;;;;;25195:54:0;;25250:6;25195:62;;;;;;;;;;;;;-1:-1:-1;;;;;25195:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25195:62:0;-1:-1:-1;;;;;25292:14:0;;25272:17;25292:14;;;:6;25195:62;25292:14;;;;;25195:62;;-1:-1:-1;25272:17:0;;;25422:20;25299:6;25422:12;:20::i;:::-;25323:119;;;;;;;;25478:1;25463:12;:16;25459:818;;;25500:22;25536:12;25525:8;:23;:81;;25580:26;:12;25597:8;25580:16;:26::i;:::-;25525:81;;;25551:26;:8;25564:12;25551;:26::i;:::-;25500:106;;25625:23;25663:6;25651:9;:18;:66;;25696:21;:6;25707:9;25696:10;:21::i;:::-;25651:66;;;25672:21;:9;25686:6;25672:13;:21::i;:::-;25625:92;;25853:38;25873:17;;25853:15;:19;;:38;;;;:::i;:::-;25831:17;;25819:30;;:7;;:11;:30::i;:::-;:72;25815:189;;25937:1;25916:22;;25983:1;25961:23;;25815:189;26045:88;26068:64;26119:12;26068:46;:14;9447:16;26068:18;:46::i;:64::-;26045:18;;:22;:88::i;:::-;26024:109;-1:-1:-1;26174:87:0;26198:62;26250:9;26198:47;:15;9447:16;26198:19;:47::i;:62::-;26174:19;;:23;:87::i;:::-;26152:109;;25459:818;;;26319:18;26297:19;:40;:121;;;;-1:-1:-1;;;;;;26387:31:0;;;;;;:23;:31;;;;;;26341:43;:19;26365:18;26341:23;:43::i;:::-;:77;26297:121;26293:267;;;26444:100;;;-1:-1:-1;;;;;26444:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26293:267;26576:72;26590:6;26598:8;26608:18;26628:19;26576:13;:72::i;:::-;26668:79;;;-1:-1:-1;;;;;26668:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25126:1633;;;;;;;-1:-1:-1;;;;;26771:14:0;;;;;;:6;:14;;;;;:23;;;26805:49;26821:16;26778:6;26788;26805:15;:49::i;24136:861::-;24223:17;24243:33;24265:10;24243:21;:33::i;:::-;24223:53;;24293:12;24289:701;;;24349:15;;;24405:14;-1:-1:-1;;;;;24349:15:0;;;;24405:14;24322:24;24436:543;24460:1;24456;:5;24436:543;;;24536:6;:13;24503:1;;24527:22;;24523:39;;24553:7;;;;;;;24523:39;24716:6;:9;;24601:2;:6;;;24643:22;;;9836:25;24642:37;;24582:16;;24716:6;24606:1;;24716:9;;;;;;;;;;;;;;;24769:15;:18;;-1:-1:-1;;;;;24716:9:0;;;;-1:-1:-1;24769:15:0;24785:1;;24769:18;;;;;;;;;;;;;;;;-1:-1:-1;24830:46:0;24769:18;24830:26;:5;-1:-1:-1;;;24830:9:0;:26::i;:46::-;24806:70;;24897:66;24907:5;24914:13;24929:15;24946:16;24897:9;:66::i;:::-;-1:-1:-1;;24463:3:0;;;;;-1:-1:-1;24436:543:0;;-1:-1:-1;;;24436:543:0;904:181;962:7;994:5;;;1018:6;;;;1010:46;;;;;-1:-1:-1;;;1010:46:0;;;;;;;;;;;;-1:-1:-1;;;1010:46:0;;;;;;;;;;;;;;1368:136;1426:7;1453:43;1457:1;1460;1453:43;;;;;;;;;;;;;;;;;:3;:43::i;3833:278::-;3919:7;3954:12;3947:5;3939:28;;;;-1:-1:-1;;;3939:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3978:9;3994:1;3990;:5;;;;;;;3833:278;-1:-1:-1;;;;;3833:278:0:o;26870:750::-;-1:-1:-1;;;;;27014:25:0;;27006:69;;;;;-1:-1:-1;;;27006:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9587:16;27193:46;;27185:100;;;;-1:-1:-1;;;27185:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9662:16;27304:48;;27296:103;;;;-1:-1:-1;;;27296:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27432:180;;;;;;;;-1:-1:-1;;;;;27432:180:0;;;;;;27500:15;27432:180;;;;;;;;;;;;;;;;;;;;;;;;;;;27412:17;;;-1:-1:-1;27412:17:0;;;:9;:17;;;;;;;:200;;;;;;;;;;;;-1:-1:-1;;;27412:200:0;-1:-1:-1;;;;;27412:200:0;;;-1:-1:-1;;;27412:200:0;-1:-1:-1;;;;27412:200:0;;;;-1:-1:-1;;;27412:200:0;-1:-1:-1;;;;27412:200:0;;;;-1:-1:-1;;;;;;27412:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26870:750::o;27628:256::-;-1:-1:-1;;;;;27734:30:0;;27730:69;;27781:7;;27730:69;27828:16;-1:-1:-1;;;;;27811:49:0;;27861:6;27869;27811:65;;;;;;;;;;;;;-1:-1:-1;;;;;27811:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1807:192;1893:7;1929:12;1921:6;;;;1913:29;;;;-1:-1:-1;;;1913:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1965:5:0;;;1807:192::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://d75eadb6661d9b73682efc3275a329d669995d6d1dc6ffba90d510741f747572
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.