ETH Price: $3,696.84 (-5.64%)

Contract

0x046728da7cb8272284238bD3e47909823d63A58D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...135460642021-11-03 20:31:031132 days ago1635971463IN
0x046728da...23d63A58D
0 ETH0.01184988248.01961211

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapAnchoredView

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 201 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 5 : UniswapAnchoredView.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

import "./UniswapConfig.sol";
import "./UniswapLib.sol";
import "../Ownable.sol";
import "../Chainlink/AggregatorValidatorInterface.sol";

struct Observation {
    uint timestamp;
    uint acc;
}

struct PriceData {
    uint248 price;
    bool failoverActive;
}

contract UniswapAnchoredView is AggregatorValidatorInterface, UniswapConfig, Ownable {
    using FixedPoint for *;

    /// @notice The number of wei in 1 ETH
    uint public constant ethBaseUnit = 1e18;

    /// @notice A common scaling factor to maintain precision
    uint public constant expScale = 1e18;

    /// @notice The highest ratio of the new price to the anchor price that will still trigger the price to be updated
    uint public immutable upperBoundAnchorRatio;

    /// @notice The lowest ratio of the new price to the anchor price that will still trigger the price to be updated
    uint public immutable lowerBoundAnchorRatio;

    /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced
    uint public immutable anchorPeriod;

    /// @notice Official prices by symbol hash
    mapping(bytes32 => PriceData) public prices;

    /// @notice The old observation for each symbolHash
    mapping(bytes32 => Observation) public oldObservations;

    /// @notice The new observation for each symbolHash
    mapping(bytes32 => Observation) public newObservations;

    /// @notice The event emitted when new prices are posted but the stored price is not updated due to the anchor
    event PriceGuarded(bytes32 indexed symbolHash, uint reporter, uint anchor);

    /// @notice The event emitted when the stored price is updated
    event PriceUpdated(bytes32 indexed symbolHash, uint price);

    /// @notice The event emitted when anchor price is updated
    event AnchorPriceUpdated(bytes32 indexed symbolHash, uint anchorPrice, uint oldTimestamp, uint newTimestamp);

    /// @notice The event emitted when the uniswap window changes
    event UniswapWindowUpdated(bytes32 indexed symbolHash, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice);

    /// @notice The event emitted when failover is activated
    event FailoverActivated(bytes32 indexed symbolHash);

    /// @notice The event emitted when failover is deactivated
    event FailoverDeactivated(bytes32 indexed symbolHash);

    bytes32 constant ethHash = keccak256(abi.encodePacked("ETH"));

    /**
     * @notice Construct a uniswap anchored view for a set of token configurations
     * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.
     *      NOTE: Reported prices are set to 1 during construction. We assume that this contract will not be voted in by
     *      governance until prices have been updated through `validate` for each TokenConfig.
     * @param anchorToleranceMantissa_ The percentage tolerance that the reporter may deviate from the uniswap anchor
     * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced
     * @param configs The static token configurations which define what prices are supported and how
     */
    constructor(uint anchorToleranceMantissa_,
                uint anchorPeriod_,
                TokenConfig[] memory configs) UniswapConfig(configs) public {

        anchorPeriod = anchorPeriod_;

        // Allow the tolerance to be whatever the deployer chooses, but prevent under/overflow (and prices from being 0)
        upperBoundAnchorRatio = anchorToleranceMantissa_ > uint(-1) - 100e16 ? uint(-1) : 100e16 + anchorToleranceMantissa_;
        lowerBoundAnchorRatio = anchorToleranceMantissa_ < 100e16 ? 100e16 - anchorToleranceMantissa_ : 1;

        for (uint i = 0; i < configs.length; i++) {
            TokenConfig memory config = configs[i];
            require(config.baseUnit > 0, "baseUnit must be greater than zero");
            address uniswapMarket = config.uniswapMarket;
            if (config.priceSource == PriceSource.REPORTER) {
                require(uniswapMarket != address(0), "reported prices must have an anchor");
                require(config.reporter != address(0), "reported price must have a reporter");
                bytes32 symbolHash = config.symbolHash;
                prices[symbolHash].price = 1;
                uint cumulativePrice = currentCumulativePrice(config);
                oldObservations[symbolHash].timestamp = block.timestamp;
                newObservations[symbolHash].timestamp = block.timestamp;
                oldObservations[symbolHash].acc = cumulativePrice;
                newObservations[symbolHash].acc = cumulativePrice;
                emit UniswapWindowUpdated(symbolHash, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice);
            } else {
                require(uniswapMarket == address(0), "only reported prices utilize an anchor");
            }
        }
    }

    /**
     * @notice Get the official price for a symbol
     * @param symbol The symbol to fetch the price of
     * @return Price denominated in USD, with 6 decimals
     */
    function price(string memory symbol) external view returns (uint) {
        TokenConfig memory config = getTokenConfigBySymbol(symbol);
        return priceInternal(config);
    }

    function priceInternal(TokenConfig memory config) internal view returns (uint) {
        if (config.priceSource == PriceSource.REPORTER) return prices[config.symbolHash].price;
        // config.fixedPrice holds a fixed-point number with scaling factor 10**6 for FIXED_USD
        if (config.priceSource == PriceSource.FIXED_USD) return config.fixedPrice;
        if (config.priceSource == PriceSource.FIXED_ETH) {
            uint usdPerEth = prices[ethHash].price;
            require(usdPerEth > 0, "ETH price not set, cannot convert to dollars");
            // config.fixedPrice holds a fixed-point number with scaling factor 10**18 for FIXED_ETH
            return mul(usdPerEth, config.fixedPrice) / ethBaseUnit;
        }
    }

    /**
     * @notice Get the underlying price of a cToken, in the format expected by the Comptroller.
     * @dev Implements the PriceOracle interface for Compound v2.
     * @param cToken The cToken address for price retrieval
     * @return Price denominated in USD for the given cToken address, in the format expected by the Comptroller.
     */
    function getUnderlyingPrice(address cToken) external view returns (uint) {
        TokenConfig memory config = getTokenConfigByCToken(cToken);
         // Comptroller needs prices in the format: ${raw price} * 1e36 / baseUnit
         // The baseUnit of an asset is the amount of the smallest denomination of that asset per whole.
         // For example, the baseUnit of ETH is 1e18.
         // Since the prices in this view have 6 decimals, we must scale them by 1e(36 - 6)/baseUnit
        return mul(1e30, priceInternal(config)) / config.baseUnit;
    }

    /**
     * @notice This is called by the reporter whenever a new price is posted on-chain
     * @dev called by AccessControlledOffchainAggregator
     * @param currentAnswer the price
     * @return valid bool
     */
    function validate(uint256/* previousRoundId */,
            int256 /* previousAnswer */,
            uint256 /* currentRoundId */,
            int256 currentAnswer) external override returns (bool valid) {

        // NOTE: We don't do any access control on msg.sender here. The access control is done in getTokenConfigByReporter,
        // which will REVERT if an unauthorized address is passed.
        TokenConfig memory config = getTokenConfigByReporter(msg.sender);
        uint256 reportedPrice = convertReportedPrice(config, currentAnswer);
        uint256 anchorPrice = calculateAnchorPriceFromEthPrice(config);

        PriceData memory priceData = prices[config.symbolHash];
        if (priceData.failoverActive) {
            require(anchorPrice < 2**248, "Anchor price too large");
            prices[config.symbolHash].price = uint248(anchorPrice);
            emit PriceUpdated(config.symbolHash, anchorPrice);
        } else if (isWithinAnchor(reportedPrice, anchorPrice)) {
            require(reportedPrice < 2**248, "Reported price too large");
            prices[config.symbolHash].price = uint248(reportedPrice);
            emit PriceUpdated(config.symbolHash, reportedPrice);
            valid = true;
        } else {
            emit PriceGuarded(config.symbolHash, reportedPrice, anchorPrice);
        }
    }

    /**
     * @notice In the event that a feed is failed over to Uniswap TWAP, this function can be called
     * by anyone to update the TWAP price.
     * @dev This only works if the feed represented by the symbolHash is failed over, and will revert otherwise
     * @param symbolHash bytes32
     */
    function pokeFailedOverPrice(bytes32 symbolHash) public {
        PriceData memory priceData = prices[symbolHash];
        require(priceData.failoverActive, "Failover must be active");
        TokenConfig memory config = getTokenConfigBySymbolHash(symbolHash);
        uint anchorPrice = calculateAnchorPriceFromEthPrice(config);
        require(anchorPrice < 2**248, "Anchor price too large");
        prices[config.symbolHash].price = uint248(anchorPrice);
        emit PriceUpdated(config.symbolHash, anchorPrice);
    }

    /**
     * @notice Calculate the anchor price by fetching price data from the TWAP
     * @param config TokenConfig
     * @return anchorPrice uint
     */
    function calculateAnchorPriceFromEthPrice(TokenConfig memory config) internal returns (uint anchorPrice) {
        uint ethPrice = fetchEthAnchorPrice();
        require(config.priceSource == PriceSource.REPORTER, "only reporter prices get posted");
        if (config.symbolHash == ethHash) {
            anchorPrice = ethPrice;
        } else {
            anchorPrice = fetchAnchorPrice(config.symbolHash, config, ethPrice);
        }
    }

    /**
     * @notice Convert the reported price to the 6 decimal format that this view requires
     * @param config TokenConfig
     * @param reportedPrice from the reporter
     * @return convertedPrice uint256
     */
    function convertReportedPrice(TokenConfig memory config, int256 reportedPrice) internal pure returns (uint256) {
        require(reportedPrice >= 0, "Reported price cannot be negative");
        uint256 unsignedPrice = uint256(reportedPrice);
        uint256 convertedPrice = mul(unsignedPrice, config.reporterMultiplier) / config.baseUnit;
        return convertedPrice;
    }


    function isWithinAnchor(uint reporterPrice, uint anchorPrice) internal view returns (bool) {
        if (reporterPrice > 0) {
            uint anchorRatio = mul(anchorPrice, 100e16) / reporterPrice;
            return anchorRatio <= upperBoundAnchorRatio && anchorRatio >= lowerBoundAnchorRatio;
        }
        return false;
    }

    /**
     * @dev Fetches the current token/eth price accumulator from uniswap.
     */
    function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) {
        (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket);
        if (config.isUniswapReversed) {
            return cumulativePrice1;
        } else {
            return cumulativePrice0;
        }
    }

    /**
     * @dev Fetches the current eth/usd price from uniswap, with 6 decimals of precision.
     *  Conversion factor is 1e18 for eth/usdc market, since we decode uniswap price statically with 18 decimals.
     */
    function fetchEthAnchorPrice() internal returns (uint) {
        return fetchAnchorPrice(ethHash, getTokenConfigBySymbolHash(ethHash), ethBaseUnit);
    }

    /**
     * @dev Fetches the current token/usd price from uniswap, with 6 decimals of precision.
     * @param conversionFactor 1e18 if seeking the ETH price, and a 6 decimal ETH-USDC price in the case of other assets
     */
    function fetchAnchorPrice(bytes32 symbolHash, TokenConfig memory config, uint conversionFactor) internal virtual returns (uint) {
        (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config);

        // This should be impossible, but better safe than sorry
        require(block.timestamp > oldTimestamp, "now must come after before");
        uint timeElapsed = block.timestamp - oldTimestamp;

        // Calculate uniswap time-weighted average price
        // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190
        FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed));
        uint rawUniswapPriceMantissa = priceAverage.decode112with18();
        uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, conversionFactor);
        uint anchorPrice;

        // Adjust rawUniswapPrice according to the units of the non-ETH asset
        // In the case of ETH, we would have to scale by 1e6 / USDC_UNITS, but since baseUnit2 is 1e6 (USDC), it cancels

        // In the case of non-ETH tokens
        // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price.
        // b. conversionFactor = ETH price * 1e6
        // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor
        // so ->
        // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * ETH_price * 1e6
        //             = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit
        //             = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit
        anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale;

        emit AnchorPriceUpdated(symbolHash, anchorPrice, oldTimestamp, block.timestamp);

        return anchorPrice;
    }

    /**
     * @dev Get time-weighted average prices for a token at the current timestamp.
     *  Update new and old observations of lagging window if period elapsed.
     */
    function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) {
        bytes32 symbolHash = config.symbolHash;
        uint cumulativePrice = currentCumulativePrice(config);

        Observation memory newObservation = newObservations[symbolHash];

        // Update new and old observations if elapsed time is greater than or equal to anchor period
        uint timeElapsed = block.timestamp - newObservation.timestamp;
        if (timeElapsed >= anchorPeriod) {
            oldObservations[symbolHash].timestamp = newObservation.timestamp;
            oldObservations[symbolHash].acc = newObservation.acc;

            newObservations[symbolHash].timestamp = block.timestamp;
            newObservations[symbolHash].acc = cumulativePrice;
            emit UniswapWindowUpdated(config.symbolHash, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice);
        }
        return (cumulativePrice, oldObservations[symbolHash].acc, oldObservations[symbolHash].timestamp);
    }

    /**
     * @notice Activate failover, and fall back to using failover directly.
     * @dev Only the owner can call this function
     */
    function activateFailover(bytes32 symbolHash) external onlyOwner() {
        require(!prices[symbolHash].failoverActive, "Already activated");
        prices[symbolHash].failoverActive = true;
        emit FailoverActivated(symbolHash);
        pokeFailedOverPrice(symbolHash);
    }

    /**
     * @notice Deactivate a previously activated failover
     * @dev Only the owner can call this function
     */
    function deactivateFailover(bytes32 symbolHash) external onlyOwner() {
        require(prices[symbolHash].failoverActive, "Already deactivated");
        prices[symbolHash].failoverActive = false;
        emit FailoverDeactivated(symbolHash);
    }

    /// @dev Overflow proof multiplication
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) return 0;
        uint c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }
}

File 2 of 5 : AggregatorValidatorInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface AggregatorValidatorInterface {
	function validate(uint256 previousRoundId,
			int256 previousAnswer,
			uint256 currentRoundId,
			int256 currentAnswer) external returns (bool);
}

File 3 of 5 : UniswapConfig.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

interface CErc20 {
    function underlying() external view returns (address);
}

contract UniswapConfig {
    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.
    enum PriceSource {
        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)
        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)
        REPORTER   /// implies the price is set by the reporter
    }

    /// @dev Describe how the USD price should be determined for an asset.
    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.
    struct TokenConfig {
        address cToken;
        address underlying;
        bytes32 symbolHash;
        uint256 baseUnit;
        PriceSource priceSource;
        uint256 fixedPrice;
        address uniswapMarket;
        address reporter;
        uint256 reporterMultiplier;
        bool isUniswapReversed;
    }

    /// @notice The max number of tokens this contract is hardcoded to support
    /// @dev Do not change this variable without updating all the fields throughout the contract.
    uint public constant maxTokens = 25;

    /// @notice The number of tokens this contract actually supports
    uint public immutable numTokens;

    address internal immutable cToken00;
    address internal immutable cToken01;
    address internal immutable cToken02;
    address internal immutable cToken03;
    address internal immutable cToken04;
    address internal immutable cToken05;
    address internal immutable cToken06;
    address internal immutable cToken07;
    address internal immutable cToken08;
    address internal immutable cToken09;
    address internal immutable cToken10;
    address internal immutable cToken11;
    address internal immutable cToken12;
    address internal immutable cToken13;
    address internal immutable cToken14;
    address internal immutable cToken15;
    address internal immutable cToken16;
    address internal immutable cToken17;
    address internal immutable cToken18;
    address internal immutable cToken19;
    address internal immutable cToken20;
    address internal immutable cToken21;
    address internal immutable cToken22;
    address internal immutable cToken23;
    address internal immutable cToken24;

    address internal immutable underlying00;
    address internal immutable underlying01;
    address internal immutable underlying02;
    address internal immutable underlying03;
    address internal immutable underlying04;
    address internal immutable underlying05;
    address internal immutable underlying06;
    address internal immutable underlying07;
    address internal immutable underlying08;
    address internal immutable underlying09;
    address internal immutable underlying10;
    address internal immutable underlying11;
    address internal immutable underlying12;
    address internal immutable underlying13;
    address internal immutable underlying14;
    address internal immutable underlying15;
    address internal immutable underlying16;
    address internal immutable underlying17;
    address internal immutable underlying18;
    address internal immutable underlying19;
    address internal immutable underlying20;
    address internal immutable underlying21;
    address internal immutable underlying22;
    address internal immutable underlying23;
    address internal immutable underlying24;

    bytes32 internal immutable symbolHash00;
    bytes32 internal immutable symbolHash01;
    bytes32 internal immutable symbolHash02;
    bytes32 internal immutable symbolHash03;
    bytes32 internal immutable symbolHash04;
    bytes32 internal immutable symbolHash05;
    bytes32 internal immutable symbolHash06;
    bytes32 internal immutable symbolHash07;
    bytes32 internal immutable symbolHash08;
    bytes32 internal immutable symbolHash09;
    bytes32 internal immutable symbolHash10;
    bytes32 internal immutable symbolHash11;
    bytes32 internal immutable symbolHash12;
    bytes32 internal immutable symbolHash13;
    bytes32 internal immutable symbolHash14;
    bytes32 internal immutable symbolHash15;
    bytes32 internal immutable symbolHash16;
    bytes32 internal immutable symbolHash17;
    bytes32 internal immutable symbolHash18;
    bytes32 internal immutable symbolHash19;
    bytes32 internal immutable symbolHash20;
    bytes32 internal immutable symbolHash21;
    bytes32 internal immutable symbolHash22;
    bytes32 internal immutable symbolHash23;
    bytes32 internal immutable symbolHash24;

    uint256 internal immutable baseUnit00;
    uint256 internal immutable baseUnit01;
    uint256 internal immutable baseUnit02;
    uint256 internal immutable baseUnit03;
    uint256 internal immutable baseUnit04;
    uint256 internal immutable baseUnit05;
    uint256 internal immutable baseUnit06;
    uint256 internal immutable baseUnit07;
    uint256 internal immutable baseUnit08;
    uint256 internal immutable baseUnit09;
    uint256 internal immutable baseUnit10;
    uint256 internal immutable baseUnit11;
    uint256 internal immutable baseUnit12;
    uint256 internal immutable baseUnit13;
    uint256 internal immutable baseUnit14;
    uint256 internal immutable baseUnit15;
    uint256 internal immutable baseUnit16;
    uint256 internal immutable baseUnit17;
    uint256 internal immutable baseUnit18;
    uint256 internal immutable baseUnit19;
    uint256 internal immutable baseUnit20;
    uint256 internal immutable baseUnit21;
    uint256 internal immutable baseUnit22;
    uint256 internal immutable baseUnit23;
    uint256 internal immutable baseUnit24;

    PriceSource internal immutable priceSource00;
    PriceSource internal immutable priceSource01;
    PriceSource internal immutable priceSource02;
    PriceSource internal immutable priceSource03;
    PriceSource internal immutable priceSource04;
    PriceSource internal immutable priceSource05;
    PriceSource internal immutable priceSource06;
    PriceSource internal immutable priceSource07;
    PriceSource internal immutable priceSource08;
    PriceSource internal immutable priceSource09;
    PriceSource internal immutable priceSource10;
    PriceSource internal immutable priceSource11;
    PriceSource internal immutable priceSource12;
    PriceSource internal immutable priceSource13;
    PriceSource internal immutable priceSource14;
    PriceSource internal immutable priceSource15;
    PriceSource internal immutable priceSource16;
    PriceSource internal immutable priceSource17;
    PriceSource internal immutable priceSource18;
    PriceSource internal immutable priceSource19;
    PriceSource internal immutable priceSource20;
    PriceSource internal immutable priceSource21;
    PriceSource internal immutable priceSource22;
    PriceSource internal immutable priceSource23;
    PriceSource internal immutable priceSource24;

    uint256 internal immutable fixedPrice00;
    uint256 internal immutable fixedPrice01;
    uint256 internal immutable fixedPrice02;
    uint256 internal immutable fixedPrice03;
    uint256 internal immutable fixedPrice04;
    uint256 internal immutable fixedPrice05;
    uint256 internal immutable fixedPrice06;
    uint256 internal immutable fixedPrice07;
    uint256 internal immutable fixedPrice08;
    uint256 internal immutable fixedPrice09;
    uint256 internal immutable fixedPrice10;
    uint256 internal immutable fixedPrice11;
    uint256 internal immutable fixedPrice12;
    uint256 internal immutable fixedPrice13;
    uint256 internal immutable fixedPrice14;
    uint256 internal immutable fixedPrice15;
    uint256 internal immutable fixedPrice16;
    uint256 internal immutable fixedPrice17;
    uint256 internal immutable fixedPrice18;
    uint256 internal immutable fixedPrice19;
    uint256 internal immutable fixedPrice20;
    uint256 internal immutable fixedPrice21;
    uint256 internal immutable fixedPrice22;
    uint256 internal immutable fixedPrice23;
    uint256 internal immutable fixedPrice24;

    address internal immutable uniswapMarket00;
    address internal immutable uniswapMarket01;
    address internal immutable uniswapMarket02;
    address internal immutable uniswapMarket03;
    address internal immutable uniswapMarket04;
    address internal immutable uniswapMarket05;
    address internal immutable uniswapMarket06;
    address internal immutable uniswapMarket07;
    address internal immutable uniswapMarket08;
    address internal immutable uniswapMarket09;
    address internal immutable uniswapMarket10;
    address internal immutable uniswapMarket11;
    address internal immutable uniswapMarket12;
    address internal immutable uniswapMarket13;
    address internal immutable uniswapMarket14;
    address internal immutable uniswapMarket15;
    address internal immutable uniswapMarket16;
    address internal immutable uniswapMarket17;
    address internal immutable uniswapMarket18;
    address internal immutable uniswapMarket19;
    address internal immutable uniswapMarket20;
    address internal immutable uniswapMarket21;
    address internal immutable uniswapMarket22;
    address internal immutable uniswapMarket23;
    address internal immutable uniswapMarket24;

    address internal immutable reporter00;
    address internal immutable reporter01;
    address internal immutable reporter02;
    address internal immutable reporter03;
    address internal immutable reporter04;
    address internal immutable reporter05;
    address internal immutable reporter06;
    address internal immutable reporter07;
    address internal immutable reporter08;
    address internal immutable reporter09;
    address internal immutable reporter10;
    address internal immutable reporter11;
    address internal immutable reporter12;
    address internal immutable reporter13;
    address internal immutable reporter14;
    address internal immutable reporter15;
    address internal immutable reporter16;
    address internal immutable reporter17;
    address internal immutable reporter18;
    address internal immutable reporter19;
    address internal immutable reporter20;
    address internal immutable reporter21;
    address internal immutable reporter22;
    address internal immutable reporter23;
    address internal immutable reporter24;

    uint256 internal immutable reporterMultiplier00;
    uint256 internal immutable reporterMultiplier01;
    uint256 internal immutable reporterMultiplier02;
    uint256 internal immutable reporterMultiplier03;
    uint256 internal immutable reporterMultiplier04;
    uint256 internal immutable reporterMultiplier05;
    uint256 internal immutable reporterMultiplier06;
    uint256 internal immutable reporterMultiplier07;
    uint256 internal immutable reporterMultiplier08;
    uint256 internal immutable reporterMultiplier09;
    uint256 internal immutable reporterMultiplier10;
    uint256 internal immutable reporterMultiplier11;
    uint256 internal immutable reporterMultiplier12;
    uint256 internal immutable reporterMultiplier13;
    uint256 internal immutable reporterMultiplier14;
    uint256 internal immutable reporterMultiplier15;
    uint256 internal immutable reporterMultiplier16;
    uint256 internal immutable reporterMultiplier17;
    uint256 internal immutable reporterMultiplier18;
    uint256 internal immutable reporterMultiplier19;
    uint256 internal immutable reporterMultiplier20;
    uint256 internal immutable reporterMultiplier21;
    uint256 internal immutable reporterMultiplier22;
    uint256 internal immutable reporterMultiplier23;
    uint256 internal immutable reporterMultiplier24;

    bool internal immutable isUniswapReversed00;
    bool internal immutable isUniswapReversed01;
    bool internal immutable isUniswapReversed02;
    bool internal immutable isUniswapReversed03;
    bool internal immutable isUniswapReversed04;
    bool internal immutable isUniswapReversed05;
    bool internal immutable isUniswapReversed06;
    bool internal immutable isUniswapReversed07;
    bool internal immutable isUniswapReversed08;
    bool internal immutable isUniswapReversed09;
    bool internal immutable isUniswapReversed10;
    bool internal immutable isUniswapReversed11;
    bool internal immutable isUniswapReversed12;
    bool internal immutable isUniswapReversed13;
    bool internal immutable isUniswapReversed14;
    bool internal immutable isUniswapReversed15;
    bool internal immutable isUniswapReversed16;
    bool internal immutable isUniswapReversed17;
    bool internal immutable isUniswapReversed18;
    bool internal immutable isUniswapReversed19;
    bool internal immutable isUniswapReversed20;
    bool internal immutable isUniswapReversed21;
    bool internal immutable isUniswapReversed22;
    bool internal immutable isUniswapReversed23;
    bool internal immutable isUniswapReversed24;

    /**
     * @notice Construct an immutable store of configs into the contract data
     * @param configs The configs for the supported assets
     */
    constructor(TokenConfig[] memory configs) public {
        require(configs.length <= maxTokens, "too many configs");
        numTokens = configs.length;

        cToken00 = get(configs, 0).cToken;
        cToken01 = get(configs, 1).cToken;
        cToken02 = get(configs, 2).cToken;
        cToken03 = get(configs, 3).cToken;
        cToken04 = get(configs, 4).cToken;
        cToken05 = get(configs, 5).cToken;
        cToken06 = get(configs, 6).cToken;
        cToken07 = get(configs, 7).cToken;
        cToken08 = get(configs, 8).cToken;
        cToken09 = get(configs, 9).cToken;
        cToken10 = get(configs, 10).cToken;
        cToken11 = get(configs, 11).cToken;
        cToken12 = get(configs, 12).cToken;
        cToken13 = get(configs, 13).cToken;
        cToken14 = get(configs, 14).cToken;
        cToken15 = get(configs, 15).cToken;
        cToken16 = get(configs, 16).cToken;
        cToken17 = get(configs, 17).cToken;
        cToken18 = get(configs, 18).cToken;
        cToken19 = get(configs, 19).cToken;
        cToken20 = get(configs, 20).cToken;
        cToken21 = get(configs, 21).cToken;
        cToken22 = get(configs, 22).cToken;
        cToken23 = get(configs, 23).cToken;
        cToken24 = get(configs, 24).cToken;

        underlying00 = get(configs, 0).underlying;
        underlying01 = get(configs, 1).underlying;
        underlying02 = get(configs, 2).underlying;
        underlying03 = get(configs, 3).underlying;
        underlying04 = get(configs, 4).underlying;
        underlying05 = get(configs, 5).underlying;
        underlying06 = get(configs, 6).underlying;
        underlying07 = get(configs, 7).underlying;
        underlying08 = get(configs, 8).underlying;
        underlying09 = get(configs, 9).underlying;
        underlying10 = get(configs, 10).underlying;
        underlying11 = get(configs, 11).underlying;
        underlying12 = get(configs, 12).underlying;
        underlying13 = get(configs, 13).underlying;
        underlying14 = get(configs, 14).underlying;
        underlying15 = get(configs, 15).underlying;
        underlying16 = get(configs, 16).underlying;
        underlying17 = get(configs, 17).underlying;
        underlying18 = get(configs, 18).underlying;
        underlying19 = get(configs, 19).underlying;
        underlying20 = get(configs, 20).underlying;
        underlying21 = get(configs, 21).underlying;
        underlying22 = get(configs, 22).underlying;
        underlying23 = get(configs, 23).underlying;
        underlying24 = get(configs, 24).underlying;

        symbolHash00 = get(configs, 0).symbolHash;
        symbolHash01 = get(configs, 1).symbolHash;
        symbolHash02 = get(configs, 2).symbolHash;
        symbolHash03 = get(configs, 3).symbolHash;
        symbolHash04 = get(configs, 4).symbolHash;
        symbolHash05 = get(configs, 5).symbolHash;
        symbolHash06 = get(configs, 6).symbolHash;
        symbolHash07 = get(configs, 7).symbolHash;
        symbolHash08 = get(configs, 8).symbolHash;
        symbolHash09 = get(configs, 9).symbolHash;
        symbolHash10 = get(configs, 10).symbolHash;
        symbolHash11 = get(configs, 11).symbolHash;
        symbolHash12 = get(configs, 12).symbolHash;
        symbolHash13 = get(configs, 13).symbolHash;
        symbolHash14 = get(configs, 14).symbolHash;
        symbolHash15 = get(configs, 15).symbolHash;
        symbolHash16 = get(configs, 16).symbolHash;
        symbolHash17 = get(configs, 17).symbolHash;
        symbolHash18 = get(configs, 18).symbolHash;
        symbolHash19 = get(configs, 19).symbolHash;
        symbolHash20 = get(configs, 20).symbolHash;
        symbolHash21 = get(configs, 21).symbolHash;
        symbolHash22 = get(configs, 22).symbolHash;
        symbolHash23 = get(configs, 23).symbolHash;
        symbolHash24 = get(configs, 24).symbolHash;

        baseUnit00 = get(configs, 0).baseUnit;
        baseUnit01 = get(configs, 1).baseUnit;
        baseUnit02 = get(configs, 2).baseUnit;
        baseUnit03 = get(configs, 3).baseUnit;
        baseUnit04 = get(configs, 4).baseUnit;
        baseUnit05 = get(configs, 5).baseUnit;
        baseUnit06 = get(configs, 6).baseUnit;
        baseUnit07 = get(configs, 7).baseUnit;
        baseUnit08 = get(configs, 8).baseUnit;
        baseUnit09 = get(configs, 9).baseUnit;
        baseUnit10 = get(configs, 10).baseUnit;
        baseUnit11 = get(configs, 11).baseUnit;
        baseUnit12 = get(configs, 12).baseUnit;
        baseUnit13 = get(configs, 13).baseUnit;
        baseUnit14 = get(configs, 14).baseUnit;
        baseUnit15 = get(configs, 15).baseUnit;
        baseUnit16 = get(configs, 16).baseUnit;
        baseUnit17 = get(configs, 17).baseUnit;
        baseUnit18 = get(configs, 18).baseUnit;
        baseUnit19 = get(configs, 19).baseUnit;
        baseUnit20 = get(configs, 20).baseUnit;
        baseUnit21 = get(configs, 21).baseUnit;
        baseUnit22 = get(configs, 22).baseUnit;
        baseUnit23 = get(configs, 23).baseUnit;
        baseUnit24 = get(configs, 24).baseUnit;

        priceSource00 = get(configs, 0).priceSource;
        priceSource01 = get(configs, 1).priceSource;
        priceSource02 = get(configs, 2).priceSource;
        priceSource03 = get(configs, 3).priceSource;
        priceSource04 = get(configs, 4).priceSource;
        priceSource05 = get(configs, 5).priceSource;
        priceSource06 = get(configs, 6).priceSource;
        priceSource07 = get(configs, 7).priceSource;
        priceSource08 = get(configs, 8).priceSource;
        priceSource09 = get(configs, 9).priceSource;
        priceSource10 = get(configs, 10).priceSource;
        priceSource11 = get(configs, 11).priceSource;
        priceSource12 = get(configs, 12).priceSource;
        priceSource13 = get(configs, 13).priceSource;
        priceSource14 = get(configs, 14).priceSource;
        priceSource15 = get(configs, 15).priceSource;
        priceSource16 = get(configs, 16).priceSource;
        priceSource17 = get(configs, 17).priceSource;
        priceSource18 = get(configs, 18).priceSource;
        priceSource19 = get(configs, 19).priceSource;
        priceSource20 = get(configs, 20).priceSource;
        priceSource21 = get(configs, 21).priceSource;
        priceSource22 = get(configs, 22).priceSource;
        priceSource23 = get(configs, 23).priceSource;
        priceSource24 = get(configs, 24).priceSource;

        fixedPrice00 = get(configs, 0).fixedPrice;
        fixedPrice01 = get(configs, 1).fixedPrice;
        fixedPrice02 = get(configs, 2).fixedPrice;
        fixedPrice03 = get(configs, 3).fixedPrice;
        fixedPrice04 = get(configs, 4).fixedPrice;
        fixedPrice05 = get(configs, 5).fixedPrice;
        fixedPrice06 = get(configs, 6).fixedPrice;
        fixedPrice07 = get(configs, 7).fixedPrice;
        fixedPrice08 = get(configs, 8).fixedPrice;
        fixedPrice09 = get(configs, 9).fixedPrice;
        fixedPrice10 = get(configs, 10).fixedPrice;
        fixedPrice11 = get(configs, 11).fixedPrice;
        fixedPrice12 = get(configs, 12).fixedPrice;
        fixedPrice13 = get(configs, 13).fixedPrice;
        fixedPrice14 = get(configs, 14).fixedPrice;
        fixedPrice15 = get(configs, 15).fixedPrice;
        fixedPrice16 = get(configs, 16).fixedPrice;
        fixedPrice17 = get(configs, 17).fixedPrice;
        fixedPrice18 = get(configs, 18).fixedPrice;
        fixedPrice19 = get(configs, 19).fixedPrice;
        fixedPrice20 = get(configs, 20).fixedPrice;
        fixedPrice21 = get(configs, 21).fixedPrice;
        fixedPrice22 = get(configs, 22).fixedPrice;
        fixedPrice23 = get(configs, 23).fixedPrice;
        fixedPrice24 = get(configs, 24).fixedPrice;

        uniswapMarket00 = get(configs, 0).uniswapMarket;
        uniswapMarket01 = get(configs, 1).uniswapMarket;
        uniswapMarket02 = get(configs, 2).uniswapMarket;
        uniswapMarket03 = get(configs, 3).uniswapMarket;
        uniswapMarket04 = get(configs, 4).uniswapMarket;
        uniswapMarket05 = get(configs, 5).uniswapMarket;
        uniswapMarket06 = get(configs, 6).uniswapMarket;
        uniswapMarket07 = get(configs, 7).uniswapMarket;
        uniswapMarket08 = get(configs, 8).uniswapMarket;
        uniswapMarket09 = get(configs, 9).uniswapMarket;
        uniswapMarket10 = get(configs, 10).uniswapMarket;
        uniswapMarket11 = get(configs, 11).uniswapMarket;
        uniswapMarket12 = get(configs, 12).uniswapMarket;
        uniswapMarket13 = get(configs, 13).uniswapMarket;
        uniswapMarket14 = get(configs, 14).uniswapMarket;
        uniswapMarket15 = get(configs, 15).uniswapMarket;
        uniswapMarket16 = get(configs, 16).uniswapMarket;
        uniswapMarket17 = get(configs, 17).uniswapMarket;
        uniswapMarket18 = get(configs, 18).uniswapMarket;
        uniswapMarket19 = get(configs, 19).uniswapMarket;
        uniswapMarket20 = get(configs, 20).uniswapMarket;
        uniswapMarket21 = get(configs, 21).uniswapMarket;
        uniswapMarket22 = get(configs, 22).uniswapMarket;
        uniswapMarket23 = get(configs, 23).uniswapMarket;
        uniswapMarket24 = get(configs, 24).uniswapMarket;

        reporter00 = get(configs, 0).reporter;
        reporter01 = get(configs, 1).reporter;
        reporter02 = get(configs, 2).reporter;
        reporter03 = get(configs, 3).reporter;
        reporter04 = get(configs, 4).reporter;
        reporter05 = get(configs, 5).reporter;
        reporter06 = get(configs, 6).reporter;
        reporter07 = get(configs, 7).reporter;
        reporter08 = get(configs, 8).reporter;
        reporter09 = get(configs, 9).reporter;
        reporter10 = get(configs, 10).reporter;
        reporter11 = get(configs, 11).reporter;
        reporter12 = get(configs, 12).reporter;
        reporter13 = get(configs, 13).reporter;
        reporter14 = get(configs, 14).reporter;
        reporter15 = get(configs, 15).reporter;
        reporter16 = get(configs, 16).reporter;
        reporter17 = get(configs, 17).reporter;
        reporter18 = get(configs, 18).reporter;
        reporter19 = get(configs, 19).reporter;
        reporter20 = get(configs, 20).reporter;
        reporter21 = get(configs, 21).reporter;
        reporter22 = get(configs, 22).reporter;
        reporter23 = get(configs, 23).reporter;
        reporter24 = get(configs, 24).reporter;

        reporterMultiplier00 = get(configs, 0).reporterMultiplier;
        reporterMultiplier01 = get(configs, 1).reporterMultiplier;
        reporterMultiplier02 = get(configs, 2).reporterMultiplier;
        reporterMultiplier03 = get(configs, 3).reporterMultiplier;
        reporterMultiplier04 = get(configs, 4).reporterMultiplier;
        reporterMultiplier05 = get(configs, 5).reporterMultiplier;
        reporterMultiplier06 = get(configs, 6).reporterMultiplier;
        reporterMultiplier07 = get(configs, 7).reporterMultiplier;
        reporterMultiplier08 = get(configs, 8).reporterMultiplier;
        reporterMultiplier09 = get(configs, 9).reporterMultiplier;
        reporterMultiplier10 = get(configs, 10).reporterMultiplier;
        reporterMultiplier11 = get(configs, 11).reporterMultiplier;
        reporterMultiplier12 = get(configs, 12).reporterMultiplier;
        reporterMultiplier13 = get(configs, 13).reporterMultiplier;
        reporterMultiplier14 = get(configs, 14).reporterMultiplier;
        reporterMultiplier15 = get(configs, 15).reporterMultiplier;
        reporterMultiplier16 = get(configs, 16).reporterMultiplier;
        reporterMultiplier17 = get(configs, 17).reporterMultiplier;
        reporterMultiplier18 = get(configs, 18).reporterMultiplier;
        reporterMultiplier19 = get(configs, 19).reporterMultiplier;
        reporterMultiplier20 = get(configs, 20).reporterMultiplier;
        reporterMultiplier21 = get(configs, 21).reporterMultiplier;
        reporterMultiplier22 = get(configs, 22).reporterMultiplier;
        reporterMultiplier23 = get(configs, 23).reporterMultiplier;
        reporterMultiplier24 = get(configs, 24).reporterMultiplier;

        isUniswapReversed00 = get(configs, 0).isUniswapReversed;
        isUniswapReversed01 = get(configs, 1).isUniswapReversed;
        isUniswapReversed02 = get(configs, 2).isUniswapReversed;
        isUniswapReversed03 = get(configs, 3).isUniswapReversed;
        isUniswapReversed04 = get(configs, 4).isUniswapReversed;
        isUniswapReversed05 = get(configs, 5).isUniswapReversed;
        isUniswapReversed06 = get(configs, 6).isUniswapReversed;
        isUniswapReversed07 = get(configs, 7).isUniswapReversed;
        isUniswapReversed08 = get(configs, 8).isUniswapReversed;
        isUniswapReversed09 = get(configs, 9).isUniswapReversed;
        isUniswapReversed10 = get(configs, 10).isUniswapReversed;
        isUniswapReversed11 = get(configs, 11).isUniswapReversed;
        isUniswapReversed12 = get(configs, 12).isUniswapReversed;
        isUniswapReversed13 = get(configs, 13).isUniswapReversed;
        isUniswapReversed14 = get(configs, 14).isUniswapReversed;
        isUniswapReversed15 = get(configs, 15).isUniswapReversed;
        isUniswapReversed16 = get(configs, 16).isUniswapReversed;
        isUniswapReversed17 = get(configs, 17).isUniswapReversed;
        isUniswapReversed18 = get(configs, 18).isUniswapReversed;
        isUniswapReversed19 = get(configs, 19).isUniswapReversed;
        isUniswapReversed20 = get(configs, 20).isUniswapReversed;
        isUniswapReversed21 = get(configs, 21).isUniswapReversed;
        isUniswapReversed22 = get(configs, 22).isUniswapReversed;
        isUniswapReversed23 = get(configs, 23).isUniswapReversed;
        isUniswapReversed24 = get(configs, 24).isUniswapReversed;
    }

    function get(TokenConfig[] memory configs, uint i) internal pure returns (TokenConfig memory) {
        if (i < configs.length)
            return configs[i];
        return TokenConfig({
            cToken: address(0),
            underlying: address(0),
            symbolHash: bytes32(0),
            baseUnit: uint256(0),
            priceSource: PriceSource(0),
            fixedPrice: uint256(0),
            uniswapMarket: address(0),
            reporter: address(0),
            reporterMultiplier: uint256(0),
            isUniswapReversed: false
        });
    }

    function getReporterIndex(address reporter) internal view returns(uint) {
        if (reporter == reporter00) return 0;
        if (reporter == reporter01) return 1;
        if (reporter == reporter02) return 2;
        if (reporter == reporter03) return 3;
        if (reporter == reporter04) return 4;
        if (reporter == reporter05) return 5;
        if (reporter == reporter06) return 6;
        if (reporter == reporter07) return 7;
        if (reporter == reporter08) return 8;
        if (reporter == reporter09) return 9;
        if (reporter == reporter10) return 10;
        if (reporter == reporter11) return 11;
        if (reporter == reporter12) return 12;
        if (reporter == reporter13) return 13;
        if (reporter == reporter14) return 14;
        if (reporter == reporter15) return 15;
        if (reporter == reporter16) return 16;
        if (reporter == reporter17) return 17;
        if (reporter == reporter18) return 18;
        if (reporter == reporter19) return 19;
        if (reporter == reporter20) return 20;
        if (reporter == reporter21) return 21;
        if (reporter == reporter22) return 22;
        if (reporter == reporter23) return 23;
        if (reporter == reporter24) return 24;

        return type(uint).max;
    }

    function getCTokenIndex(address cToken) internal view returns (uint) {
        if (cToken == cToken00) return 0;
        if (cToken == cToken01) return 1;
        if (cToken == cToken02) return 2;
        if (cToken == cToken03) return 3;
        if (cToken == cToken04) return 4;
        if (cToken == cToken05) return 5;
        if (cToken == cToken06) return 6;
        if (cToken == cToken07) return 7;
        if (cToken == cToken08) return 8;
        if (cToken == cToken09) return 9;
        if (cToken == cToken10) return 10;
        if (cToken == cToken11) return 11;
        if (cToken == cToken12) return 12;
        if (cToken == cToken13) return 13;
        if (cToken == cToken14) return 14;
        if (cToken == cToken15) return 15;
        if (cToken == cToken16) return 16;
        if (cToken == cToken17) return 17;
        if (cToken == cToken18) return 18;
        if (cToken == cToken19) return 19;
        if (cToken == cToken20) return 20;
        if (cToken == cToken21) return 21;
        if (cToken == cToken22) return 22;
        if (cToken == cToken23) return 23;
        if (cToken == cToken24) return 24;

        return uint(-1);
    }

    function getUnderlyingIndex(address underlying) internal view returns (uint) {
        if (underlying == underlying00) return 0;
        if (underlying == underlying01) return 1;
        if (underlying == underlying02) return 2;
        if (underlying == underlying03) return 3;
        if (underlying == underlying04) return 4;
        if (underlying == underlying05) return 5;
        if (underlying == underlying06) return 6;
        if (underlying == underlying07) return 7;
        if (underlying == underlying08) return 8;
        if (underlying == underlying09) return 9;
        if (underlying == underlying10) return 10;
        if (underlying == underlying11) return 11;
        if (underlying == underlying12) return 12;
        if (underlying == underlying13) return 13;
        if (underlying == underlying14) return 14;
        if (underlying == underlying15) return 15;
        if (underlying == underlying16) return 16;
        if (underlying == underlying17) return 17;
        if (underlying == underlying18) return 18;
        if (underlying == underlying19) return 19;
        if (underlying == underlying20) return 20;
        if (underlying == underlying21) return 21;
        if (underlying == underlying22) return 22;
        if (underlying == underlying23) return 23;
        if (underlying == underlying24) return 24;

        return uint(-1);
    }

    function getSymbolHashIndex(bytes32 symbolHash) internal view returns (uint) {
        if (symbolHash == symbolHash00) return 0;
        if (symbolHash == symbolHash01) return 1;
        if (symbolHash == symbolHash02) return 2;
        if (symbolHash == symbolHash03) return 3;
        if (symbolHash == symbolHash04) return 4;
        if (symbolHash == symbolHash05) return 5;
        if (symbolHash == symbolHash06) return 6;
        if (symbolHash == symbolHash07) return 7;
        if (symbolHash == symbolHash08) return 8;
        if (symbolHash == symbolHash09) return 9;
        if (symbolHash == symbolHash10) return 10;
        if (symbolHash == symbolHash11) return 11;
        if (symbolHash == symbolHash12) return 12;
        if (symbolHash == symbolHash13) return 13;
        if (symbolHash == symbolHash14) return 14;
        if (symbolHash == symbolHash15) return 15;
        if (symbolHash == symbolHash16) return 16;
        if (symbolHash == symbolHash17) return 17;
        if (symbolHash == symbolHash18) return 18;
        if (symbolHash == symbolHash19) return 19;
        if (symbolHash == symbolHash20) return 20;
        if (symbolHash == symbolHash21) return 21;
        if (symbolHash == symbolHash22) return 22;
        if (symbolHash == symbolHash23) return 23;
        if (symbolHash == symbolHash24) return 24;

        return uint(-1);
    }

    /**
     * @notice Get the i-th config, according to the order they were passed in originally
     * @param i The index of the config to get
     * @return The config object
     */
    function getTokenConfig(uint i) public view returns (TokenConfig memory) {
        require(i < numTokens, "token config not found");

        if (i == 0) return TokenConfig({cToken: cToken00, underlying: underlying00, symbolHash: symbolHash00, baseUnit: baseUnit00, priceSource: priceSource00, fixedPrice: fixedPrice00, uniswapMarket: uniswapMarket00, reporter: reporter00, reporterMultiplier: reporterMultiplier00, isUniswapReversed: isUniswapReversed00});
        if (i == 1) return TokenConfig({cToken: cToken01, underlying: underlying01, symbolHash: symbolHash01, baseUnit: baseUnit01, priceSource: priceSource01, fixedPrice: fixedPrice01, uniswapMarket: uniswapMarket01, reporter: reporter01, reporterMultiplier: reporterMultiplier01, isUniswapReversed: isUniswapReversed01});
        if (i == 2) return TokenConfig({cToken: cToken02, underlying: underlying02, symbolHash: symbolHash02, baseUnit: baseUnit02, priceSource: priceSource02, fixedPrice: fixedPrice02, uniswapMarket: uniswapMarket02, reporter: reporter02, reporterMultiplier: reporterMultiplier02, isUniswapReversed: isUniswapReversed02});
        if (i == 3) return TokenConfig({cToken: cToken03, underlying: underlying03, symbolHash: symbolHash03, baseUnit: baseUnit03, priceSource: priceSource03, fixedPrice: fixedPrice03, uniswapMarket: uniswapMarket03, reporter: reporter03, reporterMultiplier: reporterMultiplier03, isUniswapReversed: isUniswapReversed03});
        if (i == 4) return TokenConfig({cToken: cToken04, underlying: underlying04, symbolHash: symbolHash04, baseUnit: baseUnit04, priceSource: priceSource04, fixedPrice: fixedPrice04, uniswapMarket: uniswapMarket04, reporter: reporter04, reporterMultiplier: reporterMultiplier04, isUniswapReversed: isUniswapReversed04});
        if (i == 5) return TokenConfig({cToken: cToken05, underlying: underlying05, symbolHash: symbolHash05, baseUnit: baseUnit05, priceSource: priceSource05, fixedPrice: fixedPrice05, uniswapMarket: uniswapMarket05, reporter: reporter05, reporterMultiplier: reporterMultiplier05, isUniswapReversed: isUniswapReversed05});
        if (i == 6) return TokenConfig({cToken: cToken06, underlying: underlying06, symbolHash: symbolHash06, baseUnit: baseUnit06, priceSource: priceSource06, fixedPrice: fixedPrice06, uniswapMarket: uniswapMarket06, reporter: reporter06, reporterMultiplier: reporterMultiplier06, isUniswapReversed: isUniswapReversed06});
        if (i == 7) return TokenConfig({cToken: cToken07, underlying: underlying07, symbolHash: symbolHash07, baseUnit: baseUnit07, priceSource: priceSource07, fixedPrice: fixedPrice07, uniswapMarket: uniswapMarket07, reporter: reporter07, reporterMultiplier: reporterMultiplier07, isUniswapReversed: isUniswapReversed07});
        if (i == 8) return TokenConfig({cToken: cToken08, underlying: underlying08, symbolHash: symbolHash08, baseUnit: baseUnit08, priceSource: priceSource08, fixedPrice: fixedPrice08, uniswapMarket: uniswapMarket08, reporter: reporter08, reporterMultiplier: reporterMultiplier08, isUniswapReversed: isUniswapReversed08});
        if (i == 9) return TokenConfig({cToken: cToken09, underlying: underlying09, symbolHash: symbolHash09, baseUnit: baseUnit09, priceSource: priceSource09, fixedPrice: fixedPrice09, uniswapMarket: uniswapMarket09, reporter: reporter09, reporterMultiplier: reporterMultiplier09, isUniswapReversed: isUniswapReversed09});

        if (i == 10) return TokenConfig({cToken: cToken10, underlying: underlying10, symbolHash: symbolHash10, baseUnit: baseUnit10, priceSource: priceSource10, fixedPrice: fixedPrice10, uniswapMarket: uniswapMarket10, reporter: reporter10, reporterMultiplier: reporterMultiplier10, isUniswapReversed: isUniswapReversed10});
        if (i == 11) return TokenConfig({cToken: cToken11, underlying: underlying11, symbolHash: symbolHash11, baseUnit: baseUnit11, priceSource: priceSource11, fixedPrice: fixedPrice11, uniswapMarket: uniswapMarket11, reporter: reporter11, reporterMultiplier: reporterMultiplier11, isUniswapReversed: isUniswapReversed11});
        if (i == 12) return TokenConfig({cToken: cToken12, underlying: underlying12, symbolHash: symbolHash12, baseUnit: baseUnit12, priceSource: priceSource12, fixedPrice: fixedPrice12, uniswapMarket: uniswapMarket12, reporter: reporter12, reporterMultiplier: reporterMultiplier12, isUniswapReversed: isUniswapReversed12});
        if (i == 13) return TokenConfig({cToken: cToken13, underlying: underlying13, symbolHash: symbolHash13, baseUnit: baseUnit13, priceSource: priceSource13, fixedPrice: fixedPrice13, uniswapMarket: uniswapMarket13, reporter: reporter13, reporterMultiplier: reporterMultiplier13, isUniswapReversed: isUniswapReversed13});
        if (i == 14) return TokenConfig({cToken: cToken14, underlying: underlying14, symbolHash: symbolHash14, baseUnit: baseUnit14, priceSource: priceSource14, fixedPrice: fixedPrice14, uniswapMarket: uniswapMarket14, reporter: reporter14, reporterMultiplier: reporterMultiplier14, isUniswapReversed: isUniswapReversed14});
        if (i == 15) return TokenConfig({cToken: cToken15, underlying: underlying15, symbolHash: symbolHash15, baseUnit: baseUnit15, priceSource: priceSource15, fixedPrice: fixedPrice15, uniswapMarket: uniswapMarket15, reporter: reporter15, reporterMultiplier: reporterMultiplier15, isUniswapReversed: isUniswapReversed15});
        if (i == 16) return TokenConfig({cToken: cToken16, underlying: underlying16, symbolHash: symbolHash16, baseUnit: baseUnit16, priceSource: priceSource16, fixedPrice: fixedPrice16, uniswapMarket: uniswapMarket16, reporter: reporter16, reporterMultiplier: reporterMultiplier16, isUniswapReversed: isUniswapReversed16});
        if (i == 17) return TokenConfig({cToken: cToken17, underlying: underlying17, symbolHash: symbolHash17, baseUnit: baseUnit17, priceSource: priceSource17, fixedPrice: fixedPrice17, uniswapMarket: uniswapMarket17, reporter: reporter17, reporterMultiplier: reporterMultiplier17, isUniswapReversed: isUniswapReversed17});
        if (i == 18) return TokenConfig({cToken: cToken18, underlying: underlying18, symbolHash: symbolHash18, baseUnit: baseUnit18, priceSource: priceSource18, fixedPrice: fixedPrice18, uniswapMarket: uniswapMarket18, reporter: reporter18, reporterMultiplier: reporterMultiplier18, isUniswapReversed: isUniswapReversed18});
        if (i == 19) return TokenConfig({cToken: cToken19, underlying: underlying19, symbolHash: symbolHash19, baseUnit: baseUnit19, priceSource: priceSource19, fixedPrice: fixedPrice19, uniswapMarket: uniswapMarket19, reporter: reporter19, reporterMultiplier: reporterMultiplier19, isUniswapReversed: isUniswapReversed19});

        if (i == 20) return TokenConfig({cToken: cToken20, underlying: underlying20, symbolHash: symbolHash20, baseUnit: baseUnit20, priceSource: priceSource20, fixedPrice: fixedPrice20, uniswapMarket: uniswapMarket20, reporter: reporter20, reporterMultiplier: reporterMultiplier20, isUniswapReversed: isUniswapReversed20});
        if (i == 21) return TokenConfig({cToken: cToken21, underlying: underlying21, symbolHash: symbolHash21, baseUnit: baseUnit21, priceSource: priceSource21, fixedPrice: fixedPrice21, uniswapMarket: uniswapMarket21, reporter: reporter21, reporterMultiplier: reporterMultiplier21, isUniswapReversed: isUniswapReversed21});
        if (i == 22) return TokenConfig({cToken: cToken22, underlying: underlying22, symbolHash: symbolHash22, baseUnit: baseUnit22, priceSource: priceSource22, fixedPrice: fixedPrice22, uniswapMarket: uniswapMarket22, reporter: reporter22, reporterMultiplier: reporterMultiplier22, isUniswapReversed: isUniswapReversed22});
        if (i == 23) return TokenConfig({cToken: cToken23, underlying: underlying23, symbolHash: symbolHash23, baseUnit: baseUnit23, priceSource: priceSource23, fixedPrice: fixedPrice23, uniswapMarket: uniswapMarket23, reporter: reporter23, reporterMultiplier: reporterMultiplier23, isUniswapReversed: isUniswapReversed23});
        if (i == 24) return TokenConfig({cToken: cToken24, underlying: underlying24, symbolHash: symbolHash24, baseUnit: baseUnit24, priceSource: priceSource24, fixedPrice: fixedPrice24, uniswapMarket: uniswapMarket24, reporter: reporter24, reporterMultiplier: reporterMultiplier24, isUniswapReversed: isUniswapReversed24});
    }

    /**
     * @notice Get the config for symbol
     * @param symbol The symbol of the config to get
     * @return The config object
     */
    function getTokenConfigBySymbol(string memory symbol) public view returns (TokenConfig memory) {
        return getTokenConfigBySymbolHash(keccak256(abi.encodePacked(symbol)));
    }

    /**
     * @notice Get the config for the reporter
     * @param reporter The address of the reporter of the config to get
     * @return The config object
     */
    function getTokenConfigByReporter(address reporter) public view returns (TokenConfig memory) {
        uint index = getReporterIndex(reporter);
        if (index != uint(-1)) {
            return getTokenConfig(index);
        }

        revert("token config not found");
    }

    /**
     * @notice Get the config for the symbolHash
     * @param symbolHash The keccack256 of the symbol of the config to get
     * @return The config object
     */
    function getTokenConfigBySymbolHash(bytes32 symbolHash) public view returns (TokenConfig memory) {
        uint index = getSymbolHashIndex(symbolHash);
        if (index != uint(-1)) {
            return getTokenConfig(index);
        }

        revert("token config not found");
    }

    /**
     * @notice Get the config for the cToken
     * @dev If a config for the cToken is not found, falls back to searching for the underlying.
     * @param cToken The address of the cToken of the config to get
     * @return The config object
     */
    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {
        uint index = getCTokenIndex(cToken);
        if (index != uint(-1)) {
            return getTokenConfig(index);
        }

        return getTokenConfigByUnderlying(CErc20(cToken).underlying());
    }

    /**
     * @notice Get the config for an underlying asset
     * @param underlying The address of the underlying asset of the config to get
     * @return The config object
     */
    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {
        uint index = getUnderlyingIndex(underlying);
        if (index != uint(-1)) {
            return getTokenConfig(index);
        }

        revert("token config not found");
    }
}

File 4 of 5 : UniswapLib.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.6.12;

// Based on code from https://github.com/Uniswap/uniswap-v2-periphery

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))
library FixedPoint {
    // range: [0, 2**112 - 1]
    // resolution: 1 / 2**112
    struct uq112x112 {
        uint224 _x;
    }

    // returns a uq112x112 which represents the ratio of the numerator to the denominator
    // equivalent to encode(numerator).div(denominator)
    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {
        require(denominator > 0, "FixedPoint: DIV_BY_ZERO");
        return uq112x112((uint224(numerator) << 112) / denominator);
    }

    // decode a uq112x112 into a uint with 18 decimals of precision
    function decode112with18(uq112x112 memory self) internal pure returns (uint) {
        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous
        // instead, get close to:
        //  (x * 1e18) >> 112
        // without risk of overflowing, e.g.:
        //  (x) / 2 ** (112 - lg(1e18))
        return uint(self._x) / 5192296858534827;
    }
}

// library with helper methods for oracles that are concerned with computing average prices
library UniswapV2OracleLibrary {
    using FixedPoint for *;

    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]
    function currentBlockTimestamp() internal view returns (uint32) {
        return uint32(block.timestamp % 2 ** 32);
    }

    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.
    function currentCumulativePrices(
        address pair
    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {
        blockTimestamp = currentBlockTimestamp();
        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();
        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();

        // if time has elapsed since the last update on the pair, mock the accumulated price values
        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();
        if (blockTimestampLast != blockTimestamp) {
            // subtraction overflow is desired
            uint32 timeElapsed = blockTimestamp - blockTimestampLast;
            // addition overflow is desired
            // counterfactual
            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;
            // counterfactual
            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;
        }
    }
}

interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
}

File 5 of 5 : Ownable.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.12;

/**
 * @notice A contract with helpers for safe contract ownership.
 */
contract Ownable {

    address private ownerAddr;
    address private pendingOwnerAddr;

    event OwnershipTransferRequested(address indexed from, address indexed to);
    event OwnershipTransferred(address indexed from, address indexed to);

    constructor() public {
        ownerAddr = msg.sender;
    }

    /**
    * @notice Allows an owner to begin transferring ownership to a new address,
    * pending.
    */
    function transferOwnership(address to) external onlyOwner() {
        require(to != msg.sender, "Cannot transfer to self");

        pendingOwnerAddr = to;

        emit OwnershipTransferRequested(ownerAddr, to);
    }

    /**
    * @notice Allows an ownership transfer to be completed by the recipient.
    */
    function acceptOwnership() external {
        require(msg.sender == pendingOwnerAddr, "Must be proposed owner");

        address oldOwner = ownerAddr;
        ownerAddr = msg.sender;
        pendingOwnerAddr = address(0);

        emit OwnershipTransferred(oldOwner, msg.sender);
    }

    /**
    * @notice Get the current owner
    */
    function owner() public view returns (address) {
        return ownerAddr;
    }

    /**
    * @notice Reverts if called by anyone other than the contract owner.
    */
    modifier onlyOwner() {
        require(msg.sender == ownerAddr, "Only callable by owner");
        _;
    }

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 201
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"anchorToleranceMantissa_","type":"uint256"},{"internalType":"uint256","name":"anchorPeriod_","type":"uint256"},{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig[]","name":"configs","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"anchorPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"AnchorPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"FailoverActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"FailoverDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"reporter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"anchor","type":"uint256"}],"name":"PriceGuarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UniswapWindowUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"activateFailover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"anchorPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"deactivateFailover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethBaseUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expScale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getTokenConfig","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getTokenConfigByCToken","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reporter","type":"address"}],"name":"getTokenConfigByReporter","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"getTokenConfigBySymbol","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"getTokenConfigBySymbolHash","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"underlying","type":"address"}],"name":"getTokenConfigByUnderlying","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerBoundAnchorRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"newObservations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"acc","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"oldObservations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"acc","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"pokeFailedOverPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"prices","outputs":[{"internalType":"uint248","name":"price","type":"uint248"},{"internalType":"bool","name":"failoverActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperBoundAnchorRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"int256","name":"currentAnswer","type":"int256"}],"name":"validate","outputs":[{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6120406040523480156200001257600080fd5b5060405162009434380380620094348339810160408190526200003591620024ad565b80601981511115620000645760405162461bcd60e51b81526004016200005b9062002603565b60405180910390fd5b80516080526200007681600062001f84565b5160601b6001600160601b03191660a0526200009481600162001f84565b5160601b6001600160601b03191660c052620000b281600262001f84565b5160601b6001600160601b03191660e052620000d081600362001f84565b5160601b6001600160601b03191661010052620000ef81600462001f84565b5160601b6001600160601b031916610120526200010e81600562001f84565b5160601b6001600160601b031916610140526200012d81600662001f84565b5160601b6001600160601b031916610160526200014c81600762001f84565b5160601b6001600160601b031916610180526200016b81600862001f84565b5160601b6001600160601b0319166101a0526200018a81600962001f84565b5160601b6001600160601b0319166101c052620001a981600a62001f84565b5160601b6001600160601b0319166101e052620001c881600b62001f84565b5160601b6001600160601b03191661020052620001e781600c62001f84565b5160601b6001600160601b031916610220526200020681600d62001f84565b5160601b6001600160601b031916610240526200022581600e62001f84565b5160601b6001600160601b031916610260526200024481600f62001f84565b5160601b6001600160601b031916610280526200026381601062001f84565b5160601b6001600160601b0319166102a0526200028281601162001f84565b5160601b6001600160601b0319166102c052620002a181601262001f84565b5160601b6001600160601b0319166102e052620002c081601362001f84565b5160601b6001600160601b03191661030052620002df81601462001f84565b5160601b6001600160601b03191661032052620002fe81601562001f84565b5160601b6001600160601b031916610340526200031d81601662001f84565b5160601b6001600160601b031916610360526200033c81601762001f84565b5160601b6001600160601b031916610380526200035b81601862001f84565b5160601b6001600160601b0319166103a0526200037a81600062001f84565b6020015160601b6001600160601b0319166103c0526200039c81600162001f84565b6020015160601b6001600160601b0319166103e052620003be81600262001f84565b6020015160601b6001600160601b03191661040052620003e081600362001f84565b6020015160601b6001600160601b031916610420526200040281600462001f84565b6020015160601b6001600160601b031916610440526200042481600562001f84565b6020015160601b6001600160601b031916610460526200044681600662001f84565b6020015160601b6001600160601b031916610480526200046881600762001f84565b6020015160601b6001600160601b0319166104a0526200048a81600862001f84565b6020015160601b6001600160601b0319166104c052620004ac81600962001f84565b6020015160601b6001600160601b0319166104e052620004ce81600a62001f84565b6020015160601b6001600160601b03191661050052620004f081600b62001f84565b6020015160601b6001600160601b031916610520526200051281600c62001f84565b6020015160601b6001600160601b031916610540526200053481600d62001f84565b6020015160601b6001600160601b031916610560526200055681600e62001f84565b6020015160601b6001600160601b031916610580526200057881600f62001f84565b6020015160601b6001600160601b0319166105a0526200059a81601062001f84565b6020015160601b6001600160601b0319166105c052620005bc81601162001f84565b6020015160601b6001600160601b0319166105e052620005de81601262001f84565b6020015160601b6001600160601b031916610600526200060081601362001f84565b6020015160601b6001600160601b031916610620526200062281601462001f84565b6020015160601b6001600160601b031916610640526200064481601562001f84565b6020015160601b6001600160601b031916610660526200066681601662001f84565b6020015160601b6001600160601b031916610680526200068881601762001f84565b6020015160601b6001600160601b0319166106a052620006aa81601862001f84565b6020015160601b6001600160601b0319166106c052620006cc81600062001f84565b604001516106e052620006e181600162001f84565b6040015161070052620006f681600262001f84565b60400151610720526200070b81600362001f84565b60400151610740526200072081600462001f84565b60400151610760526200073581600562001f84565b60400151610780526200074a81600662001f84565b604001516107a0526200075f81600762001f84565b604001516107c0526200077481600862001f84565b604001516107e0526200078981600962001f84565b60400151610800526200079e81600a62001f84565b6040015161082052620007b381600b62001f84565b6040015161084052620007c881600c62001f84565b6040015161086052620007dd81600d62001f84565b6040015161088052620007f281600e62001f84565b604001516108a0526200080781600f62001f84565b604001516108c0526200081c81601062001f84565b604001516108e0526200083181601162001f84565b60400151610900526200084681601262001f84565b60400151610920526200085b81601362001f84565b60400151610940526200087081601462001f84565b60400151610960526200088581601562001f84565b60400151610980526200089a81601662001f84565b604001516109a052620008af81601762001f84565b604001516109c052620008c481601862001f84565b604001516109e052620008d981600062001f84565b60600151610a0052620008ee81600162001f84565b60600151610a20526200090381600262001f84565b60600151610a40526200091881600362001f84565b60600151610a60526200092d81600462001f84565b60600151610a80526200094281600562001f84565b60600151610aa0526200095781600662001f84565b60600151610ac0526200096c81600762001f84565b60600151610ae0526200098181600862001f84565b60600151610b00526200099681600962001f84565b60600151610b2052620009ab81600a62001f84565b60600151610b4052620009c081600b62001f84565b60600151610b6052620009d581600c62001f84565b60600151610b8052620009ea81600d62001f84565b60600151610ba052620009ff81600e62001f84565b60600151610bc05262000a1481600f62001f84565b60600151610be05262000a2981601062001f84565b60600151610c005262000a3e81601162001f84565b60600151610c205262000a5381601262001f84565b60600151610c405262000a6881601362001f84565b60600151610c605262000a7d81601462001f84565b60600151610c805262000a9281601562001f84565b60600151610ca05262000aa781601662001f84565b60600151610cc05262000abc81601762001f84565b60600151610ce05262000ad181601862001f84565b60600151610d005262000ae681600062001f84565b60800151600281111562000af657fe5b610d2081600281111562000b0657fe5b60f81b90525062000b1981600162001f84565b60800151600281111562000b2957fe5b610d4081600281111562000b3957fe5b60f81b90525062000b4c81600262001f84565b60800151600281111562000b5c57fe5b610d6081600281111562000b6c57fe5b60f81b90525062000b7f81600362001f84565b60800151600281111562000b8f57fe5b610d8081600281111562000b9f57fe5b60f81b90525062000bb281600462001f84565b60800151600281111562000bc257fe5b610da081600281111562000bd257fe5b60f81b90525062000be581600562001f84565b60800151600281111562000bf557fe5b610dc081600281111562000c0557fe5b60f81b90525062000c1881600662001f84565b60800151600281111562000c2857fe5b610de081600281111562000c3857fe5b60f81b90525062000c4b81600762001f84565b60800151600281111562000c5b57fe5b610e0081600281111562000c6b57fe5b60f81b90525062000c7e81600862001f84565b60800151600281111562000c8e57fe5b610e2081600281111562000c9e57fe5b60f81b90525062000cb181600962001f84565b60800151600281111562000cc157fe5b610e4081600281111562000cd157fe5b60f81b90525062000ce481600a62001f84565b60800151600281111562000cf457fe5b610e6081600281111562000d0457fe5b60f81b90525062000d1781600b62001f84565b60800151600281111562000d2757fe5b610e8081600281111562000d3757fe5b60f81b90525062000d4a81600c62001f84565b60800151600281111562000d5a57fe5b610ea081600281111562000d6a57fe5b60f81b90525062000d7d81600d62001f84565b60800151600281111562000d8d57fe5b610ec081600281111562000d9d57fe5b60f81b90525062000db081600e62001f84565b60800151600281111562000dc057fe5b610ee081600281111562000dd057fe5b60f81b90525062000de381600f62001f84565b60800151600281111562000df357fe5b610f0081600281111562000e0357fe5b60f81b90525062000e1681601062001f84565b60800151600281111562000e2657fe5b610f2081600281111562000e3657fe5b60f81b90525062000e4981601162001f84565b60800151600281111562000e5957fe5b610f4081600281111562000e6957fe5b60f81b90525062000e7c81601262001f84565b60800151600281111562000e8c57fe5b610f6081600281111562000e9c57fe5b60f81b90525062000eaf81601362001f84565b60800151600281111562000ebf57fe5b610f8081600281111562000ecf57fe5b60f81b90525062000ee281601462001f84565b60800151600281111562000ef257fe5b610fa081600281111562000f0257fe5b60f81b90525062000f1581601562001f84565b60800151600281111562000f2557fe5b610fc081600281111562000f3557fe5b60f81b90525062000f4881601662001f84565b60800151600281111562000f5857fe5b610fe081600281111562000f6857fe5b60f81b90525062000f7b81601762001f84565b60800151600281111562000f8b57fe5b61100081600281111562000f9b57fe5b60f81b90525062000fae81601862001f84565b60800151600281111562000fbe57fe5b61102081600281111562000fce57fe5b60f81b90525062000fe181600062001f84565b60a001516110405262000ff681600162001f84565b60a00151611060526200100b81600262001f84565b60a00151611080526200102081600362001f84565b60a001516110a0526200103581600462001f84565b60a001516110c0526200104a81600562001f84565b60a001516110e0526200105f81600662001f84565b60a00151611100526200107481600762001f84565b60a00151611120526200108981600862001f84565b60a00151611140526200109e81600962001f84565b60a0015161116052620010b381600a62001f84565b60a0015161118052620010c881600b62001f84565b60a001516111a052620010dd81600c62001f84565b60a001516111c052620010f281600d62001f84565b60a001516111e0526200110781600e62001f84565b60a00151611200526200111c81600f62001f84565b60a00151611220526200113181601062001f84565b60a00151611240526200114681601162001f84565b60a00151611260526200115b81601262001f84565b60a00151611280526200117081601362001f84565b60a001516112a0526200118581601462001f84565b60a001516112c0526200119a81601562001f84565b60a001516112e052620011af81601662001f84565b60a0015161130052620011c481601762001f84565b60a0015161132052620011d981601862001f84565b60a0015161134052620011ee81600062001f84565b60c0015160601b6001600160601b031916611360526200121081600162001f84565b60c0015160601b6001600160601b031916611380526200123281600262001f84565b60c0015160601b6001600160601b0319166113a0526200125481600362001f84565b60c0015160601b6001600160601b0319166113c0526200127681600462001f84565b60c0015160601b6001600160601b0319166113e0526200129881600562001f84565b60c0015160601b6001600160601b03191661140052620012ba81600662001f84565b60c0015160601b6001600160601b03191661142052620012dc81600762001f84565b60c0015160601b6001600160601b03191661144052620012fe81600862001f84565b60c0015160601b6001600160601b031916611460526200132081600962001f84565b60c0015160601b6001600160601b031916611480526200134281600a62001f84565b60c0015160601b6001600160601b0319166114a0526200136481600b62001f84565b60c0015160601b6001600160601b0319166114c0526200138681600c62001f84565b60c0015160601b6001600160601b0319166114e052620013a881600d62001f84565b60c0015160601b6001600160601b03191661150052620013ca81600e62001f84565b60c0015160601b6001600160601b03191661152052620013ec81600f62001f84565b60c0015160601b6001600160601b031916611540526200140e81601062001f84565b60c0015160601b6001600160601b031916611560526200143081601162001f84565b60c0015160601b6001600160601b031916611580526200145281601262001f84565b60c0015160601b6001600160601b0319166115a0526200147481601362001f84565b60c0015160601b6001600160601b0319166115c0526200149681601462001f84565b60c0015160601b6001600160601b0319166115e052620014b881601562001f84565b60c0015160601b6001600160601b03191661160052620014da81601662001f84565b60c0015160601b6001600160601b03191661162052620014fc81601762001f84565b60c0015160601b6001600160601b031916611640526200151e81601862001f84565b60c0015160601b6001600160601b031916611660526200154081600062001f84565b60e0015160601b6001600160601b031916611680526200156281600162001f84565b60e0015160601b6001600160601b0319166116a0526200158481600262001f84565b60e0015160601b6001600160601b0319166116c052620015a681600362001f84565b60e0015160601b6001600160601b0319166116e052620015c881600462001f84565b60e0015160601b6001600160601b03191661170052620015ea81600562001f84565b60e0015160601b6001600160601b031916611720526200160c81600662001f84565b60e0015160601b6001600160601b031916611740526200162e81600762001f84565b60e0015160601b6001600160601b031916611760526200165081600862001f84565b60e0015160601b6001600160601b031916611780526200167281600962001f84565b60e0015160601b6001600160601b0319166117a0526200169481600a62001f84565b60e0015160601b6001600160601b0319166117c052620016b681600b62001f84565b60e0015160601b6001600160601b0319166117e052620016d881600c62001f84565b60e0015160601b6001600160601b03191661180052620016fa81600d62001f84565b60e0015160601b6001600160601b031916611820526200171c81600e62001f84565b60e0015160601b6001600160601b031916611840526200173e81600f62001f84565b60e0015160601b6001600160601b031916611860526200176081601062001f84565b60e0015160601b6001600160601b031916611880526200178281601162001f84565b60e0015160601b6001600160601b0319166118a052620017a481601262001f84565b60e0015160601b6001600160601b0319166118c052620017c681601362001f84565b60e0015160601b6001600160601b0319166118e052620017e881601462001f84565b60e0015160601b6001600160601b031916611900526200180a81601562001f84565b60e0015160601b6001600160601b031916611920526200182c81601662001f84565b60e0015160601b6001600160601b031916611940526200184e81601762001f84565b60e0015160601b6001600160601b031916611960526200187081601862001f84565b60e0015160601b6001600160601b031916611980526200189281600062001f84565b61010001516119a052620018a881600162001f84565b61010001516119c052620018be81600262001f84565b61010001516119e052620018d481600362001f84565b6101000151611a0052620018ea81600462001f84565b6101000151611a20526200190081600562001f84565b6101000151611a40526200191681600662001f84565b6101000151611a60526200192c81600762001f84565b6101000151611a80526200194281600862001f84565b6101000151611aa0526200195881600962001f84565b6101000151611ac0526200196e81600a62001f84565b6101000151611ae0526200198481600b62001f84565b6101000151611b00526200199a81600c62001f84565b6101000151611b2052620019b081600d62001f84565b6101000151611b4052620019c681600e62001f84565b6101000151611b6052620019dc81600f62001f84565b6101000151611b8052620019f281601062001f84565b6101000151611ba05262001a0881601162001f84565b6101000151611bc05262001a1e81601262001f84565b6101000151611be05262001a3481601362001f84565b6101000151611c005262001a4a81601462001f84565b6101000151611c205262001a6081601562001f84565b6101000151611c405262001a7681601662001f84565b6101000151611c605262001a8c81601762001f84565b6101000151611c805262001aa281601862001f84565b6101000151611ca05262001ab881600062001f84565b6101200151151560f81b611cc05262001ad381600162001f84565b6101200151151560f81b611ce05262001aee81600262001f84565b6101200151151560f81b611d005262001b0981600362001f84565b6101200151151560f81b611d205262001b2481600462001f84565b6101200151151560f81b611d405262001b3f81600562001f84565b6101200151151560f81b611d605262001b5a81600662001f84565b6101200151151560f81b611d805262001b7581600762001f84565b6101200151151560f81b611da05262001b9081600862001f84565b6101200151151560f81b611dc05262001bab81600962001f84565b6101200151151560f81b611de05262001bc681600a62001f84565b6101200151151560f81b611e005262001be181600b62001f84565b6101200151151560f81b611e205262001bfc81600c62001f84565b6101200151151560f81b611e405262001c1781600d62001f84565b6101200151151560f81b611e605262001c3281600e62001f84565b6101200151151560f81b611e805262001c4d81600f62001f84565b6101200151151560f81b611ea05262001c6881601062001f84565b6101200151151560f81b611ec05262001c8381601162001f84565b6101200151151560f81b611ee05262001c9e81601262001f84565b6101200151151560f81b611f005262001cb981601362001f84565b6101200151151560f81b611f205262001cd481601462001f84565b6101200151151560f81b611f405262001cef81601562001f84565b6101200151151560f81b611f605262001d0a81601662001f84565b6101200151151560f81b611f805262001d2581601762001f84565b6101200151151560f81b611fa05262001d4081601862001f84565b6101200151151560f81b611fc05250600080546001600160a01b03191633179055612020829052670de0b6b3a764000019831162001d895782670de0b6b3a76400000162001d8d565b6000195b611fe052670de0b6b3a7640000831062001da957600162001db5565b82670de0b6b3a7640000035b6120005260005b815181101562001f7a5762001dd0620022d8565b82828151811062001ddd57fe5b60200260200101519050600081606001511162001e0e5760405162461bcd60e51b81526004016200005b906200257e565b60c081015160028260800151600281111562001e2657fe5b141562001f45576001600160a01b03811662001e565760405162461bcd60e51b81526004016200005b90620025c0565b60e08201516001600160a01b031662001e835760405162461bcd60e51b81526004016200005b90620026aa565b6040808301516000818152600260205291822080547fff000000000000000000000000000000000000000000000000000000000000001660011790559062001ecb846200200e565b600083815260036020908152604080832042808255600490935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9162001f3591819086908190620026ed565b60405180910390a2505062001f6f565b6001600160a01b0381161562001f6f5760405162461bcd60e51b81526004016200005b9062002664565b505060010162001dbc565b5050505062002748565b62001f8e620022d8565b825182101562001fb55782828151811062001fa557fe5b6020026020010151905062002008565b506040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091525b92915050565b60008060006200202d8460c001516200205160201b6200383b1760201c565b509150915083610120015115620020485791506200204c9050565b5090505b919050565b600080806200205f62002254565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156200209b57600080fd5b505afa158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062002494565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156200211257600080fd5b505afa15801562002127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200214d919062002494565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156200218e57600080fd5b505afa158015620021a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c991906200243a565b9250925092508363ffffffff168163ffffffff16146200224a57600081850390508063ffffffff166200220884866200225e60201b62003a101760201c565b600001516001600160e01b031602870196508063ffffffff166200223885856200225e60201b62003a101760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b620022686200232b565b6000826001600160701b031611620022945760405162461bcd60e51b81526004016200005b906200262d565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681620022c357fe5b046001600160e01b0316815250905092915050565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60408051602081019091526000815290565b80516001600160a01b03811681146200200857600080fd5b805180151581146200200857600080fd5b8051600381106200200857600080fd5b60006101408083850312156200238a578182fd5b620023958162002708565b915050620023a483836200233d565b8152620023b583602084016200233d565b60208201526040820151604082015260608201516060820152620023dd836080840162002366565b608082015260a082015160a0820152620023fb8360c084016200233d565b60c08201526200240f8360e084016200233d565b60e08201526101008281015190820152610120620024308482850162002355565b9082015292915050565b6000806000606084860312156200244f578283fd5b83516200245c816200272f565b60208501519093506200246f816200272f565b604085015190925063ffffffff8116811462002489578182fd5b809150509250925092565b600060208284031215620024a6578081fd5b5051919050565b600080600060608486031215620024c2578283fd5b835160208086015160408701519295509350906001600160401b0380821115620024ea578384fd5b818701915087601f830112620024fe578384fd5b8151818111156200250d578485fd5b6200251c848583020162002708565b8181528481019250838501610140808402860187018c10156200253d578788fd5b8795505b838610156200256d57620025568c8362002376565b855260019590950194938601939081019062002541565b505080955050505050509250925092565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526010908201526f746f6f206d616e7920636f6e6669677360801b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b60208082526023908201527f7265706f72746564207072696365206d75737420686176652061207265706f726040820152623a32b960e91b606082015260800190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b03811182821017156200272757600080fd5b604052919050565b6001600160701b03811681146200274557600080fd5b50565b60805160a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05160601c6103005160601c6103205160601c6103405160601c6103605160601c6103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c6104405160601c6104605160601c6104805160601c6104a05160601c6104c05160601c6104e05160601c6105005160601c6105205160601c6105405160601c6105605160601c6105805160601c6105a05160601c6105c05160601c6105e05160601c6106005160601c6106205160601c6106405160601c6106605160601c6106805160601c6106a05160601c6106c05160601c6106e05161070051610720516107405161076051610780516107a0516107c0516107e05161080051610820516108405161086051610880516108a0516108c0516108e05161090051610920516109405161096051610980516109a0516109c0516109e051610a0051610a2051610a4051610a6051610a8051610aa051610ac051610ae051610b0051610b2051610b4051610b6051610b8051610ba051610bc051610be051610c0051610c2051610c4051610c6051610c8051610ca051610cc051610ce051610d0051610d205160f81c610d405160f81c610d605160f81c610d805160f81c610da05160f81c610dc05160f81c610de05160f81c610e005160f81c610e205160f81c610e405160f81c610e605160f81c610e805160f81c610ea05160f81c610ec05160f81c610ee05160f81c610f005160f81c610f205160f81c610f405160f81c610f605160f81c610f805160f81c610fa05160f81c610fc05160f81c610fe05160f81c6110005160f81c6110205160f81c6110405161106051611080516110a0516110c0516110e05161110051611120516111405161116051611180516111a0516111c0516111e05161120051611220516112405161126051611280516112a0516112c0516112e0516113005161132051611340516113605160601c6113805160601c6113a05160601c6113c05160601c6113e05160601c6114005160601c6114205160601c6114405160601c6114605160601c6114805160601c6114a05160601c6114c05160601c6114e05160601c6115005160601c6115205160601c6115405160601c6115605160601c6115805160601c6115a05160601c6115c05160601c6115e05160601c6116005160601c6116205160601c6116405160601c6116605160601c6116805160601c6116a05160601c6116c05160601c6116e05160601c6117005160601c6117205160601c6117405160601c6117605160601c6117805160601c6117a05160601c6117c05160601c6117e05160601c6118005160601c6118205160601c6118405160601c6118605160601c6118805160601c6118a05160601c6118c05160601c6118e05160601c6119005160601c6119205160601c6119405160601c6119605160601c6119805160601c6119a0516119c0516119e051611a0051611a2051611a4051611a6051611a8051611aa051611ac051611ae051611b0051611b2051611b4051611b6051611b8051611ba051611bc051611be051611c0051611c2051611c4051611c6051611c8051611ca051611cc05160f81c611ce05160f81c611d005160f81c611d205160f81c611d405160f81c611d605160f81c611d805160f81c611da05160f81c611dc05160f81c611de05160f81c611e005160f81c611e205160f81c611e405160f81c611e605160f81c611e805160f81c611ea05160f81c611ec05160f81c611ee05160f81c611f005160f81c611f205160f81c611f405160f81c611f605160f81c611f805160f81c611fa05160f81c611fc05160f81c611fe0516120005161202051615f286200350c600039806136f652806156de52508061343752806153cd52508061039a52806153a25250806133d7525080613210525080613049525080612e82525080612cbb525080612af452508061292d52508061276652508061259f5250806123d852508061221152508061204a525080611e83525080611cbc525080611af552508061192e5250806117675250806115a05250806113d952508061121252508061104b525080610e84525080610cbd525080610af652508061092f5250806133b15250806131ea525080613023525080612e5c525080612c95525080612ace5250806129075250806127405250806125795250806123b25250806121eb525080612024525080611e5d525080611c96525080611acf52508061190852508061174152508061157a5250806113b35250806111ec525080611025525080610e5e525080610c97525080610ad0525080610909525080613382528061457a5250806131bb5280614538525080612ff452806144f6525080612e2d52806144b4525080612c665280614472525080612a9f52806144305250806128d852806143ee52508061271152806143ac52508061254a528061436a52508061238352806143285250806121bc52806142e6525080611ff552806142a4525080611e2e5280614262525080611c675280614220525080611aa052806141de5250806118d9528061419c525080611712528061415a52508061154b528061411852508061138452806140d65250806111bd5280614094525080610ff65280614052525080610e2f5280614010525080610c685280613fce525080610aa15280613f8c5250806108da5280613f4a52508061335352508061318c525080612fc5525080612dfe525080612c37525080612a705250806128a95250806126e252508061251b52508061235452508061218d525080611fc6525080611dff525080611c38525080611a715250806118aa5250806116e352508061151c52508061135552508061118e525080610fc7525080610e00525080610c39525080610a725250806108ab52508061332d525080613166525080612f9f525080612dd8525080612c11525080612a4a5250806128835250806126bc5250806124f552508061232e525080612167525080611fa0525080611dd9525080611c12525080611a4b5250806118845250806116bd5250806114f652508061132f525080611168525080610fa1525080610dda525080610c13525080610a4c5250806108855250806132fc525080613135525080612f6e525080612da7525080612be0525080612a1952508061285252508061268b5250806124c45250806122fd525080612136525080611f6f525080611da8525080611be1525080611a1a52508061185352508061168c5250806114c55250806112fe525080611137525080610f70525080610da9525080610be2525080610a1b5250806108545250806132d652508061310f525080612f48525080612d81525080612bba5250806129f352508061282c52508061266552508061249e5250806122d7525080612110525080611f49525080611d82525080611bbb5250806119f452508061182d52508061166652508061149f5250806112d8525080611111525080610f4a525080610d83525080610bbc5250806109f552508061082e5250806132b05280613f0f5250806130e95280613edf525080612f225280613eaf525080612d5b5280613e7f525080612b945280613e4f5250806129cd5280613e1f5250806128065280613def52508061263f5280613dbf5250806124785280613d8f5250806122b15280613d5f5250806120ea5280613d2f525080611f235280613cff525080611d5c5280613ccf525080611b955280613c9f5250806119ce5280613c6f5250806118075280613c3f5250806116405280613c0f5250806114795280613bdf5250806112b25280613baf5250806110eb5280613b7f525080610f245280613b4f525080610d5d5280613b1f525080610b965280613aef5250806109cf5280613abf5250806108085280613a8f5250806132815280614bee5250806130ba5280614bac525080612ef35280614b6a525080612d2c5280614b28525080612b655280614ae652508061299e5280614aa45250806127d75280614a625250806126105280614a2052508061244952806149de525080612282528061499c5250806120bb528061495a525080611ef45280614918525080611d2d52806148d6525080611b66528061489452508061199f52806148525250806117d8528061481052508061161152806147ce52508061144a528061478c525080611283528061474a5250806110bc5280614708525080610ef552806146c6525080610d2e5280614684525080610b6752806146425250806109a052806146005250806107d952806145be52508061325252806152eb52508061308b52806152a9525080612ec45280615267525080612cfd5280615225525080612b3652806151e352508061296f52806151a15250806127a8528061515f5250806125e1528061511d52508061241a52806150db525080612253528061509952508061208c5280615057525080611ec55280615015525080611cfe5280614fd3525080611b375280614f915250806119705280614f4f5250806117a95280614f0d5250806115e25280614ecb52508061141b5280614e895250806112545280614e4752508061108d5280614e05525080610ec65280614dc3525080610cff5280614d81525080610b385280614d3f5250806109715280614cfd5250806107aa5280614cbb52508061075a52806134135250615f286000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638a003888116100de578063d1b353b411610097578063eaa1c2ca11610071578063eaa1c2ca146102f7578063f2fde38b1461030a578063fc57d4df1461031d578063fe2c61981461033057610173565b8063d1b353b414610259578063e8315742146102e7578063e9206d78146102ef57610173565b80638a0038881461027c5780638da5cb5b1461028f5780638e499bcf146102a457806392b84357146102ac5780639f599631146102b4578063beed9b51146102c757610173565b80635f396923116101305780635f3969231461021057806360846bc61461022557806368f9a97f1461024657806369aa3ac61461025957806379ba5097146102615780638185b81c1461026957610173565b80631a1252041461017857806324105209146101a1578063276c2cba146101b657806329feb7bc146101c957806337c0e12d146101dc5780634da21942146101fd575b600080fd5b61018b6101863660046158b7565b610343565b6040516101989190615db5565b60405180910390f35b6101a9610398565b6040516101989190615e74565b61018b6101c43660046158cf565b6103bc565b61018b6101d736600461587f565b6103f9565b6101ef6101ea3660046158b7565b61040c565b604051610198929190615e7d565b61018b61020b36600461587f565b610425565b61022361021e3660046158b7565b610438565b005b6102386102333660046158b7565b6104ec565b604051610198929190615e59565b6102236102543660046158b7565b610513565b6101a961061f565b61022361062b565b6102236102773660046158b7565b6106ac565b61018b61028a3660046158b7565b610750565b610297613402565b6040516101989190615a70565b6101a9613411565b6101a9613435565b61018b6102c236600461587f565b613459565b6102da6102d53660046159d6565b6134fb565b6040516101989190615a84565b6101a96136ef565b6101a96136f4565b6101ef6103053660046158b7565b613718565b61022361031836600461587f565b613731565b6101a961032b36600461587f565b6137d5565b6101a961033e3660046158cf565b61381d565b61034b6157e9565b600061035683613a8b565b905060001981146103725761036a81610750565b915050610393565b60405162461bcd60e51b815260040161038a90615b67565b60405180910390fd5b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103c46157e9565b6103f3826040516020016103d89190615a28565b60405160208183030381529060405280519060200120610343565b92915050565b6104016157e9565b600061035683613f46565b6003602052600090815260409020805460019091015482565b61042d6157e9565b6000610356836145ba565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff16156104985760405162461bcd60e51b815260040161038a90615cec565b60008181526002602052604080822080546001600160f81b0316600160f81b1790555182917fdd0f1f4e105bf96c7d8e2defcbbc958075661165b324633175ca26f08a11f4b491a26104e981610513565b50565b6002602052600090815260409020546001600160f81b03811690600160f81b900460ff1682565b61051b61583c565b506000818152600260209081526040918290208251808401909352546001600160f81b0381168352600160f81b900460ff1615159082018190526105715760405162461bcd60e51b815260040161038a90615b97565b6105796157e9565b61058283610343565b9050600061058f82614c2e565b9050600160f81b81106105b45760405162461bcd60e51b815260040161038a90615d4e565b604082810180516000908152600260205282902080546001600160f81b0319166001600160f81b0385161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390610611908490615e74565b60405180910390a250505050565b670de0b6b3a764000081565b6001546001600160a01b031633146106555760405162461bcd60e51b815260040161038a90615a8f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff1661070b5760405162461bcd60e51b815260040161038a90615c73565b60008181526002602052604080822080546001600160f81b031690555182917f5a1062b4c89c41b46f5e2da710d564c88989bfe1b4e856dbdbc40c5c59a2ce4b91a250565b6107586157e9565b7f000000000000000000000000000000000000000000000000000000000000000082106107975760405162461bcd60e51b815260040161038a90615b67565b8161095a576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561087e57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160011415610b21576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610a4557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160021415610ce8576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610c0c57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160031415610eaf576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610dd357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160041415611076576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610f9a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816005141561123d576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561116157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160061415611404576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561132857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600714156115cb576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156114ef57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160081415611792576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156116b657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160091415611959576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561187d57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600a1415611b20576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611a4457fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600b1415611ce7576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611c0b57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600c1415611eae576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611dd257fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600d1415612075576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611f9957fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600e141561223c576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561216057fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600f1415612403576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561232757fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81601014156125ca576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156124ee57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160111415612791576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156126b557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160121415612958576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561287c57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160131415612b1f576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612a4357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160141415612ce6576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612c0a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160151415612ead576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612dd157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160161415613074576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612f9857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816017141561323b576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561315f57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160181415610393576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561332657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6134616157e9565b600061346c83614cb7565b905060001981146134805761036a81610750565b6134f4836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156134bc57600080fd5b505afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b919061589b565b9392505050565b60006135056157e9565b61350e336103f9565b9050600061351c828561532b565b9050600061352983614c2e565b905061353361583c565b50604083810151600090815260026020908152908290208251808401909352546001600160f81b0381168352600160f81b900460ff161580159183019190915261360457600160f81b821061359a5760405162461bcd60e51b815260040161038a90615d4e565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0386161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c3906135f7908590615e74565b60405180910390a26136e3565b61360e8383615379565b156136a457600160f81b83106136365760405162461bcd60e51b815260040161038a90615bce565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0387161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390613693908690615e74565b60405180910390a2600194506136e3565b83604001517f6b871468876a51b1609c5e5fc5c6f57c7e9a66aba8ad5a41ed4a5b2b50d7d1f684846040516136da929190615e7d565b60405180910390a25b50505050949350505050565b601981565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004602052600090815260409020805460019091015482565b6000546001600160a01b0316331461375b5760405162461bcd60e51b815260040161038a90615b00565b6001600160a01b0381163314156137845760405162461bcd60e51b815260040161038a90615d17565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006137df6157e9565b6137e883613459565b9050806060015161380e6c0c9f2c9cd04674edea4000000061380984615401565b615501565b8161381557fe5b049392505050565b60006138276157e9565b613830836103bc565b90506134f481615401565b600080600061384861553b565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bb91906159be565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f657600080fd5b505afa15801561390a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392e91906159be565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a6919061596a565b9250925092508363ffffffff168163ffffffff1614613a065780840363ffffffff81166139d38486613a10565b516001600160e01b031602969096019563ffffffff81166139f48585613a10565b516001600160e01b0316029590950194505b5050509193909250565b613a18615853565b6000826001600160701b031611613a415760405162461bcd60e51b815260040161038a90615d7e565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681613a7657fe5b046001600160e01b0316815250905092915050565b60007f0000000000000000000000000000000000000000000000000000000000000000821415613abd57506000610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613aed57506001610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b1d57506002610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b4d57506003610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b7d57506004610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613bad57506005610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613bdd57506006610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c0d57506007610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c3d57506008610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c6d57506009610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c9d5750600a610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ccd5750600b610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613cfd5750600c610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d2d5750600d610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d5d5750600e610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d8d5750600f610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613dbd57506010610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ded57506011610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e1d57506012610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e4d57506013610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e7d57506014610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ead57506015610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613edd57506016610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f0d57506017610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f3d57506018610393565b50600019919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f8a57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613fcc57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561400e57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561405057506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561409257506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156140d457506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561411657506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561415857506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561419a57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156141dc57506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561421e5750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142605750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142a25750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142e45750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143265750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143685750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143aa57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143ec57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561442e57506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561447057506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144b257506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144f457506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561453657506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561457857506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156145fe57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561464057506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561468257506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156146c457506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561470657506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561474857506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561478a57506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156147cc57506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561480e57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561485057506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156148925750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156148d45750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149165750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149585750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561499a5750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149dc5750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614a1e57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614a6057506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614aa257506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614ae457506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b2657506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b6857506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614baa57506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614bec57506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b600080614c39615545565b9050600283608001516002811115614c4d57fe5b14614c6a5760405162461bcd60e51b815260040161038a90615c05565b604051602001614c7990615a61565b6040516020818303038152906040528051906020012083604001511415614ca257809150614cb1565b6134f483604001518483615594565b50919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614cfb57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614d3d57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614d7f57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614dc157506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e0357506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e4557506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e8757506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614ec957506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f0b57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f4d57506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f8f5750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614fd15750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150135750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150555750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150975750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150d95750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561511b57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561515d57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561519f57506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156151e157506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561522357506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561526557506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152a757506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152e957506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60008082121561534d5760405162461bcd60e51b815260040161038a90615abf565b60008290506000846060015161536883876101000151615501565b8161536f57fe5b0495945050505050565b600082156153f85760008361539684670de0b6b3a7640000615501565b8161539d57fe5b0490507f000000000000000000000000000000000000000000000000000000000000000081111580156153f057507f00000000000000000000000000000000000000000000000000000000000000008110155b9150506103f3565b50600092915050565b600060028260800151600281111561541557fe5b141561543c57506040808201516000908152600260205220546001600160f81b0316610393565b60018260800151600281111561544e57fe5b141561545f575060a0810151610393565b60008260800151600281111561547157fe5b14156103935760006002600060405160200161548c90615a61565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160f81b03169050806154da5760405162461bcd60e51b815260040161038a90615ca0565b670de0b6b3a76400006154f1828560a00151615501565b816154f857fe5b04915050610393565b600082615510575060006103f3565b8282028284828161551d57fe5b04146134f45760405162461bcd60e51b815260040161038a90615b30565b63ffffffff421690565b600061558f60405160200161555990615a61565b604051602081830303815290604052805190602001206155816040516020016103d890615a61565b670de0b6b3a7640000615594565b905090565b6000806000806155a38661568b565b9250925092508042116155c85760405162461bcd60e51b815260040161038a90615c3c565b428190036155d4615853565b604051806020016040528083868803816155ea57fe5b046001600160e01b0316815250905060006156048261579e565b90506000615612828a615501565b90506000670de0b6b3a76400008061562e848e60600151615501565b8161563557fe5b048161563d57fe5b0490508b7fac9b6bb0c67df7ef0d18e58e4bd539c4d6f780c4c8f341cd8e649109edeb5faf82884260405161567493929190615e8b565b60405180910390a29b9a5050505050505050505050565b6000806000808460400151905060006156a3866157b6565b90506156ad615865565b50600082815260046020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110615779578151600085815260036020908152604080832093845581860180516001958601556004909252918290204280825593018690558a82015185519151925190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9361577093928990615ea1565b60405180910390a25b5050600091825260036020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b60008060006157c88460c0015161383b565b5091509150836101200151156157e15791506103939050565b509050610393565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604080518082019091526000808252602082015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b600060208284031215615890578081fd5b81356134f481615ec8565b6000602082840312156158ac578081fd5b81516134f481615ec8565b6000602082840312156158c8578081fd5b5035919050565b6000602082840312156158e0578081fd5b813567ffffffffffffffff808211156158f7578283fd5b818401915084601f83011261590a578283fd5b813581811115615918578384fd5b604051601f8201601f191681016020018381118282101715615938578586fd5b60405281815283820160200187101561594f578485fd5b615960826020830160208701615ebc565b9695505050505050565b60008060006060848603121561597e578182fd5b835161598981615edd565b602085015190935061599a81615edd565b604085015190925063ffffffff811681146159b3578182fd5b809150509250925092565b6000602082840312156159cf578081fd5b5051919050565b600080600080608085870312156159eb578081fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b15159052565b60038110615a2457fe5b9052565b60008251815b81811015615a485760208186018101518583015201615a2e565b81811115615a565782828501525b509190910192915050565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526016908201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604082015260600190565b60208082526021908201527f5265706f727465642070726963652063616e6e6f74206265206e6567617469766040820152606560f81b606082015260800190565b60208082526016908201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604082015260600190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f4661696c6f766572206d75737420626520616374697665000000000000000000604082015260600190565b60208082526018908201527f5265706f7274656420707269636520746f6f206c617267650000000000000000604082015260600190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b602080825260139082015272105b1c9958591e4819195858dd1a5d985d1959606a1b604082015260600190565b6020808252602c908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e76657260408201526b7420746f20646f6c6c61727360a01b606082015260800190565b602080825260119082015270105b1c9958591e481858dd1a5d985d1959607a1b604082015260600190565b60208082526017908201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604082015260600190565b602080825260169082015275416e63686f7220707269636520746f6f206c6172676560501b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b600061014082019050615dc9828451615a07565b6020830151615ddb6020840182615a07565b5060408301516040830152606083015160608301526080830151615e026080840182615a1a565b5060a083015160a083015260c0830151615e1f60c0840182615a07565b5060e0830151615e3260e0840182615a07565b50610100838101519083015261012080840151615e5182850182615a14565b505092915050565b6001600160f81b039290921682521515602082015260400190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b82818337506000910152565b6001600160a01b03811681146104e957600080fd5b6001600160701b03811681146104e957600080fdfea2646970667358221220102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd64736f6c634300060c00330000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000150000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000000000000000000000000000000000000000000000aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e5680000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec78b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db550000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de40000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e86291a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee95040000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba00000000000000000000000090655316479383795416b615b61282c72d8382c1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603594dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c5320000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c6adf3a35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a18000230da775cac24873d00ff85bccded5500000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d16500000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a1700000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab4540000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a7790000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad860000000000000000000000000000000000085d4780b73119b644ae5ecd22b376a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae30510000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc80000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d70000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c210000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd63812221920200000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339460000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93eec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28000000000000000000000000ba4319741782151d2b1df4799d757892efda4165000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041171993284df560249b57358f931d9eb7b925d0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca200000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb54609130000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123930000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638a003888116100de578063d1b353b411610097578063eaa1c2ca11610071578063eaa1c2ca146102f7578063f2fde38b1461030a578063fc57d4df1461031d578063fe2c61981461033057610173565b8063d1b353b414610259578063e8315742146102e7578063e9206d78146102ef57610173565b80638a0038881461027c5780638da5cb5b1461028f5780638e499bcf146102a457806392b84357146102ac5780639f599631146102b4578063beed9b51146102c757610173565b80635f396923116101305780635f3969231461021057806360846bc61461022557806368f9a97f1461024657806369aa3ac61461025957806379ba5097146102615780638185b81c1461026957610173565b80631a1252041461017857806324105209146101a1578063276c2cba146101b657806329feb7bc146101c957806337c0e12d146101dc5780634da21942146101fd575b600080fd5b61018b6101863660046158b7565b610343565b6040516101989190615db5565b60405180910390f35b6101a9610398565b6040516101989190615e74565b61018b6101c43660046158cf565b6103bc565b61018b6101d736600461587f565b6103f9565b6101ef6101ea3660046158b7565b61040c565b604051610198929190615e7d565b61018b61020b36600461587f565b610425565b61022361021e3660046158b7565b610438565b005b6102386102333660046158b7565b6104ec565b604051610198929190615e59565b6102236102543660046158b7565b610513565b6101a961061f565b61022361062b565b6102236102773660046158b7565b6106ac565b61018b61028a3660046158b7565b610750565b610297613402565b6040516101989190615a70565b6101a9613411565b6101a9613435565b61018b6102c236600461587f565b613459565b6102da6102d53660046159d6565b6134fb565b6040516101989190615a84565b6101a96136ef565b6101a96136f4565b6101ef6103053660046158b7565b613718565b61022361031836600461587f565b613731565b6101a961032b36600461587f565b6137d5565b6101a961033e3660046158cf565b61381d565b61034b6157e9565b600061035683613a8b565b905060001981146103725761036a81610750565b915050610393565b60405162461bcd60e51b815260040161038a90615b67565b60405180910390fd5b919050565b7f0000000000000000000000000000000000000000000000000ff59ee833b3000081565b6103c46157e9565b6103f3826040516020016103d89190615a28565b60405160208183030381529060405280519060200120610343565b92915050565b6104016157e9565b600061035683613f46565b6003602052600090815260409020805460019091015482565b61042d6157e9565b6000610356836145ba565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff16156104985760405162461bcd60e51b815260040161038a90615cec565b60008181526002602052604080822080546001600160f81b0316600160f81b1790555182917fdd0f1f4e105bf96c7d8e2defcbbc958075661165b324633175ca26f08a11f4b491a26104e981610513565b50565b6002602052600090815260409020546001600160f81b03811690600160f81b900460ff1682565b61051b61583c565b506000818152600260209081526040918290208251808401909352546001600160f81b0381168352600160f81b900460ff1615159082018190526105715760405162461bcd60e51b815260040161038a90615b97565b6105796157e9565b61058283610343565b9050600061058f82614c2e565b9050600160f81b81106105b45760405162461bcd60e51b815260040161038a90615d4e565b604082810180516000908152600260205282902080546001600160f81b0319166001600160f81b0385161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390610611908490615e74565b60405180910390a250505050565b670de0b6b3a764000081565b6001546001600160a01b031633146106555760405162461bcd60e51b815260040161038a90615a8f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff1661070b5760405162461bcd60e51b815260040161038a90615c73565b60008181526002602052604080822080546001600160f81b031690555182917f5a1062b4c89c41b46f5e2da710d564c88989bfe1b4e856dbdbc40c5c59a2ce4b91a250565b6107586157e9565b7f000000000000000000000000000000000000000000000000000000000000001582106107975760405162461bcd60e51b815260040161038a90615b67565b8161095a576040518061014001604052807f0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed56001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561087e57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031681526020017f000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd502366001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000115158152509050610393565b8160011415610b21576040518061014001604052807f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36436001600160a01b031681526020017f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031681526020017fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e56881526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115610a4557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb116001600160a01b031681526020017f000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160021415610ce8576040518061014001604052807f00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75636001600160a01b031681526020017f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b031681526020017fd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115610c0c57fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160031415610eaf576040518061014001604052807f000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc96001600160a01b031681526020017f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b031681526020017f8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d081526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115610dd357fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160041415611076576040518061014001604052807f000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a6001600160a01b031681526020017f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b031681526020017fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e981526020017f0000000000000000000000000000000000000000000000000000000005f5e10081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115610f9a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9406001600160a01b031681526020017f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816005141561123d576040518061014001604052807f0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e6001600160a01b031681526020017f0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef6001600160a01b031681526020017f3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db5581526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561116157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b48386001600160a01b031681526020017f000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc26001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160061415611404576040518061014001604052807f000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4076001600160a01b031681526020017f000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4986001600160a01b031681526020017fb8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561132857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de46001600160a01b031681526020017f0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd55756001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000115158152509050610393565b81600714156115cb576040518061014001604052807f000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c16001600160a01b031681526020017f0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8626001600160a01b031681526020017f91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee950481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156114ef57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba6001600160a01b031681526020017f00000000000000000000000090655316479383795416b615b61282c72d8382c16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160081415611792576040518061014001604052807f000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc6001600160a01b031681526020017f00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603596001600160a01b031681526020017f4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c53281526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156116b657fe5b81526020017f0000000000000000000000000000000000000000000000000012c6adf3a3500081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160091415611959576040518061014001604052807f00000000000000000000000035a18000230da775cac24873d00ff85bccded5506001600160a01b031681526020017f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9846001600160a01b031681526020017ffba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d165081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561187d57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a176001600160a01b031681526020017f00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d906001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600a1415611b20576040518061014001604052807f00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e46001600160a01b031681526020017f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268886001600160a01b031681526020017fb6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab45481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611a4457fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f6001600160a01b031681526020017f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600b1415611ce7576040518061014001604052807f000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c76001600160a01b031681526020017f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b031681526020017f921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a77981526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611c0b57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b9746001600160a01b031681526020017f000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600c1415611eae576040518061014001604052807f00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad866001600160a01b031681526020017f0000000000000000000000000000000000085d4780b73119b644ae5ecd22b3766001600160a01b031681526020017fa1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae305181526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115611dd257fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600d1415612075576040518061014001604052807f000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c6001600160a01b031681526020017f0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae96001600160a01b031681526020017fde46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc881526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611f9957fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f6001600160a01b031681526020017f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600e141561223c576040518061014001604052807f0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d76001600160a01b031681526020017f0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe26001600160a01b031681526020017fbbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c2181526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561216057fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc194336001600160a01b031681526020017f000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff76001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600f1415612403576040518061014001604052807f00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b6001600160a01b031681526020017f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a26001600160a01b031681526020017fec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd638122219202081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561232757fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000c2adda861f89bbb333c90c492cb837741916a2256001600160a01b031681526020017f000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81601014156125ca576040518061014001604052807f00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339466001600160a01b031681526020017f0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e6001600160a01b031681526020017fec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156124ee57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e286001600160a01b031681526020017f000000000000000000000000ba4319741782151d2b1df4799d757892efda41656001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160111415612791576040518061014001604052807f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f46001600160a01b031681526020017f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b031681526020017fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e981526020017f0000000000000000000000000000000000000000000000000000000005f5e10081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156126b557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9406001600160a01b031681526020017f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160121415612958576040518061014001604052807f000000000000000000000000041171993284df560249b57358f931d9eb7b925d6001600160a01b031681526020017f0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b031681526020017fe6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca2081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000001600281111561287c57fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160131415612b1f576040518061014001604052807f0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f676001600160a01b031681526020017f000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca6001600160a01b031681526020017f58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb546091381526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115612a4357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031681526020017f000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b06001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160141415612ce6576040518061014001604052807f000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123936001600160a01b031681526020017f0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb06001600160a01b031681526020017fa6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115612c0a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de6001600160a01b031681526020017f00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160151415612ead576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612dd157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160161415613074576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612f9857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816017141561323b576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561315f57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160181415610393576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561332657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000001581565b7f0000000000000000000000000000000000000000000000000bcbce7f1b15000081565b6134616157e9565b600061346c83614cb7565b905060001981146134805761036a81610750565b6134f4836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156134bc57600080fd5b505afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b919061589b565b9392505050565b60006135056157e9565b61350e336103f9565b9050600061351c828561532b565b9050600061352983614c2e565b905061353361583c565b50604083810151600090815260026020908152908290208251808401909352546001600160f81b0381168352600160f81b900460ff161580159183019190915261360457600160f81b821061359a5760405162461bcd60e51b815260040161038a90615d4e565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0386161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c3906135f7908590615e74565b60405180910390a26136e3565b61360e8383615379565b156136a457600160f81b83106136365760405162461bcd60e51b815260040161038a90615bce565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0387161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390613693908690615e74565b60405180910390a2600194506136e3565b83604001517f6b871468876a51b1609c5e5fc5c6f57c7e9a66aba8ad5a41ed4a5b2b50d7d1f684846040516136da929190615e7d565b60405180910390a25b50505050949350505050565b601981565b7f000000000000000000000000000000000000000000000000000000000000070881565b6004602052600090815260409020805460019091015482565b6000546001600160a01b0316331461375b5760405162461bcd60e51b815260040161038a90615b00565b6001600160a01b0381163314156137845760405162461bcd60e51b815260040161038a90615d17565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006137df6157e9565b6137e883613459565b9050806060015161380e6c0c9f2c9cd04674edea4000000061380984615401565b615501565b8161381557fe5b049392505050565b60006138276157e9565b613830836103bc565b90506134f481615401565b600080600061384861553b565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bb91906159be565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f657600080fd5b505afa15801561390a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392e91906159be565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a6919061596a565b9250925092508363ffffffff168163ffffffff1614613a065780840363ffffffff81166139d38486613a10565b516001600160e01b031602969096019563ffffffff81166139f48585613a10565b516001600160e01b0316029590950194505b5050509193909250565b613a18615853565b6000826001600160701b031611613a415760405162461bcd60e51b815260040161038a90615d7e565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681613a7657fe5b046001600160e01b0316815250905092915050565b60007faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4821415613abd57506000610393565b7fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e568821415613aed57506001610393565b7fd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa821415613b1d57506002610393565b7f8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0821415613b4d57506003610393565b7fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9821415613b7d57506004610393565b7f3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db55821415613bad57506005610393565b7fb8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd821415613bdd57506006610393565b7f91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee9504821415613c0d57506007610393565b7f4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c532821415613c3d57506008610393565b7ffba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d1650821415613c6d57506009610393565b7fb6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab454821415613c9d5750600a610393565b7f921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a779821415613ccd5750600b610393565b7fa1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae3051821415613cfd5750600c610393565b7fde46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc8821415613d2d5750600d610393565b7fbbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c21821415613d5d5750600e610393565b7fec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020821415613d8d5750600f610393565b7fec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe821415613dbd57506010610393565b7fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9821415613ded57506011610393565b7fe6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca20821415613e1d57506012610393565b7f58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb5460913821415613e4d57506013610393565b7fa6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f821415613e7d57506014610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ead57506015610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613edd57506016610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f0d57506017610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f3d57506018610393565b50600019919050565b60007f000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd502366001600160a01b0316826001600160a01b03161415613f8a57506000610393565b7f000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea6001600160a01b0316826001600160a01b03161415613fcc57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561400e57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561405057506003610393565b7f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b0316826001600160a01b0316141561409257506004610393565b7f000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc26001600160a01b0316826001600160a01b031614156140d457506005610393565b7f0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd55756001600160a01b0316826001600160a01b0316141561411657506006610393565b7f00000000000000000000000090655316479383795416b615b61282c72d8382c16001600160a01b0316826001600160a01b0316141561415857506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561419a57506008610393565b7f00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d906001600160a01b0316826001600160a01b031614156141dc57506009610393565b7f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b16001600160a01b0316826001600160a01b0316141561421e5750600a610393565b7f000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b16001600160a01b0316826001600160a01b031614156142605750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142a25750600c610393565b7f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c6001600160a01b0316826001600160a01b031614156142e45750600d610393565b7f000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff76001600160a01b0316826001600160a01b031614156143265750600e610393565b7f000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce16001600160a01b0316826001600160a01b031614156143685750600f610393565b7f000000000000000000000000ba4319741782151d2b1df4799d757892efda41656001600160a01b0316826001600160a01b031614156143aa57506010610393565b7f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b0316826001600160a01b031614156143ec57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561442e57506012610393565b7f000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b06001600160a01b0316826001600160a01b0316141561447057506013610393565b7f00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba6001600160a01b0316826001600160a01b031614156144b257506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144f457506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561453657506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561457857506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156145fe57506000610393565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316826001600160a01b0316141561464057506001610393565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b0316141561468257506002610393565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316826001600160a01b031614156146c457506003610393565b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b0316826001600160a01b0316141561470657506004610393565b7f0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef6001600160a01b0316826001600160a01b0316141561474857506005610393565b7f000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4986001600160a01b0316826001600160a01b0316141561478a57506006610393565b7f0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8626001600160a01b0316826001600160a01b031614156147cc57506007610393565b7f00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603596001600160a01b0316826001600160a01b0316141561480e57506008610393565b7f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9846001600160a01b0316826001600160a01b0316141561485057506009610393565b7f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268886001600160a01b0316826001600160a01b031614156148925750600a610393565b7f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316826001600160a01b031614156148d45750600b610393565b7f0000000000000000000000000000000000085d4780b73119b644ae5ecd22b3766001600160a01b0316826001600160a01b031614156149165750600c610393565b7f0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae96001600160a01b0316826001600160a01b031614156149585750600d610393565b7f0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe26001600160a01b0316826001600160a01b0316141561499a5750600e610393565b7f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a26001600160a01b0316826001600160a01b031614156149dc5750600f610393565b7f0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e6001600160a01b0316826001600160a01b03161415614a1e57506010610393565b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b0316826001600160a01b03161415614a6057506011610393565b7f0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b0316826001600160a01b03161415614aa257506012610393565b7f000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca6001600160a01b0316826001600160a01b03161415614ae457506013610393565b7f0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb06001600160a01b0316826001600160a01b03161415614b2657506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b6857506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614baa57506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614bec57506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b600080614c39615545565b9050600283608001516002811115614c4d57fe5b14614c6a5760405162461bcd60e51b815260040161038a90615c05565b604051602001614c7990615a61565b6040516020818303038152906040528051906020012083604001511415614ca257809150614cb1565b6134f483604001518483615594565b50919050565b60007f0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed56001600160a01b0316826001600160a01b03161415614cfb57506000610393565b7f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36436001600160a01b0316826001600160a01b03161415614d3d57506001610393565b7f00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75636001600160a01b0316826001600160a01b03161415614d7f57506002610393565b7f000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc96001600160a01b0316826001600160a01b03161415614dc157506003610393565b7f000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a6001600160a01b0316826001600160a01b03161415614e0357506004610393565b7f0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e6001600160a01b0316826001600160a01b03161415614e4557506005610393565b7f000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4076001600160a01b0316826001600160a01b03161415614e8757506006610393565b7f000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c16001600160a01b0316826001600160a01b03161415614ec957506007610393565b7f000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc6001600160a01b0316826001600160a01b03161415614f0b57506008610393565b7f00000000000000000000000035a18000230da775cac24873d00ff85bccded5506001600160a01b0316826001600160a01b03161415614f4d57506009610393565b7f00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e46001600160a01b0316826001600160a01b03161415614f8f5750600a610393565b7f000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c76001600160a01b0316826001600160a01b03161415614fd15750600b610393565b7f00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad866001600160a01b0316826001600160a01b031614156150135750600c610393565b7f000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c6001600160a01b0316826001600160a01b031614156150555750600d610393565b7f0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d76001600160a01b0316826001600160a01b031614156150975750600e610393565b7f00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b6001600160a01b0316826001600160a01b031614156150d95750600f610393565b7f00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339466001600160a01b0316826001600160a01b0316141561511b57506010610393565b7f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f46001600160a01b0316826001600160a01b0316141561515d57506011610393565b7f000000000000000000000000041171993284df560249b57358f931d9eb7b925d6001600160a01b0316826001600160a01b0316141561519f57506012610393565b7f0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f676001600160a01b0316826001600160a01b031614156151e157506013610393565b7f000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123936001600160a01b0316826001600160a01b0316141561522357506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561526557506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152a757506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152e957506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60008082121561534d5760405162461bcd60e51b815260040161038a90615abf565b60008290506000846060015161536883876101000151615501565b8161536f57fe5b0495945050505050565b600082156153f85760008361539684670de0b6b3a7640000615501565b8161539d57fe5b0490507f0000000000000000000000000000000000000000000000000ff59ee833b3000081111580156153f057507f0000000000000000000000000000000000000000000000000bcbce7f1b1500008110155b9150506103f3565b50600092915050565b600060028260800151600281111561541557fe5b141561543c57506040808201516000908152600260205220546001600160f81b0316610393565b60018260800151600281111561544e57fe5b141561545f575060a0810151610393565b60008260800151600281111561547157fe5b14156103935760006002600060405160200161548c90615a61565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160f81b03169050806154da5760405162461bcd60e51b815260040161038a90615ca0565b670de0b6b3a76400006154f1828560a00151615501565b816154f857fe5b04915050610393565b600082615510575060006103f3565b8282028284828161551d57fe5b04146134f45760405162461bcd60e51b815260040161038a90615b30565b63ffffffff421690565b600061558f60405160200161555990615a61565b604051602081830303815290604052805190602001206155816040516020016103d890615a61565b670de0b6b3a7640000615594565b905090565b6000806000806155a38661568b565b9250925092508042116155c85760405162461bcd60e51b815260040161038a90615c3c565b428190036155d4615853565b604051806020016040528083868803816155ea57fe5b046001600160e01b0316815250905060006156048261579e565b90506000615612828a615501565b90506000670de0b6b3a76400008061562e848e60600151615501565b8161563557fe5b048161563d57fe5b0490508b7fac9b6bb0c67df7ef0d18e58e4bd539c4d6f780c4c8f341cd8e649109edeb5faf82884260405161567493929190615e8b565b60405180910390a29b9a5050505050505050505050565b6000806000808460400151905060006156a3866157b6565b90506156ad615865565b50600082815260046020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000007088110615779578151600085815260036020908152604080832093845581860180516001958601556004909252918290204280825593018690558a82015185519151925190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9361577093928990615ea1565b60405180910390a25b5050600091825260036020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b60008060006157c88460c0015161383b565b5091509150836101200151156157e15791506103939050565b509050610393565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604080518082019091526000808252602082015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b600060208284031215615890578081fd5b81356134f481615ec8565b6000602082840312156158ac578081fd5b81516134f481615ec8565b6000602082840312156158c8578081fd5b5035919050565b6000602082840312156158e0578081fd5b813567ffffffffffffffff808211156158f7578283fd5b818401915084601f83011261590a578283fd5b813581811115615918578384fd5b604051601f8201601f191681016020018381118282101715615938578586fd5b60405281815283820160200187101561594f578485fd5b615960826020830160208701615ebc565b9695505050505050565b60008060006060848603121561597e578182fd5b835161598981615edd565b602085015190935061599a81615edd565b604085015190925063ffffffff811681146159b3578182fd5b809150509250925092565b6000602082840312156159cf578081fd5b5051919050565b600080600080608085870312156159eb578081fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b15159052565b60038110615a2457fe5b9052565b60008251815b81811015615a485760208186018101518583015201615a2e565b81811115615a565782828501525b509190910192915050565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526016908201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604082015260600190565b60208082526021908201527f5265706f727465642070726963652063616e6e6f74206265206e6567617469766040820152606560f81b606082015260800190565b60208082526016908201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604082015260600190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f4661696c6f766572206d75737420626520616374697665000000000000000000604082015260600190565b60208082526018908201527f5265706f7274656420707269636520746f6f206c617267650000000000000000604082015260600190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b602080825260139082015272105b1c9958591e4819195858dd1a5d985d1959606a1b604082015260600190565b6020808252602c908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e76657260408201526b7420746f20646f6c6c61727360a01b606082015260800190565b602080825260119082015270105b1c9958591e481858dd1a5d985d1959607a1b604082015260600190565b60208082526017908201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604082015260600190565b602080825260169082015275416e63686f7220707269636520746f6f206c6172676560501b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b600061014082019050615dc9828451615a07565b6020830151615ddb6020840182615a07565b5060408301516040830152606083015160608301526080830151615e026080840182615a1a565b5060a083015160a083015260c0830151615e1f60c0840182615a07565b5060e0830151615e3260e0840182615a07565b50610100838101519083015261012080840151615e5182850182615a14565b505092915050565b6001600160f81b039290921682521515602082015260400190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b82818337506000910152565b6001600160a01b03811681146104e957600080fd5b6001600160701b03811681146104e957600080fdfea2646970667358221220102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000150000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000000000000000000000000000000000000000000000aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e5680000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec78b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db550000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de40000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e86291a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee95040000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba00000000000000000000000090655316479383795416b615b61282c72d8382c1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603594dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c5320000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c6adf3a35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a18000230da775cac24873d00ff85bccded5500000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d16500000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a1700000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab4540000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a7790000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad860000000000000000000000000000000000085d4780b73119b644ae5ecd22b376a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae30510000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc80000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d70000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c210000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd63812221920200000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339460000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93eec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28000000000000000000000000ba4319741782151d2b1df4799d757892efda4165000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041171993284df560249b57358f931d9eb7b925d0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca200000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb54609130000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123930000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : anchorToleranceMantissa_ (uint256): 150000000000000000
Arg [1] : anchorPeriod_ (uint256): 1800
Arg [2] : configs (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
214 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000214e8348c4f0000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000708
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [4] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4
Arg [7] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc
Arg [11] : 000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236
Arg [12] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [15] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [16] : a5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e568
Arg [17] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11
Arg [21] : 000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea
Arg [22] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [25] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [26] : d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa
Arg [27] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [29] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [35] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [36] : 8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0
Arg [37] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [39] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [40] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [43] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [44] : 000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a
Arg [45] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [46] : e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9
Arg [47] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [48] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [49] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [50] : 000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d940
Arg [51] : 0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e
Arg [52] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [54] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Arg [55] : 0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef
Arg [56] : 3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db55
Arg [57] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [58] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [60] : 000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838
Arg [61] : 000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2
Arg [62] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [63] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [64] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Arg [65] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Arg [66] : b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd
Arg [67] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [68] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [69] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [70] : 000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de4
Arg [71] : 0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575
Arg [72] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [73] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [74] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [75] : 0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e862
Arg [76] : 91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee9504
Arg [77] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [79] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [80] : 0000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba
Arg [81] : 00000000000000000000000090655316479383795416b615b61282c72d8382c1
Arg [82] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [83] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [84] : 000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc
Arg [85] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [86] : 4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c532
Arg [87] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [88] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [89] : 0000000000000000000000000000000000000000000000000012c6adf3a35000
Arg [90] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [91] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [92] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [93] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [94] : 00000000000000000000000035a18000230da775cac24873d00ff85bccded550
Arg [95] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [96] : fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d1650
Arg [97] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [98] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [99] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [100] : 000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a17
Arg [101] : 00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90
Arg [102] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [103] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [104] : 00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4
Arg [105] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [106] : b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab454
Arg [107] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [108] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [109] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [110] : 000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f
Arg [111] : 000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1
Arg [112] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [113] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [114] : 000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7
Arg [115] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [116] : 921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a779
Arg [117] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [118] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [119] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [120] : 000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974
Arg [121] : 000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1
Arg [122] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [123] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [124] : 00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad86
Arg [125] : 0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376
Arg [126] : a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae3051
Arg [127] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [128] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [129] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [130] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [131] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [132] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [133] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [134] : 000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c
Arg [135] : 0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
Arg [136] : de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc8
Arg [137] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [138] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [139] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [140] : 000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f
Arg [141] : 0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c
Arg [142] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [143] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [144] : 0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d7
Arg [145] : 0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2
Arg [146] : bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c21
Arg [147] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [148] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [149] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [150] : 000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433
Arg [151] : 000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7
Arg [152] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [153] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [154] : 00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b
Arg [155] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [156] : ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020
Arg [157] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [158] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [159] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [160] : 000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225
Arg [161] : 000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1
Arg [162] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [163] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [164] : 00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c33946
Arg [165] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [166] : ec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe
Arg [167] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [168] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [169] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [170] : 0000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28
Arg [171] : 000000000000000000000000ba4319741782151d2b1df4799d757892efda4165
Arg [172] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [173] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [174] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [175] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [176] : e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9
Arg [177] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [178] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [179] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [180] : 000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d940
Arg [181] : 0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e
Arg [182] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [183] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [184] : 000000000000000000000000041171993284df560249b57358f931d9eb7b925d
Arg [185] : 0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1
Arg [186] : e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca20
Arg [187] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [188] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [189] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [190] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [191] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [192] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [193] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [194] : 0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67
Arg [195] : 000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca
Arg [196] : 58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb5460913
Arg [197] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [198] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [199] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [200] : 00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878
Arg [201] : 000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0
Arg [202] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [203] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [204] : 000000000000000000000000944dd1c7ce133b75880cee913d513f8c07312393
Arg [205] : 0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0
Arg [206] : a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f
Arg [207] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [208] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [209] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [210] : 000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de
Arg [211] : 00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba
Arg [212] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [213] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

360:15917:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41936:285:3;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;793:43:2;;;:::i;:::-;;;;;;;:::i;41124:182:3:-;;;;;;:::i;:::-;;:::i;41480:277::-;;;;;;:::i;:::-;;:::i;1321:54:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42976:285:3:-;;;;;;:::i;:::-;;:::i;15372:283:2:-;;;;;;:::i;:::-;;:::i;:::-;;1215:43;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8935:523::-;;;;;;:::i;:::-;;:::i;631:36::-;;;:::i;875:286:1:-;;;:::i;15785:248:2:-;;;;;;:::i;:::-;;:::i;32719:8256:3:-;;;;;;:::i;:::-;;:::i;1218:80:1:-;;;:::i;:::-;;;;;;;:::i;1361:31:3:-;;;:::i;961:43:2:-;;;:::i;42486:299:3:-;;;;;;:::i;:::-;;:::i;7290:1335:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1250:35:3:-;;;:::i;1127:34:2:-;;;:::i;1438:54::-;;;;;;:::i;:::-;;:::i;559:218:1:-;;;;;;:::i;:::-;;:::i;6503:558:2:-;;;;;;:::i;:::-;;:::i;5226:179::-;;;;;;:::i;:::-;;:::i;41936:285:3:-;42013:18;;:::i;:::-;42043:10;42056:30;42075:10;42056:18;:30::i;:::-;42043:43;;-1:-1:-1;;42100:5:3;:17;42096:76;;42140:21;42155:5;42140:14;:21::i;:::-;42133:28;;;;;42096:76;42182:32;;-1:-1:-1;;;42182:32:3;;;;;;;:::i;:::-;;;;;;;;41936:285;;;;:::o;793:43:2:-;;;:::o;41124:182:3:-;41199:18;;:::i;:::-;41236:63;41290:6;41273:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;41263:35;;;;;;41236:26;:63::i;:::-;41229:70;41124:182;-1:-1:-1;;41124:182:3:o;41480:277::-;41553:18;;:::i;:::-;41583:10;41596:26;41613:8;41596:16;:26::i;1321:54:2:-;;;;;;;;;;;;;;;;;;;:::o;42976:285:3:-;43053:18;;:::i;:::-;43083:10;43096:30;43115:10;43096:18;:30::i;15372:283:2:-;1445:9:1;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;15458:18:2::1;::::0;;;:6:::1;:18;::::0;;;;:33;-1:-1:-1;;;15458:33:2;::::1;;;15457:34;15449:64;;;;-1:-1:-1::0;;;15449:64:2::1;;;;;;;:::i;:::-;15523:18;::::0;;;:6:::1;:18;::::0;;;;;:40;;-1:-1:-1;;;;;15523:40:2::1;-1:-1:-1::0;;;15523:40:2::1;::::0;;15578:29;15530:10;;15578:29:::1;::::0;::::1;15617:31;15637:10;15617:19;:31::i;:::-;15372:283:::0;:::o;1215:43::-;;;;;;;;;;;;-1:-1:-1;;;;;1215:43:2;;;-1:-1:-1;;;1215:43:2;;;;;:::o;8935:523::-;9001:26;;:::i;:::-;-1:-1:-1;9030:18:2;;;;:6;:18;;;;;;;;;9001:47;;;;;;;;;-1:-1:-1;;;;;9001:47:2;;;;-1:-1:-1;;;9001:47:2;;;;;;;;;;;;9058:60;;;;-1:-1:-1;;;9058:60:2;;;;;;;:::i;:::-;9128:25;;:::i;:::-;9156:38;9183:10;9156:26;:38::i;:::-;9128:66;;9204:16;9223:40;9256:6;9223:32;:40::i;:::-;9204:59;;-1:-1:-1;;;9281:11:2;:20;9273:55;;;;-1:-1:-1;;;9273:55:2;;;;;;;:::i;:::-;9345:17;;;;;;9338:25;;;;:6;:25;;;;;:54;;-1:-1:-1;;;;;;9338:54:2;-1:-1:-1;;;;;9338:54:2;;;;;9420:17;9407:44;;;;;;9338:54;;9407:44;:::i;:::-;;;;;;;;8935:523;;;;:::o;631:36::-;663:4;631:36;:::o;875:286:1:-;943:16;;-1:-1:-1;;;;;943:16:1;929:10;:30;921:65;;;;-1:-1:-1;;;921:65:1;;;;;;;:::i;:::-;997:16;1016:9;;1047:10;-1:-1:-1;;;;;;1035:22:1;;;;;;;-1:-1:-1;1067:29:1;;;;;;;1112:42;;-1:-1:-1;;;;;1016:9:1;;;;1047:10;;1016:9;;1112:42;;;875:286;:::o;15785:248:2:-;1445:9:1;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;15872:18:2::1;::::0;;;:6:::1;:18;::::0;;;;:33;-1:-1:-1;;;15872:33:2;::::1;;;15864:65;;;;-1:-1:-1::0;;;15864:65:2::1;;;;;;;:::i;:::-;15975:5;15939:18:::0;;;:6:::1;:18;::::0;;;;;:41;;-1:-1:-1;;;;;15939:41:2::1;::::0;;15995:31;15946:10;;15995:31:::1;::::0;::::1;15785:248:::0;:::o;32719:8256:3:-;32772:18;;:::i;:::-;32814:9;32810:1;:13;32802:48;;;;-1:-1:-1;;;32802:48:3;;;;;;;:::i;:::-;32865:6;32861:314;;32880:295;;;;;;;;32901:8;-1:-1:-1;;;;;32880:295:3;;;;;32923:12;-1:-1:-1;;;;;32880:295:3;;;;;32949:12;32880:295;;;;32973:10;32880:295;;;;32998:13;32880:295;;;;;;;;;;;;33025:12;32880:295;;;;33054:15;-1:-1:-1;;;;;32880:295:3;;;;;33081:10;-1:-1:-1;;;;;32880:295:3;;;;;33113:20;32880:295;;;;33154:19;32880:295;;;;;32873:302;;;;32861:314;33189:1;33194;33189:6;33185:314;;;33204:295;;;;;;;;33225:8;-1:-1:-1;;;;;33204:295:3;;;;;33247:12;-1:-1:-1;;;;;33204:295:3;;;;;33273:12;33204:295;;;;33297:10;33204:295;;;;33322:13;33204:295;;;;;;;;;;;;33349:12;33204:295;;;;33378:15;-1:-1:-1;;;;;33204:295:3;;;;;33405:10;-1:-1:-1;;;;;33204:295:3;;;;;33437:20;33204:295;;;;33478:19;33204:295;;;;;33197:302;;;;33185:314;33513:1;33518;33513:6;33509:314;;;33528:295;;;;;;;;33549:8;-1:-1:-1;;;;;33528:295:3;;;;;33571:12;-1:-1:-1;;;;;33528:295:3;;;;;33597:12;33528:295;;;;33621:10;33528:295;;;;33646:13;33528:295;;;;;;;;;;;;33673:12;33528:295;;;;33702:15;-1:-1:-1;;;;;33528:295:3;;;;;33729:10;-1:-1:-1;;;;;33528:295:3;;;;;33761:20;33528:295;;;;33802:19;33528:295;;;;;33521:302;;;;33509:314;33837:1;33842;33837:6;33833:314;;;33852:295;;;;;;;;33873:8;-1:-1:-1;;;;;33852:295:3;;;;;33895:12;-1:-1:-1;;;;;33852:295:3;;;;;33921:12;33852:295;;;;33945:10;33852:295;;;;33970:13;33852:295;;;;;;;;;;;;33997:12;33852:295;;;;34026:15;-1:-1:-1;;;;;33852:295:3;;;;;34053:10;-1:-1:-1;;;;;33852:295:3;;;;;34085:20;33852:295;;;;34126:19;33852:295;;;;;33845:302;;;;33833:314;34161:1;34166;34161:6;34157:314;;;34176:295;;;;;;;;34197:8;-1:-1:-1;;;;;34176:295:3;;;;;34219:12;-1:-1:-1;;;;;34176:295:3;;;;;34245:12;34176:295;;;;34269:10;34176:295;;;;34294:13;34176:295;;;;;;;;;;;;34321:12;34176:295;;;;34350:15;-1:-1:-1;;;;;34176:295:3;;;;;34377:10;-1:-1:-1;;;;;34176:295:3;;;;;34409:20;34176:295;;;;34450:19;34176:295;;;;;34169:302;;;;34157:314;34485:1;34490;34485:6;34481:314;;;34500:295;;;;;;;;34521:8;-1:-1:-1;;;;;34500:295:3;;;;;34543:12;-1:-1:-1;;;;;34500:295:3;;;;;34569:12;34500:295;;;;34593:10;34500:295;;;;34618:13;34500:295;;;;;;;;;;;;34645:12;34500:295;;;;34674:15;-1:-1:-1;;;;;34500:295:3;;;;;34701:10;-1:-1:-1;;;;;34500:295:3;;;;;34733:20;34500:295;;;;34774:19;34500:295;;;;;34493:302;;;;34481:314;34809:1;34814;34809:6;34805:314;;;34824:295;;;;;;;;34845:8;-1:-1:-1;;;;;34824:295:3;;;;;34867:12;-1:-1:-1;;;;;34824:295:3;;;;;34893:12;34824:295;;;;34917:10;34824:295;;;;34942:13;34824:295;;;;;;;;;;;;34969:12;34824:295;;;;34998:15;-1:-1:-1;;;;;34824:295:3;;;;;35025:10;-1:-1:-1;;;;;34824:295:3;;;;;35057:20;34824:295;;;;35098:19;34824:295;;;;;34817:302;;;;34805:314;35133:1;35138;35133:6;35129:314;;;35148:295;;;;;;;;35169:8;-1:-1:-1;;;;;35148:295:3;;;;;35191:12;-1:-1:-1;;;;;35148:295:3;;;;;35217:12;35148:295;;;;35241:10;35148:295;;;;35266:13;35148:295;;;;;;;;;;;;35293:12;35148:295;;;;35322:15;-1:-1:-1;;;;;35148:295:3;;;;;35349:10;-1:-1:-1;;;;;35148:295:3;;;;;35381:20;35148:295;;;;35422:19;35148:295;;;;;35141:302;;;;35129:314;35457:1;35462;35457:6;35453:314;;;35472:295;;;;;;;;35493:8;-1:-1:-1;;;;;35472:295:3;;;;;35515:12;-1:-1:-1;;;;;35472:295:3;;;;;35541:12;35472:295;;;;35565:10;35472:295;;;;35590:13;35472:295;;;;;;;;;;;;35617:12;35472:295;;;;35646:15;-1:-1:-1;;;;;35472:295:3;;;;;35673:10;-1:-1:-1;;;;;35472:295:3;;;;;35705:20;35472:295;;;;35746:19;35472:295;;;;;35465:302;;;;35453:314;35781:1;35786;35781:6;35777:314;;;35796:295;;;;;;;;35817:8;-1:-1:-1;;;;;35796:295:3;;;;;35839:12;-1:-1:-1;;;;;35796:295:3;;;;;35865:12;35796:295;;;;35889:10;35796:295;;;;35914:13;35796:295;;;;;;;;;;;;35941:12;35796:295;;;;35970:15;-1:-1:-1;;;;;35796:295:3;;;;;35997:10;-1:-1:-1;;;;;35796:295:3;;;;;36029:20;35796:295;;;;36070:19;35796:295;;;;;35789:302;;;;35777:314;36106:1;36111:2;36106:7;36102:315;;;36122:295;;;;;;;;36143:8;-1:-1:-1;;;;;36122:295:3;;;;;36165:12;-1:-1:-1;;;;;36122:295:3;;;;;36191:12;36122:295;;;;36215:10;36122:295;;;;36240:13;36122:295;;;;;;;;;;;;36267:12;36122:295;;;;36296:15;-1:-1:-1;;;;;36122:295:3;;;;;36323:10;-1:-1:-1;;;;;36122:295:3;;;;;36355:20;36122:295;;;;36396:19;36122:295;;;;;36115:302;;;;36102:315;36431:1;36436:2;36431:7;36427:315;;;36447:295;;;;;;;;36468:8;-1:-1:-1;;;;;36447:295:3;;;;;36490:12;-1:-1:-1;;;;;36447:295:3;;;;;36516:12;36447:295;;;;36540:10;36447:295;;;;36565:13;36447:295;;;;;;;;;;;;36592:12;36447:295;;;;36621:15;-1:-1:-1;;;;;36447:295:3;;;;;36648:10;-1:-1:-1;;;;;36447:295:3;;;;;36680:20;36447:295;;;;36721:19;36447:295;;;;;36440:302;;;;36427:315;36756:1;36761:2;36756:7;36752:315;;;36772:295;;;;;;;;36793:8;-1:-1:-1;;;;;36772:295:3;;;;;36815:12;-1:-1:-1;;;;;36772:295:3;;;;;36841:12;36772:295;;;;36865:10;36772:295;;;;36890:13;36772:295;;;;;;;;;;;;36917:12;36772:295;;;;36946:15;-1:-1:-1;;;;;36772:295:3;;;;;36973:10;-1:-1:-1;;;;;36772:295:3;;;;;37005:20;36772:295;;;;37046:19;36772:295;;;;;36765:302;;;;36752:315;37081:1;37086:2;37081:7;37077:315;;;37097:295;;;;;;;;37118:8;-1:-1:-1;;;;;37097:295:3;;;;;37140:12;-1:-1:-1;;;;;37097:295:3;;;;;37166:12;37097:295;;;;37190:10;37097:295;;;;37215:13;37097:295;;;;;;;;;;;;37242:12;37097:295;;;;37271:15;-1:-1:-1;;;;;37097:295:3;;;;;37298:10;-1:-1:-1;;;;;37097:295:3;;;;;37330:20;37097:295;;;;37371:19;37097:295;;;;;37090:302;;;;37077:315;37406:1;37411:2;37406:7;37402:315;;;37422:295;;;;;;;;37443:8;-1:-1:-1;;;;;37422:295:3;;;;;37465:12;-1:-1:-1;;;;;37422:295:3;;;;;37491:12;37422:295;;;;37515:10;37422:295;;;;37540:13;37422:295;;;;;;;;;;;;37567:12;37422:295;;;;37596:15;-1:-1:-1;;;;;37422:295:3;;;;;37623:10;-1:-1:-1;;;;;37422:295:3;;;;;37655:20;37422:295;;;;37696:19;37422:295;;;;;37415:302;;;;37402:315;37731:1;37736:2;37731:7;37727:315;;;37747:295;;;;;;;;37768:8;-1:-1:-1;;;;;37747:295:3;;;;;37790:12;-1:-1:-1;;;;;37747:295:3;;;;;37816:12;37747:295;;;;37840:10;37747:295;;;;37865:13;37747:295;;;;;;;;;;;;37892:12;37747:295;;;;37921:15;-1:-1:-1;;;;;37747:295:3;;;;;37948:10;-1:-1:-1;;;;;37747:295:3;;;;;37980:20;37747:295;;;;38021:19;37747:295;;;;;37740:302;;;;37727:315;38056:1;38061:2;38056:7;38052:315;;;38072:295;;;;;;;;38093:8;-1:-1:-1;;;;;38072:295:3;;;;;38115:12;-1:-1:-1;;;;;38072:295:3;;;;;38141:12;38072:295;;;;38165:10;38072:295;;;;38190:13;38072:295;;;;;;;;;;;;38217:12;38072:295;;;;38246:15;-1:-1:-1;;;;;38072:295:3;;;;;38273:10;-1:-1:-1;;;;;38072:295:3;;;;;38305:20;38072:295;;;;38346:19;38072:295;;;;;38065:302;;;;38052:315;38381:1;38386:2;38381:7;38377:315;;;38397:295;;;;;;;;38418:8;-1:-1:-1;;;;;38397:295:3;;;;;38440:12;-1:-1:-1;;;;;38397:295:3;;;;;38466:12;38397:295;;;;38490:10;38397:295;;;;38515:13;38397:295;;;;;;;;;;;;38542:12;38397:295;;;;38571:15;-1:-1:-1;;;;;38397:295:3;;;;;38598:10;-1:-1:-1;;;;;38397:295:3;;;;;38630:20;38397:295;;;;38671:19;38397:295;;;;;38390:302;;;;38377:315;38706:1;38711:2;38706:7;38702:315;;;38722:295;;;;;;;;38743:8;-1:-1:-1;;;;;38722:295:3;;;;;38765:12;-1:-1:-1;;;;;38722:295:3;;;;;38791:12;38722:295;;;;38815:10;38722:295;;;;38840:13;38722:295;;;;;;;;;;;;38867:12;38722:295;;;;38896:15;-1:-1:-1;;;;;38722:295:3;;;;;38923:10;-1:-1:-1;;;;;38722:295:3;;;;;38955:20;38722:295;;;;38996:19;38722:295;;;;;38715:302;;;;38702:315;39031:1;39036:2;39031:7;39027:315;;;39047:295;;;;;;;;39068:8;-1:-1:-1;;;;;39047:295:3;;;;;39090:12;-1:-1:-1;;;;;39047:295:3;;;;;39116:12;39047:295;;;;39140:10;39047:295;;;;39165:13;39047:295;;;;;;;;;;;;39192:12;39047:295;;;;39221:15;-1:-1:-1;;;;;39047:295:3;;;;;39248:10;-1:-1:-1;;;;;39047:295:3;;;;;39280:20;39047:295;;;;39321:19;39047:295;;;;;39040:302;;;;39027:315;39357:1;39362:2;39357:7;39353:315;;;39373:295;;;;;;;;39394:8;-1:-1:-1;;;;;39373:295:3;;;;;39416:12;-1:-1:-1;;;;;39373:295:3;;;;;39442:12;39373:295;;;;39466:10;39373:295;;;;39491:13;39373:295;;;;;;;;;;;;39518:12;39373:295;;;;39547:15;-1:-1:-1;;;;;39373:295:3;;;;;39574:10;-1:-1:-1;;;;;39373:295:3;;;;;39606:20;39373:295;;;;39647:19;39373:295;;;;;39366:302;;;;39353:315;39682:1;39687:2;39682:7;39678:315;;;39698:295;;;;;;;;39719:8;-1:-1:-1;;;;;39698:295:3;;;;;39741:12;-1:-1:-1;;;;;39698:295:3;;;;;39767:12;39698:295;;;;39791:10;39698:295;;;;39816:13;39698:295;;;;;;;;;;;;39843:12;39698:295;;;;39872:15;-1:-1:-1;;;;;39698:295:3;;;;;39899:10;-1:-1:-1;;;;;39698:295:3;;;;;39931:20;39698:295;;;;39972:19;39698:295;;;;;39691:302;;;;39678:315;40007:1;40012:2;40007:7;40003:315;;;40023:295;;;;;;;;40044:8;-1:-1:-1;;;;;40023:295:3;;;;;40066:12;-1:-1:-1;;;;;40023:295:3;;;;;40092:12;40023:295;;;;40116:10;40023:295;;;;40141:13;40023:295;;;;;;;;;;;;40168:12;40023:295;;;;40197:15;-1:-1:-1;;;;;40023:295:3;;;;;40224:10;-1:-1:-1;;;;;40023:295:3;;;;;40256:20;40023:295;;;;40297:19;40023:295;;;;;40016:302;;;;40003:315;40332:1;40337:2;40332:7;40328:315;;;40348:295;;;;;;;;40369:8;-1:-1:-1;;;;;40348:295:3;;;;;40391:12;-1:-1:-1;;;;;40348:295:3;;;;;40417:12;40348:295;;;;40441:10;40348:295;;;;40466:13;40348:295;;;;;;;;;;;;40493:12;40348:295;;;;40522:15;-1:-1:-1;;;;;40348:295:3;;;;;40549:10;-1:-1:-1;;;;;40348:295:3;;;;;40581:20;40348:295;;;;40622:19;40348:295;;;;;40341:302;;;;40328:315;40657:1;40662:2;40657:7;40653:315;;;40673:295;;;;;;;;40694:8;-1:-1:-1;;;;;40673:295:3;;;;;40716:12;-1:-1:-1;;;;;40673:295:3;;;;;40742:12;40673:295;;;;40766:10;40673:295;;;;40791:13;40673:295;;;;;;;;;;;;40818:12;40673:295;;;;40847:15;-1:-1:-1;;;;;40673:295:3;;;;;40874:10;-1:-1:-1;;;;;40673:295:3;;;;;40906:20;40673:295;;;;40947:19;40673:295;;;;;40666:302;;;;1218:80:1;1256:7;1282:9;-1:-1:-1;;;;;1282:9:1;1218:80;:::o;1361:31:3:-;;;:::o;961:43:2:-;;;:::o;42486:299:3:-;42555:18;;:::i;:::-;42585:10;42598:22;42613:6;42598:14;:22::i;:::-;42585:35;;-1:-1:-1;;42634:5:3;:17;42630:76;;42674:21;42689:5;42674:14;:21::i;42630:76::-;42723:55;42757:6;-1:-1:-1;;;;;42750:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;42723:55::-;42716:62;42486:299;-1:-1:-1;;;42486:299:3:o;7290:1335:2:-;7482:10;7696:25;;:::i;:::-;7724:36;7749:10;7724:24;:36::i;:::-;7696:64;;7770:21;7794:43;7815:6;7823:13;7794:20;:43::i;:::-;7770:67;;7847:19;7869:40;7902:6;7869:32;:40::i;:::-;7847:62;;7920:26;;:::i;:::-;-1:-1:-1;7956:17:2;;;;;7949:25;;;;:6;:25;;;;;;;;7920:54;;;;;;;;;-1:-1:-1;;;;;7920:54:2;;;;-1:-1:-1;;;7920:54:2;;;;;;;;;;;;;;7984:635;;-1:-1:-1;;;8036:11:2;:20;8028:55;;;;-1:-1:-1;;;8028:55:2;;;;;;;:::i;:::-;8104:17;;;;;;8097:25;;;;:6;:25;;;;;:54;;-1:-1:-1;;;;;;8097:54:2;-1:-1:-1;;;;;8097:54:2;;;;;8183:17;8170:44;;;;;;8097:54;;8170:44;:::i;:::-;;;;;;;;7984:635;;;8235:42;8250:13;8265:11;8235:14;:42::i;:::-;8231:388;;;-1:-1:-1;;;8301:13:2;:22;8293:59;;;;-1:-1:-1;;;8293:59:2;;;;;;;:::i;:::-;8373:17;;;;;;8366:25;;;;:6;:25;;;;;:56;;-1:-1:-1;;;;;;8366:56:2;-1:-1:-1;;;;;8366:56:2;;;;;8454:17;8441:46;;;;;;8366:56;;8441:46;:::i;:::-;;;;;;;;8509:4;8501:12;;8231:388;;;8562:6;:17;;;8549:59;8581:13;8596:11;8549:59;;;;;;;:::i;:::-;;;;;;;;8231:388;7290:1335;;;;;;;;;;:::o;1250:35:3:-;1283:2;1250:35;:::o;1127:34:2:-;;;:::o;1438:54::-;;;;;;;;;;;;;;;;;;;:::o;559:218:1:-;1445:9;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;637:16:1;::::1;643:10;637:16;;629:52;;;;-1:-1:-1::0;;;629:52:1::1;;;;;;;:::i;:::-;692:16;:21:::0;;-1:-1:-1;;;;;;692:21:1::1;-1:-1:-1::0;;;;;692:21:1;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;756:9:1;;729:41:::1;::::0;692:21;;756:9:::1;::::0;729:41:::1;::::0;-1:-1:-1;729:41:1::1;559:218:::0;:::o;6503:558:2:-;6570:4;6586:25;;:::i;:::-;6614:30;6637:6;6614:22;:30::i;:::-;6586:58;;7039:6;:15;;;7004:32;7008:4;7014:21;7028:6;7014:13;:21::i;:::-;7004:3;:32::i;:::-;:50;;;;;;;6503:558;-1:-1:-1;;;6503:558:2:o;5226:179::-;5286:4;5302:25;;:::i;:::-;5330:30;5353:6;5330:22;:30::i;:::-;5302:58;;5377:21;5391:6;5377:13;:21::i;1702:1040:4:-;1786:21;1809;1832;1882:23;:21;:23::i;:::-;1865:40;;1949:4;-1:-1:-1;;;;;1934:41:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1915:62;;2021:4;-1:-1:-1;;;;;2006:41:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1987:62;;2161:16;2179;2197:25;2241:4;-1:-1:-1;;;;;2226:32:4;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2160:100;;;;;;2296:14;2274:36;;:18;:36;;;2270:466;;2394:35;;;2537:62;;;2542:39;2562:8;2572;2542:19;:39::i;:::-;:42;-1:-1:-1;;;;;2537:48:4;:62;2517:82;;;;;2663:62;;;2668:39;2688:8;2698;2668:19;:39::i;:::-;:42;-1:-1:-1;;;;;2663:48:4;:62;2643:82;;;;;-1:-1:-1;2270:466:4;1702:1040;;;;;;;;:::o;518:236::-;599:16;;:::i;:::-;649:1;635:11;-1:-1:-1;;;;;635:15:4;;627:51;;;;-1:-1:-1;;;627:51:4;;;;;;;:::i;:::-;695:52;;;;;;;;;;-1:-1:-1;;;;;705:41:4;;-1:-1:-1;;;728:3:4;706:25;;;;705:41;;;;;;-1:-1:-1;;;;;695:52:4;;;;688:59;;518:236;;;;:::o;31152:1375:3:-;31223:4;31257:12;31243:10;:26;31239:40;;;-1:-1:-1;31278:1:3;31271:8;;31239:40;31307:12;31293:10;:26;31289:40;;;-1:-1:-1;31328:1:3;31321:8;;31289:40;31357:12;31343:10;:26;31339:40;;;-1:-1:-1;31378:1:3;31371:8;;31339:40;31407:12;31393:10;:26;31389:40;;;-1:-1:-1;31428:1:3;31421:8;;31389:40;31457:12;31443:10;:26;31439:40;;;-1:-1:-1;31478:1:3;31471:8;;31439:40;31507:12;31493:10;:26;31489:40;;;-1:-1:-1;31528:1:3;31521:8;;31489:40;31557:12;31543:10;:26;31539:40;;;-1:-1:-1;31578:1:3;31571:8;;31539:40;31607:12;31593:10;:26;31589:40;;;-1:-1:-1;31628:1:3;31621:8;;31589:40;31657:12;31643:10;:26;31639:40;;;-1:-1:-1;31678:1:3;31671:8;;31639:40;31707:12;31693:10;:26;31689:40;;;-1:-1:-1;31728:1:3;31721:8;;31689:40;31757:12;31743:10;:26;31739:41;;;-1:-1:-1;31778:2:3;31771:9;;31739:41;31808:12;31794:10;:26;31790:41;;;-1:-1:-1;31829:2:3;31822:9;;31790:41;31859:12;31845:10;:26;31841:41;;;-1:-1:-1;31880:2:3;31873:9;;31841:41;31910:12;31896:10;:26;31892:41;;;-1:-1:-1;31931:2:3;31924:9;;31892:41;31961:12;31947:10;:26;31943:41;;;-1:-1:-1;31982:2:3;31975:9;;31943:41;32012:12;31998:10;:26;31994:41;;;-1:-1:-1;32033:2:3;32026:9;;31994:41;32063:12;32049:10;:26;32045:41;;;-1:-1:-1;32084:2:3;32077:9;;32045:41;32114:12;32100:10;:26;32096:41;;;-1:-1:-1;32135:2:3;32128:9;;32096:41;32165:12;32151:10;:26;32147:41;;;-1:-1:-1;32186:2:3;32179:9;;32147:41;32216:12;32202:10;:26;32198:41;;;-1:-1:-1;32237:2:3;32230:9;;32198:41;32267:12;32253:10;:26;32249:41;;;-1:-1:-1;32288:2:3;32281:9;;32249:41;32318:12;32304:10;:26;32300:41;;;-1:-1:-1;32339:2:3;32332:9;;32300:41;32369:12;32355:10;:26;32351:41;;;-1:-1:-1;32390:2:3;32383:9;;32351:41;32420:12;32406:10;:26;32402:41;;;-1:-1:-1;32441:2:3;32434:9;;32402:41;32471:12;32457:10;:26;32453:41;;;-1:-1:-1;32492:2:3;32485:9;;32453:41;-1:-1:-1;;;31152:1375:3;;;:::o;27316:1276::-;27382:4;27414:10;-1:-1:-1;;;;;27402:22:3;:8;-1:-1:-1;;;;;27402:22:3;;27398:36;;;-1:-1:-1;27433:1:3;27426:8;;27398:36;27460:10;-1:-1:-1;;;;;27448:22:3;:8;-1:-1:-1;;;;;27448:22:3;;27444:36;;;-1:-1:-1;27479:1:3;27472:8;;27444:36;27506:10;-1:-1:-1;;;;;27494:22:3;:8;-1:-1:-1;;;;;27494:22:3;;27490:36;;;-1:-1:-1;27525:1:3;27518:8;;27490:36;27552:10;-1:-1:-1;;;;;27540:22:3;:8;-1:-1:-1;;;;;27540:22:3;;27536:36;;;-1:-1:-1;27571:1:3;27564:8;;27536:36;27598:10;-1:-1:-1;;;;;27586:22:3;:8;-1:-1:-1;;;;;27586:22:3;;27582:36;;;-1:-1:-1;27617:1:3;27610:8;;27582:36;27644:10;-1:-1:-1;;;;;27632:22:3;:8;-1:-1:-1;;;;;27632:22:3;;27628:36;;;-1:-1:-1;27663:1:3;27656:8;;27628:36;27690:10;-1:-1:-1;;;;;27678:22:3;:8;-1:-1:-1;;;;;27678:22:3;;27674:36;;;-1:-1:-1;27709:1:3;27702:8;;27674:36;27736:10;-1:-1:-1;;;;;27724:22:3;:8;-1:-1:-1;;;;;27724:22:3;;27720:36;;;-1:-1:-1;27755:1:3;27748:8;;27720:36;27782:10;-1:-1:-1;;;;;27770:22:3;:8;-1:-1:-1;;;;;27770:22:3;;27766:36;;;-1:-1:-1;27801:1:3;27794:8;;27766:36;27828:10;-1:-1:-1;;;;;27816:22:3;:8;-1:-1:-1;;;;;27816:22:3;;27812:36;;;-1:-1:-1;27847:1:3;27840:8;;27812:36;27874:10;-1:-1:-1;;;;;27862:22:3;:8;-1:-1:-1;;;;;27862:22:3;;27858:37;;;-1:-1:-1;27893:2:3;27886:9;;27858:37;27921:10;-1:-1:-1;;;;;27909:22:3;:8;-1:-1:-1;;;;;27909:22:3;;27905:37;;;-1:-1:-1;27940:2:3;27933:9;;27905:37;27968:10;-1:-1:-1;;;;;27956:22:3;:8;-1:-1:-1;;;;;27956:22:3;;27952:37;;;-1:-1:-1;27987:2:3;27980:9;;27952:37;28015:10;-1:-1:-1;;;;;28003:22:3;:8;-1:-1:-1;;;;;28003:22:3;;27999:37;;;-1:-1:-1;28034:2:3;28027:9;;27999:37;28062:10;-1:-1:-1;;;;;28050:22:3;:8;-1:-1:-1;;;;;28050:22:3;;28046:37;;;-1:-1:-1;28081:2:3;28074:9;;28046:37;28109:10;-1:-1:-1;;;;;28097:22:3;:8;-1:-1:-1;;;;;28097:22:3;;28093:37;;;-1:-1:-1;28128:2:3;28121:9;;28093:37;28156:10;-1:-1:-1;;;;;28144:22:3;:8;-1:-1:-1;;;;;28144:22:3;;28140:37;;;-1:-1:-1;28175:2:3;28168:9;;28140:37;28203:10;-1:-1:-1;;;;;28191:22:3;:8;-1:-1:-1;;;;;28191:22:3;;28187:37;;;-1:-1:-1;28222:2:3;28215:9;;28187:37;28250:10;-1:-1:-1;;;;;28238:22:3;:8;-1:-1:-1;;;;;28238:22:3;;28234:37;;;-1:-1:-1;28269:2:3;28262:9;;28234:37;28297:10;-1:-1:-1;;;;;28285:22:3;:8;-1:-1:-1;;;;;28285:22:3;;28281:37;;;-1:-1:-1;28316:2:3;28309:9;;28281:37;28344:10;-1:-1:-1;;;;;28332:22:3;:8;-1:-1:-1;;;;;28332:22:3;;28328:37;;;-1:-1:-1;28363:2:3;28356:9;;28328:37;28391:10;-1:-1:-1;;;;;28379:22:3;:8;-1:-1:-1;;;;;28379:22:3;;28375:37;;;-1:-1:-1;28410:2:3;28403:9;;28375:37;28438:10;-1:-1:-1;;;;;28426:22:3;:8;-1:-1:-1;;;;;28426:22:3;;28422:37;;;-1:-1:-1;28457:2:3;28450:9;;28422:37;28485:10;-1:-1:-1;;;;;28473:22:3;:8;-1:-1:-1;;;;;28473:22:3;;28469:37;;;-1:-1:-1;28504:2:3;28497:9;;28469:37;28532:10;-1:-1:-1;;;;;28520:22:3;:8;-1:-1:-1;;;;;28520:22:3;;28516:37;;;-1:-1:-1;28551:2:3;28544:9;;29771:1375;29842:4;29876:12;-1:-1:-1;;;;;29862:26:3;:10;-1:-1:-1;;;;;29862:26:3;;29858:40;;;-1:-1:-1;29897:1:3;29890:8;;29858:40;29926:12;-1:-1:-1;;;;;29912:26:3;:10;-1:-1:-1;;;;;29912:26:3;;29908:40;;;-1:-1:-1;29947:1:3;29940:8;;29908:40;29976:12;-1:-1:-1;;;;;29962:26:3;:10;-1:-1:-1;;;;;29962:26:3;;29958:40;;;-1:-1:-1;29997:1:3;29990:8;;29958:40;30026:12;-1:-1:-1;;;;;30012:26:3;:10;-1:-1:-1;;;;;30012:26:3;;30008:40;;;-1:-1:-1;30047:1:3;30040:8;;30008:40;30076:12;-1:-1:-1;;;;;30062:26:3;:10;-1:-1:-1;;;;;30062:26:3;;30058:40;;;-1:-1:-1;30097:1:3;30090:8;;30058:40;30126:12;-1:-1:-1;;;;;30112:26:3;:10;-1:-1:-1;;;;;30112:26:3;;30108:40;;;-1:-1:-1;30147:1:3;30140:8;;30108:40;30176:12;-1:-1:-1;;;;;30162:26:3;:10;-1:-1:-1;;;;;30162:26:3;;30158:40;;;-1:-1:-1;30197:1:3;30190:8;;30158:40;30226:12;-1:-1:-1;;;;;30212:26:3;:10;-1:-1:-1;;;;;30212:26:3;;30208:40;;;-1:-1:-1;30247:1:3;30240:8;;30208:40;30276:12;-1:-1:-1;;;;;30262:26:3;:10;-1:-1:-1;;;;;30262:26:3;;30258:40;;;-1:-1:-1;30297:1:3;30290:8;;30258:40;30326:12;-1:-1:-1;;;;;30312:26:3;:10;-1:-1:-1;;;;;30312:26:3;;30308:40;;;-1:-1:-1;30347:1:3;30340:8;;30308:40;30376:12;-1:-1:-1;;;;;30362:26:3;:10;-1:-1:-1;;;;;30362:26:3;;30358:41;;;-1:-1:-1;30397:2:3;30390:9;;30358:41;30427:12;-1:-1:-1;;;;;30413:26:3;:10;-1:-1:-1;;;;;30413:26:3;;30409:41;;;-1:-1:-1;30448:2:3;30441:9;;30409:41;30478:12;-1:-1:-1;;;;;30464:26:3;:10;-1:-1:-1;;;;;30464:26:3;;30460:41;;;-1:-1:-1;30499:2:3;30492:9;;30460:41;30529:12;-1:-1:-1;;;;;30515:26:3;:10;-1:-1:-1;;;;;30515:26:3;;30511:41;;;-1:-1:-1;30550:2:3;30543:9;;30511:41;30580:12;-1:-1:-1;;;;;30566:26:3;:10;-1:-1:-1;;;;;30566:26:3;;30562:41;;;-1:-1:-1;30601:2:3;30594:9;;30562:41;30631:12;-1:-1:-1;;;;;30617:26:3;:10;-1:-1:-1;;;;;30617:26:3;;30613:41;;;-1:-1:-1;30652:2:3;30645:9;;30613:41;30682:12;-1:-1:-1;;;;;30668:26:3;:10;-1:-1:-1;;;;;30668:26:3;;30664:41;;;-1:-1:-1;30703:2:3;30696:9;;30664:41;30733:12;-1:-1:-1;;;;;30719:26:3;:10;-1:-1:-1;;;;;30719:26:3;;30715:41;;;-1:-1:-1;30754:2:3;30747:9;;30715:41;30784:12;-1:-1:-1;;;;;30770:26:3;:10;-1:-1:-1;;;;;30770:26:3;;30766:41;;;-1:-1:-1;30805:2:3;30798:9;;30766:41;30835:12;-1:-1:-1;;;;;30821:26:3;:10;-1:-1:-1;;;;;30821:26:3;;30817:41;;;-1:-1:-1;30856:2:3;30849:9;;30817:41;30886:12;-1:-1:-1;;;;;30872:26:3;:10;-1:-1:-1;;;;;30872:26:3;;30868:41;;;-1:-1:-1;30907:2:3;30900:9;;30868:41;30937:12;-1:-1:-1;;;;;30923:26:3;:10;-1:-1:-1;;;;;30923:26:3;;30919:41;;;-1:-1:-1;30958:2:3;30951:9;;30919:41;30988:12;-1:-1:-1;;;;;30974:26:3;:10;-1:-1:-1;;;;;30974:26:3;;30970:41;;;-1:-1:-1;31009:2:3;31002:9;;30970:41;31039:12;-1:-1:-1;;;;;31025:26:3;:10;-1:-1:-1;;;;;31025:26:3;;31021:41;;;-1:-1:-1;31060:2:3;31053:9;;31021:41;31090:12;-1:-1:-1;;;;;31076:26:3;:10;-1:-1:-1;;;;;31076:26:3;;31072:41;;;-1:-1:-1;31111:2:3;31104:9;;9624:443:2;9711:16;9739:13;9755:21;:19;:21::i;:::-;9739:37;-1:-1:-1;9816:20:2;9794:6;:18;;;:42;;;;;;;;;9786:86;;;;-1:-1:-1;;;9786:86:2;;;;;;;:::i;:::-;2479:23;;;;;;;:::i;:::-;;;;;;;;;;;;;2469:34;;;;;;9886:6;:17;;;:28;9882:179;;;9944:8;9930:22;;9882:179;;;9997:53;10014:6;:17;;;10033:6;10041:8;9997:16;:53::i;9882:179::-;9624:443;;;;:::o;28598:1167:3:-;28661:4;28691:8;-1:-1:-1;;;;;28681:18:3;:6;-1:-1:-1;;;;;28681:18:3;;28677:32;;;-1:-1:-1;28708:1:3;28701:8;;28677:32;28733:8;-1:-1:-1;;;;;28723:18:3;:6;-1:-1:-1;;;;;28723:18:3;;28719:32;;;-1:-1:-1;28750:1:3;28743:8;;28719:32;28775:8;-1:-1:-1;;;;;28765:18:3;:6;-1:-1:-1;;;;;28765:18:3;;28761:32;;;-1:-1:-1;28792:1:3;28785:8;;28761:32;28817:8;-1:-1:-1;;;;;28807:18:3;:6;-1:-1:-1;;;;;28807:18:3;;28803:32;;;-1:-1:-1;28834:1:3;28827:8;;28803:32;28859:8;-1:-1:-1;;;;;28849:18:3;:6;-1:-1:-1;;;;;28849:18:3;;28845:32;;;-1:-1:-1;28876:1:3;28869:8;;28845:32;28901:8;-1:-1:-1;;;;;28891:18:3;:6;-1:-1:-1;;;;;28891:18:3;;28887:32;;;-1:-1:-1;28918:1:3;28911:8;;28887:32;28943:8;-1:-1:-1;;;;;28933:18:3;:6;-1:-1:-1;;;;;28933:18:3;;28929:32;;;-1:-1:-1;28960:1:3;28953:8;;28929:32;28985:8;-1:-1:-1;;;;;28975:18:3;:6;-1:-1:-1;;;;;28975:18:3;;28971:32;;;-1:-1:-1;29002:1:3;28995:8;;28971:32;29027:8;-1:-1:-1;;;;;29017:18:3;:6;-1:-1:-1;;;;;29017:18:3;;29013:32;;;-1:-1:-1;29044:1:3;29037:8;;29013:32;29069:8;-1:-1:-1;;;;;29059:18:3;:6;-1:-1:-1;;;;;29059:18:3;;29055:32;;;-1:-1:-1;29086:1:3;29079:8;;29055:32;29111:8;-1:-1:-1;;;;;29101:18:3;:6;-1:-1:-1;;;;;29101:18:3;;29097:33;;;-1:-1:-1;29128:2:3;29121:9;;29097:33;29154:8;-1:-1:-1;;;;;29144:18:3;:6;-1:-1:-1;;;;;29144:18:3;;29140:33;;;-1:-1:-1;29171:2:3;29164:9;;29140:33;29197:8;-1:-1:-1;;;;;29187:18:3;:6;-1:-1:-1;;;;;29187:18:3;;29183:33;;;-1:-1:-1;29214:2:3;29207:9;;29183:33;29240:8;-1:-1:-1;;;;;29230:18:3;:6;-1:-1:-1;;;;;29230:18:3;;29226:33;;;-1:-1:-1;29257:2:3;29250:9;;29226:33;29283:8;-1:-1:-1;;;;;29273:18:3;:6;-1:-1:-1;;;;;29273:18:3;;29269:33;;;-1:-1:-1;29300:2:3;29293:9;;29269:33;29326:8;-1:-1:-1;;;;;29316:18:3;:6;-1:-1:-1;;;;;29316:18:3;;29312:33;;;-1:-1:-1;29343:2:3;29336:9;;29312:33;29369:8;-1:-1:-1;;;;;29359:18:3;:6;-1:-1:-1;;;;;29359:18:3;;29355:33;;;-1:-1:-1;29386:2:3;29379:9;;29355:33;29412:8;-1:-1:-1;;;;;29402:18:3;:6;-1:-1:-1;;;;;29402:18:3;;29398:33;;;-1:-1:-1;29429:2:3;29422:9;;29398:33;29455:8;-1:-1:-1;;;;;29445:18:3;:6;-1:-1:-1;;;;;29445:18:3;;29441:33;;;-1:-1:-1;29472:2:3;29465:9;;29441:33;29498:8;-1:-1:-1;;;;;29488:18:3;:6;-1:-1:-1;;;;;29488:18:3;;29484:33;;;-1:-1:-1;29515:2:3;29508:9;;29484:33;29541:8;-1:-1:-1;;;;;29531:18:3;:6;-1:-1:-1;;;;;29531:18:3;;29527:33;;;-1:-1:-1;29558:2:3;29551:9;;29527:33;29584:8;-1:-1:-1;;;;;29574:18:3;:6;-1:-1:-1;;;;;29574:18:3;;29570:33;;;-1:-1:-1;29601:2:3;29594:9;;29570:33;29627:8;-1:-1:-1;;;;;29617:18:3;:6;-1:-1:-1;;;;;29617:18:3;;29613:33;;;-1:-1:-1;29644:2:3;29637:9;;29613:33;29670:8;-1:-1:-1;;;;;29660:18:3;:6;-1:-1:-1;;;;;29660:18:3;;29656:33;;;-1:-1:-1;29687:2:3;29680:9;;29656:33;29713:8;-1:-1:-1;;;;;29703:18:3;:6;-1:-1:-1;;;;;29703:18:3;;29699:33;;;-1:-1:-1;29730:2:3;29723:9;;10296:377:2;10398:7;10442:1;10425:13;:18;;10417:64;;;;-1:-1:-1;;;10417:64:2;;;;;;;:::i;:::-;10491:21;10523:13;10491:46;;10547:22;10620:6;:15;;;10572:45;10576:13;10591:6;:25;;;10572:3;:45::i;:::-;:63;;;;;;;10296:377;-1:-1:-1;;;;;10296:377:2:o;10680:333::-;10765:4;10785:17;;10781:204;;10818:16;10864:13;10837:24;10841:11;10854:6;10837:3;:24::i;:::-;:40;;;;;;10818:59;;10913:21;10898:11;:36;;:76;;;;;10953:21;10938:11;:36;;10898:76;10891:83;;;;;10781:204;-1:-1:-1;11001:5:2;10680:333;;;;:::o;5411:735::-;5484:4;5526:20;5504:6;:18;;;:42;;;;;;;;;5500:86;;;-1:-1:-1;5562:17:2;;;;;5555:25;;;;:6;:25;;;:31;-1:-1:-1;;;;;5555:31:2;5548:38;;5500:86;5718:21;5696:6;:18;;;:43;;;;;;;;;5692:73;;;-1:-1:-1;5748:17:2;;;;5741:24;;5692:73;5801:21;5779:6;:18;;;:43;;;;;;;;;5775:365;;;5838:14;5855:6;:15;2479:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;2479:23:2;;;;;;;;;2469:34;;2479:23;2469:34;;;;5855:15;;;;;;;;;;-1:-1:-1;5855:15:2;:21;-1:-1:-1;;;;;5855:21:2;;-1:-1:-1;5898:13:2;5890:70;;;;-1:-1:-1;;;5890:70:2;;;;;;;:::i;:::-;558:4;6082:33;6086:9;6097:6;:17;;;6082:3;:33::i;:::-;:47;;;;;;6075:54;;;;;16082:193;16134:4;16154:6;16150:20;;-1:-1:-1;16169:1:2;16162:8;;16150:20;16189:5;;;16193:1;16189;:5;:1;16212:5;;;;;:10;16204:46;;;;-1:-1:-1;;;16204:46:2;;;;;;;:::i;1478:121:4:-;1566:25;:15;:25;;1478:121::o;11699:154:2:-;11748:4;11771:75;2479:23;;;;;;;:::i;:::-;;;;;;;;;;;;;2469:34;;;;;;11797:35;2479:23;;;;;;;:::i;11797:35::-;558:4;11771:16;:75::i;:::-;11764:82;;11699:154;:::o;12088:1926::-;12210:4;12227:23;12252;12277:17;12298:24;12315:6;12298:16;:24::i;:::-;12226:96;;;;;;12424:12;12406:15;:30;12398:69;;;;-1:-1:-1;;;12398:69:2;;;;;;;:::i;:::-;12496:15;:30;;;12692:40;;:::i;:::-;12735:86;;;;;;;;12808:11;12786:18;12765;:39;12764:55;;;;;;-1:-1:-1;;;;;12735:86:2;;;;12692:129;;12831:28;12862:30;:12;:28;:30::i;:::-;12831:61;;12902:26;12931:46;12935:23;12960:16;12931:3;:46::i;:::-;12902:75;;12987:16;663:4;558;13820:43;13824:21;13847:6;:15;;;13820:3;:43::i;:::-;:57;;;;;;:68;;;;;;13806:82;;13923:10;13904:74;13935:11;13948:12;13962:15;13904:74;;;;;;;;:::i;:::-;;;;;;;;13996:11;12088:1926;-1:-1:-1;;;;;;;;;;;12088:1926:2:o;14196:1028::-;14267:4;14273;14279;14295:18;14316:6;:17;;;14295:38;;14343:20;14366:30;14389:6;14366:22;:30::i;:::-;14343:53;;14407:33;;:::i;:::-;-1:-1:-1;14443:27:2;;;;:15;:27;;;;;;;;;14407:63;;;;;;;;;;;;;;;;;;;;;;;;;14601:15;:42;14672:12;14657:27;;14653:459;;14740:24;;;14700:27;;;:15;:27;;;;;;;;:64;;;14812:18;;;;;14778:31;;;;:52;14845:15;:27;;;;;;;14885:15;14845:55;;;14914:31;;:49;;;15003:17;;;;15022:24;;15065:18;;14982:119;;15003:17;;14982:119;;;;15022:24;14948:15;;14982:119;:::i;:::-;;;;;;;;14653:459;-1:-1:-1;;15146:27:2;;;;:15;:27;;;;;;:31;;;;15179:37;;15146:27;;:31;;-1:-1:-1;15179:37:2;;-1:-1:-1;14196:1028:2;-1:-1:-1;;14196:1028:2:o;828:376:4:-;1170:7;1181:16;-1:-1:-1;;;;;1165:13:4;;;:32;;828:376::o;11109:364:2:-;11191:4;11208:21;11231;11257:68;11304:6;:20;;;11257:46;:68::i;:::-;11207:118;;;;;11339:6;:24;;;11335:132;;;11386:16;-1:-1:-1;11379:23:2;;-1:-1:-1;11379:23:2;11335:132;-1:-1:-1;11440:16:2;-1:-1:-1;11433:23:2;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;1564:241::-;;1668:2;1656:9;1647:7;1643:23;1639:32;1636:2;;;-1:-1;;1674:12;1636:2;85:6;72:20;97:33;124:5;97:33;:::i;1812:263::-;;1927:2;1915:9;1906:7;1902:23;1898:32;1895:2;;;-1:-1;;1933:12;1895:2;226:6;220:13;238:33;265:5;238:33;:::i;2082:241::-;;2186:2;2174:9;2165:7;2161:23;2157:32;2154:2;;;-1:-1;;2192:12;2154:2;-1:-1;350:20;;2148:175;-1:-1;2148:175::o;2330:347::-;;2444:2;2432:9;2423:7;2419:23;2415:32;2412:2;;;-1:-1;;2450:12;2412:2;2508:17;2495:31;2546:18;;2538:6;2535:30;2532:2;;;-1:-1;;2568:12;2532:2;2644:6;2633:9;2629:22;;;658:3;651:4;643:6;639:17;635:27;625:2;;-1:-1;;666:12;625:2;713:6;700:20;2546:18;23215:6;23212:30;23209:2;;;-1:-1;;23245:12;23209:2;22878;22872:9;23318;23299:17;;-1:-1;;23295:33;22904:17;;2444:2;22904:17;22964:34;;;23000:22;;;22961:62;22958:2;;;-1:-1;;23026:12;22958:2;22878;23045:22;806:21;;;906:16;;;2444:2;906:16;903:25;-1:-1;900:2;;;-1:-1;;931:12;900:2;951:41;985:6;2444:2;882:5;878:16;2444:2;848:6;844:17;951:41;:::i;:::-;2588:73;2406:271;-1:-1;;;;;;2406:271::o;2684:533::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;-1:-1;;2838:12;2800:2;1090:6;1084:13;1102:33;1129:5;1102:33;:::i;:::-;3001:2;3051:22;;1084:13;2890:74;;-1:-1;1102:33;1084:13;1102:33;:::i;:::-;3120:2;3169:22;;1502:13;3009:74;;-1:-1;24900:10;24889:22;;26289:34;;26279:2;;-1:-1;;26327:12;26279:2;3128:73;;;;2794:423;;;;;:::o;3472:263::-;;3587:2;3575:9;3566:7;3562:23;3558:32;3555:2;;;-1:-1;;3593:12;3555:2;-1:-1;1362:13;;3549:186;-1:-1;3549:186::o;3742:613::-;;;;;3895:3;3883:9;3874:7;3870:23;3866:33;3863:2;;;-1:-1;;3902:12;3863:2;-1:-1;;1214:20;;;4054:2;4092:22;;486:20;;-1:-1;4161:2;4200:22;;1214:20;;4269:2;4307:22;486:20;;-1:-1;3857:498;-1:-1;3857:498::o;4362:103::-;-1:-1;;;;;24533:54;4423:37;;4417:48::o;4592:94::-;24027:13;24020:21;4647:34;;4641:45::o;4914:144::-;25584:1;25577:5;25574:12;25564:2;;25590:9;25564:2;4989:64;;4983:75::o;13098:275::-;;5228:5;23496:12;-1:-1;25295:101;25309:6;25306:1;25303:13;25295:101;;;5373:4;25376:11;;;;;25370:18;25357:11;;;25350:39;25324:10;25295:101;;;25411:6;25408:1;25405:13;25402:2;;;-1:-1;25467:6;25462:3;25458:16;25451:27;25402:2;-1:-1;5404:16;;;;;13234:139;-1:-1;;13234:139::o;13380:381::-;-1:-1;;;9080:26;;9065:1;9125:11;;13569:192::o;13768:222::-;-1:-1;;;;;24533:54;;;;4423:37;;13895:2;13880:18;;13866:124::o;13997:210::-;24027:13;;24020:21;4647:34;;14118:2;14103:18;;14089:118::o;14214:416::-;14414:2;14428:47;;;5657:2;14399:18;;;23641:19;-1:-1;;;23681:14;;;5673:45;5737:12;;;14385:245::o;14637:416::-;14837:2;14851:47;;;5988:2;14822:18;;;23641:19;6024:34;23681:14;;;6004:55;-1:-1;;;6079:12;;;6072:25;6116:12;;;14808:245::o;15060:416::-;15260:2;15274:47;;;6367:2;15245:18;;;23641:19;-1:-1;;;23681:14;;;6383:45;6447:12;;;15231:245::o;15483:416::-;15683:2;15697:47;;;6698:2;15668:18;;;23641:19;6734:25;23681:14;;;6714:46;6779:12;;;15654:245::o;15906:416::-;16106:2;16120:47;;;7030:2;16091:18;;;23641:19;-1:-1;;;23681:14;;;7046:45;7110:12;;;16077:245::o;16329:416::-;16529:2;16543:47;;;7361:2;16514:18;;;23641:19;7397:25;23681:14;;;7377:46;7442:12;;;16500:245::o;16752:416::-;16952:2;16966:47;;;7693:2;16937:18;;;23641:19;7729:26;23681:14;;;7709:47;7775:12;;;16923:245::o;17175:416::-;17375:2;17389:47;;;8026:2;17360:18;;;23641:19;8062:33;23681:14;;;8042:54;8115:12;;;17346:245::o;17598:416::-;17798:2;17812:47;;;8366:2;17783:18;;;23641:19;8402:28;23681:14;;;8382:49;8450:12;;;17769:245::o;18021:416::-;18221:2;18235:47;;;8701:2;18206:18;;;23641:19;-1:-1;;;23681:14;;;8717:42;8778:12;;;18192:245::o;18444:416::-;18644:2;18658:47;;;9375:2;18629:18;;;23641:19;9411:34;23681:14;;;9391:55;-1:-1;;;9466:12;;;9459:36;9514:12;;;18615:245::o;18867:416::-;19067:2;19081:47;;;9765:2;19052:18;;;23641:19;-1:-1;;;23681:14;;;9781:40;9840:12;;;19038:245::o;19290:416::-;19490:2;19504:47;;;10091:2;19475:18;;;23641:19;10127:25;23681:14;;;10107:46;10172:12;;;19461:245::o;19713:416::-;19913:2;19927:47;;;10423:2;19898:18;;;23641:19;-1:-1;;;23681:14;;;10439:45;10503:12;;;19884:245::o;20136:416::-;20336:2;20350:47;;;10754:2;20321:18;;;23641:19;10790:25;23681:14;;;10770:46;10835:12;;;20307:245::o;20559:339::-;;20744:3;20733:9;20729:19;20721:27;;11186:63;11234:14;11163:16;11157:23;11186:63;:::i;:::-;11334:4;11327:5;11323:16;11317:23;11346:63;11334:4;11398:3;11394:14;11380:12;11346:63;:::i;:::-;;11494:4;11487:5;11483:16;11477:23;11494:4;11558:3;11554:14;4865:37;11652:4;11645:5;11641:16;11635:23;11652:4;11716:3;11712:14;4865:37;11813:4;11806:5;11802:16;11796:23;11825:77;11813:4;11891:3;11887:14;11873:12;11825:77;:::i;:::-;;11987:4;11980:5;11976:16;11970:23;11987:4;12051:3;12047:14;4865:37;12150:4;12143:5;12139:16;12133:23;12162:63;12150:4;12214:3;12210:14;12196:12;12162:63;:::i;:::-;;12308:4;12301:5;12297:16;12291:23;12320:63;12308:4;12372:3;12368:14;12354:12;12320:63;:::i;:::-;-1:-1;12476:6;12465:18;;;12459:25;12538:16;;;4865:37;12647:6;12636:18;;;12630:25;12661:59;12703:16;;;12630:25;12661:59;:::i;:::-;;;20715:183;;;;:::o;20905:321::-;-1:-1;;;;;24661:76;;;;12819:37;;24027:13;24020:21;21212:2;21197:18;;4647:34;21054:2;21039:18;;21025:201::o;21233:222::-;4865:37;;;21360:2;21345:18;;21331:124::o;21462:333::-;4865:37;;;21781:2;21766:18;;4865:37;21617:2;21602:18;;21588:207::o;21802:444::-;4865:37;;;22149:2;22134:18;;4865:37;;;;22232:2;22217:18;;4865:37;21985:2;21970:18;;21956:290::o;22253:556::-;4865:37;;;22629:2;22614:18;;4865:37;;;;22712:2;22697:18;;4865:37;22795:2;22780:18;;4865:37;22464:3;22449:19;;22435:374::o;25069:145::-;25150:6;25145:3;25140;25127:30;-1:-1;25206:1;25188:16;;25181:27;25120:94::o;25613:117::-;-1:-1;;;;;24533:54;;25672:35;;25662:2;;25721:1;;25711:12;25983:117;-1:-1;;;;;26070:5;24417:42;26045:5;26042:35;26032:2;;26091:1;;26081:12

Swarm Source

ipfs://102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.