diff --git a/.github/workflows/scheduled-commit.yaml b/.github/workflows/scheduled-commit.yaml index 6d9c30f..b545736 100644 --- a/.github/workflows/scheduled-commit.yaml +++ b/.github/workflows/scheduled-commit.yaml @@ -1,87 +1,87 @@ -name: "Calculate rewards" +# name: "Calculate rewards" -on: - schedule: - - cron: '30 7 * * 1' # Every Monday at 07:30 UCT - - cron: '30 19 * * 4' # Every Thursday at 19:30 UCT - workflow_dispatch: - inputs: - first_reward_epoch: - description: "Reward epoch (Last epoch if of-four)" - type: number - reward_amount_epoch_wei: - description: "Reward amount (in wei)" - type: number - trigger_generate_report_workflow: - description: "Run github pages deployment workflow" - type: string - required: true - default: 'true' +# on: +# # schedule: +# # - cron: '30 7 * * 1' # Every Monday at 07:30 UCT +# # - cron: '30 19 * * 4' # Every Thursday at 19:30 UCT +# workflow_dispatch: +# inputs: +# first_reward_epoch: +# description: "Reward epoch (Last epoch if of-four)" +# type: number +# reward_amount_epoch_wei: +# description: "Reward amount (in wei)" +# type: number +# trigger_generate_report_workflow: +# description: "Run github pages deployment workflow" +# type: string +# required: true +# default: 'true' -permissions: - contents: write - actions: write +# permissions: +# contents: write +# actions: write -jobs: - process-staking-rewards: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Install jq - run: sudo apt update -y && sudo apt install jq moreutils -y - - name: Install node modules - run: yarn install --frozen-lockfile - - name: Calculate epoch vars - run: | - export REWARD_EPOCH_DEFINED="${{ github.event.inputs.first_reward_epoch }}" - export REWARD_EPOCH_CALCULATED="$(node .github/workflows/get-current-reward-epoch.js)" - export USE_REWARD_EPOCH="${REWARD_EPOCH_DEFINED:-$REWARD_EPOCH_CALCULATED}" - echo "USE_REWARD_EPOCH=$USE_REWARD_EPOCH" >> "$GITHUB_ENV" +# jobs: +# process-staking-rewards: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v4 +# - uses: actions/setup-node@v3 +# with: +# node-version: 20 +# - name: Install jq +# run: sudo apt update -y && sudo apt install jq moreutils -y +# - name: Install node modules +# run: yarn install --frozen-lockfile +# - name: Calculate epoch vars +# run: | +# export REWARD_EPOCH_DEFINED="${{ github.event.inputs.first_reward_epoch }}" +# export REWARD_EPOCH_CALCULATED="$(node .github/workflows/get-current-reward-epoch.js)" +# export USE_REWARD_EPOCH="${REWARD_EPOCH_DEFINED:-$REWARD_EPOCH_CALCULATED}" +# echo "USE_REWARD_EPOCH=$USE_REWARD_EPOCH" >> "$GITHUB_ENV" - export USE_FIRST_REWARD_EPOCH="$((${USE_REWARD_EPOCH} - 3))" - echo "USE_FIRST_REWARD_EPOCH=${USE_FIRST_REWARD_EPOCH}" >> "$GITHUB_ENV" +# export USE_FIRST_REWARD_EPOCH="$((${USE_REWARD_EPOCH} - 3))" +# echo "USE_FIRST_REWARD_EPOCH=${USE_FIRST_REWARD_EPOCH}" >> "$GITHUB_ENV" - echo "EPOCH_OF4_if0=$(( $(( $USE_REWARD_EPOCH - 1 )) % 4 ))" >> "$GITHUB_ENV" +# echo "EPOCH_OF4_if0=$(( $(( $USE_REWARD_EPOCH - 1 )) % 4 ))" >> "$GITHUB_ENV" - - name: Set reward amount wei overwrite - if: github.event.inputs.reward_amount_epoch_wei != '' - run: jq --raw-output --monochrome-output --argjson amount "${{ github.event.inputs.reward_amount_epoch_wei }}" '.REWARD_AMOUNT_EPOCH_WEI = $amunt' configs/networks/flare.json | sponge configs/networks/flare.json +# - name: Set reward amount wei overwrite +# if: github.event.inputs.reward_amount_epoch_wei != '' +# run: jq --raw-output --monochrome-output --argjson amount "${{ github.event.inputs.reward_amount_epoch_wei }}" '.REWARD_AMOUNT_EPOCH_WEI = $amunt' configs/networks/flare.json | sponge configs/networks/flare.json - - name: Process staking rewards for ${{ env.USE_REWARD_EPOCH }} - run: | - jq --raw-output --monochrome-output '.NUM_EPOCHS = 1' configs/networks/flare.json | sponge configs/networks/flare.json - jq --raw-output --monochrome-output --argjson epoch "$USE_REWARD_EPOCH" '.REWARD_EPOCH = $epoch' configs/networks/flare.json | sponge configs/networks/flare.json - yarn run process-staking-rewards +# - name: Process staking rewards for ${{ env.USE_REWARD_EPOCH }} +# run: | +# jq --raw-output --monochrome-output '.NUM_EPOCHS = 1' configs/networks/flare.json | sponge configs/networks/flare.json +# jq --raw-output --monochrome-output --argjson epoch "$USE_REWARD_EPOCH" '.REWARD_EPOCH = $epoch' configs/networks/flare.json | sponge configs/networks/flare.json +# yarn run process-staking-rewards - - name: Combine rewards for [epoch ${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}] - if: env.EPOCH_OF4_if0 == 0 - run: | - jq --raw-output --monochrome-output '.NUM_EPOCHS = 4' configs/networks/flare.json | sponge configs/networks/flare.json - jq --raw-output --monochrome-output --argjson epoch "$USE_REWARD_EPOCH" '.REWARD_EPOCH = $epoch' configs/networks/flare.json | sponge configs/networks/flare.json - yarn sum-staking-rewards +# - name: Combine rewards for [epoch ${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}] +# if: env.EPOCH_OF4_if0 == 0 +# run: | +# jq --raw-output --monochrome-output '.NUM_EPOCHS = 4' configs/networks/flare.json | sponge configs/networks/flare.json +# jq --raw-output --monochrome-output --argjson epoch "$USE_REWARD_EPOCH" '.REWARD_EPOCH = $epoch' configs/networks/flare.json | sponge configs/networks/flare.json +# yarn sum-staking-rewards - - name: Commit generated-files - run: | - git config --global user.name 'Reward scripts automation' - git config --global user.email 'flare-foundation-reward-scripts-automation@users.noreply.github.com' - git add generated-files/reward-epoch-${{ env.USE_REWARD_EPOCH }} - if [ "$EPOCH_OF4_if0" -eq 0 ]; then git add generated-files/validator-rewards/epochs-${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}.json; fi - git commit -m "Processed staking rewards for epoch ${{ env.USE_REWARD_EPOCH }}" && git push || echo "No changes were present, failed to commit, proceeding..." +# - name: Commit generated-files +# run: | +# git config --global user.name 'Reward scripts automation' +# git config --global user.email 'flare-foundation-reward-scripts-automation@users.noreply.github.com' +# git add generated-files/reward-epoch-${{ env.USE_REWARD_EPOCH }} +# if [ "$EPOCH_OF4_if0" -eq 0 ]; then git add generated-files/validator-rewards/epochs-${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}.json; fi +# git commit -m "Processed staking rewards for epoch ${{ env.USE_REWARD_EPOCH }}" && git push || echo "No changes were present, failed to commit, proceeding..." - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: staking-rewards - path: | - generated-files/reward-epoch-${{ env.USE_REWARD_EPOCH }} - generated-files/validator-rewards/epochs-${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}.json +# - name: Upload artifacts +# uses: actions/upload-artifact@v3 +# with: +# name: staking-rewards +# path: | +# generated-files/reward-epoch-${{ env.USE_REWARD_EPOCH }} +# generated-files/validator-rewards/epochs-${{ env.USE_FIRST_REWARD_EPOCH }}-${{ env.USE_REWARD_EPOCH }}.json - - name: Trigger "generate report" workflow - if: github.event.inputs.trigger_generate_report_workflow == 'true' || github.event.inputs.trigger_generate_report_workflow == '' - env: - GH_TOKEN: ${{ github.token }} - run: gh workflow run "Generate report" -f first_reward_epoch=${{ env.USE_REWARD_EPOCH }} +# - name: Trigger "generate report" workflow +# if: github.event.inputs.trigger_generate_report_workflow == 'true' || github.event.inputs.trigger_generate_report_workflow == '' +# env: +# GH_TOKEN: ${{ github.token }} +# run: gh workflow run "Generate report" -f first_reward_epoch=${{ env.USE_REWARD_EPOCH }} diff --git a/README.md b/README.md index 0f3c735..738bdc5 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,9 @@ You can also run it with optional parameters from [file](./src/processProviders. For each run output of the process is in folder `generated-files/reward-epochs-`. +### Verifying the results To verify the official results posted in this repository one needs to update its configuration file with values from the `configFileData` object of a `data.json` file for some reward epoch. +To verify the results for the reward epochs from 126 to 243 inclusive one needs to use branch `version-1`. ### Data for distributing rewards Rewards will be distributed every four reward epochs, which means that every 14 days reward amounts from the past four reward epochs will be summed. This is achieved by running the process diff --git a/artifacts/contracts/ftso/implementation/FtsoManager.sol/FtsoManager.json b/artifacts/contracts/ftso/implementation/FtsoManager.sol/FtsoManager.json deleted file mode 100644 index 0451428..0000000 --- a/artifacts/contracts/ftso/implementation/FtsoManager.sol/FtsoManager.json +++ /dev/null @@ -1,1723 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "FtsoManager", - "sourceName": "contracts/ftso/implementation/FtsoManager.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governance", - "type": "address" - }, - { - "internalType": "contract FlareDaemon", - "name": "_flareDaemon", - "type": "address" - }, - { - "internalType": "address", - "name": "_addressUpdater", - "type": "address" - }, - { - "internalType": "contract IIFtsoManagerV1", - "name": "_oldFtsoManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_firstPriceEpochStartTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_revealEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_firstRewardEpochStartTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_votePowerIntervalFraction", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - } - ], - "name": "AccruingUnearnedRewardsFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "ChillingNonrevealingDataProvidersFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "CleanupBlockNumberManagerFailedForBlock", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpoch", - "type": "uint256" - } - ], - "name": "ClosingExpiredRewardEpochFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "theContract", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "atBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "theMessage", - "type": "string" - } - ], - "name": "ContractRevertError", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - } - ], - "name": "DistributingRewardsFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "fallbackMode", - "type": "bool" - } - ], - "name": "FallbackMode", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IIFtso", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum IFtso.PriceFinalizationType", - "name": "failingType", - "type": "uint8" - } - ], - "name": "FinalizingPriceEpochFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IIFtso", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "add", - "type": "bool" - } - ], - "name": "FtsoAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IIFtso", - "name": "ftso", - "type": "address" - } - ], - "name": "FtsoDeactivationFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IIFtso", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "fallbackMode", - "type": "bool" - } - ], - "name": "FtsoFallbackMode", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "allowedAfterTimestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedCall", - "type": "bytes" - } - ], - "name": "GovernanceCallTimelocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "initialGovernance", - "type": "address" - } - ], - "name": "GovernanceInitialised", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "governanceSettings", - "type": "address" - } - ], - "name": "GovernedProductionModeEntered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IIFtso", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - } - ], - "name": "InitializingCurrentEpochStateForRevealFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "chosenFtso", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpochId", - "type": "uint256" - } - ], - "name": "PriceEpochFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "votepowerBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "startBlock", - "type": "uint256" - } - ], - "name": "RewardEpochFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "TimelockedGovernanceCallCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "TimelockedGovernanceCallExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpoch", - "type": "uint256" - } - ], - "name": "UpdatingActiveValidatorsTriggerFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "useGoodRandom", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxWaitForGoodRandomSeconds", - "type": "uint256" - } - ], - "name": "UseGoodRandomSet", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_TRUSTED_ADDRESSES_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "activate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "active", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - } - ], - "name": "addFtso", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso[]", - "name": "_ftsos", - "type": "address[]" - } - ], - "name": "addFtsosBulk", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "cancelGovernanceCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "cleanupBlockNumberManager", - "outputs": [ - { - "internalType": "contract CleanupBlockNumberManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentRewardEpochEnds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "daemonize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso[]", - "name": "_ftsos", - "type": "address[]" - } - ], - "name": "deactivateFtsos", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "errorData", - "outputs": [ - { - "internalType": "uint192", - "name": "totalRevertedErrors", - "type": "uint192" - }, - { - "internalType": "uint64", - "name": "lastErrorTypeIndex", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "executeGovernanceCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "flareDaemon", - "outputs": [ - { - "internalType": "contract FlareDaemon", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ftsoRegistry", - "outputs": [ - { - "internalType": "contract IIFtsoRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAddressUpdater", - "outputs": [ - { - "internalType": "address", - "name": "_addressUpdater", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentPriceEpochData", - "outputs": [ - { - "internalType": "uint256", - "name": "_priceEpochId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochStartTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochRevealEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_currentTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentPriceEpochId", - "outputs": [ - { - "internalType": "uint256", - "name": "_priceEpochId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentRewardEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - } - ], - "name": "getElasticBandWidthPPMFtso", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackMode", - "outputs": [ - { - "internalType": "bool", - "name": "_fallbackMode", - "type": "bool" - }, - { - "internalType": "contract IIFtso[]", - "name": "_ftsos", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_ftsoInFallbackMode", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFtsos", - "outputs": [ - { - "internalType": "contract IIFtso[]", - "name": "_ftsos", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGovernanceParameters", - "outputs": [ - { - "internalType": "uint256", - "name": "_maxVotePowerNatThresholdFraction", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxVotePowerAssetThresholdFraction", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lowAssetUSDThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_highAssetUSDThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_highAssetTurnoutThresholdBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lowNatTurnoutThresholdBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_elasticBandRewardBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardExpiryOffsetSeconds", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_trustedAddresses", - "type": "address[]" - }, - { - "internalType": "bool", - "name": "_initialized", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_changed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastUnprocessedPriceEpochData", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastUnprocessedPriceEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lastUnprocessedPriceEpochRevealEnds", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_lastUnprocessedPriceEpochInitialized", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPriceEpochConfiguration", - "outputs": [ - { - "internalType": "uint256", - "name": "_firstPriceEpochStartTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_revealEpochDurationSeconds", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPriceSubmitter", - "outputs": [ - { - "internalType": "contract IIPriceSubmitter", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRewardEpochConfiguration", - "outputs": [ - { - "internalType": "uint256", - "name": "_firstRewardEpochStartTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardEpochDurationSeconds", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpochId", - "type": "uint256" - } - ], - "name": "getRewardEpochData", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "votepowerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "startBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "startTimestamp", - "type": "uint256" - } - ], - "internalType": "struct IIFtsoManager.RewardEpochData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRewardEpochToExpireNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "getRewardEpochVotePowerBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "_votepowerBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRewardExpiryOffsetSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getUpdateGovernanceParametersTs", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVotePowerIntervalFraction", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governance", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governanceSettings", - "outputs": [ - { - "internalType": "contract IGovernanceSettings", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initialGovernance", - "type": "address" - } - ], - "name": "initialise", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastRewardedFtsoAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxWaitForGoodRandomSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - } - ], - "name": "notInitializedFtsos", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oldFtsoManager", - "outputs": [ - { - "internalType": "contract IIFtsoManagerV1", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceSubmitter", - "outputs": [ - { - "internalType": "contract IIPriceSubmitter", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "productionMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - } - ], - "name": "removeFtso", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftsoToAdd", - "type": "address" - }, - { - "internalType": "bool", - "name": "_copyCurrentPrice", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_copyAssetOrAssetFtsos", - "type": "bool" - } - ], - "name": "replaceFtso", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso[]", - "name": "_ftsosToAdd", - "type": "address[]" - }, - { - "internalType": "bool", - "name": "_copyCurrentPrice", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_copyAssetOrAssetFtsos", - "type": "bool" - } - ], - "name": "replaceFtsosBulk", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rewardEpochDurationSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpochId", - "type": "uint256" - } - ], - "name": "rewardEpochs", - "outputs": [ - { - "internalType": "uint256", - "name": "_votepowerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_startBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_startTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardEpochsStartTs", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardManager", - "outputs": [ - { - "internalType": "contract IIFtsoRewardManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updateTs", - "type": "uint256" - }, - { - "internalType": "contract IIFtso[]", - "name": "_ftsos", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_widths", - "type": "uint256[]" - } - ], - "name": "setElasticBandWidthPPMFtsos", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_fallbackMode", - "type": "bool" - } - ], - "name": "setFallbackMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - }, - { - "internalType": "contract IIVPToken", - "name": "_asset", - "type": "address" - } - ], - "name": "setFtsoAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - }, - { - "internalType": "contract IIFtso[]", - "name": "_assetFtsos", - "type": "address[]" - } - ], - "name": "setFtsoAssetFtsos", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IIFtso", - "name": "_ftso", - "type": "address" - }, - { - "internalType": "bool", - "name": "_fallbackMode", - "type": "bool" - } - ], - "name": "setFtsoFallbackMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updateTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxVotePowerNatThresholdFraction", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxVotePowerAssetThresholdFraction", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lowAssetUSDThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_highAssetUSDThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_highAssetTurnoutThresholdBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lowNatTurnoutThresholdBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_elasticBandRewardBIPS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardExpiryOffsetSeconds", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_trustedAddresses", - "type": "address[]" - } - ], - "name": "setGovernanceParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_nextRewardEpochToExpire", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardEpochsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_currentRewardEpochEnds", - "type": "uint256" - } - ], - "name": "setInitialRewardData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpochDurationSeconds", - "type": "uint256" - } - ], - "name": "setRewardEpochDurationSeconds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IUpdateValidators", - "name": "_updateValidators", - "type": "address" - } - ], - "name": "setUpdateOnRewardEpochSwitchover", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_useGoodRandom", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_maxWaitForGoodRandomSeconds", - "type": "uint256" - } - ], - "name": "setUseGoodRandom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_votePowerIntervalFraction", - "type": "uint256" - } - ], - "name": "setVotePowerIntervalFraction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "showLastRevertedError", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_lastErrorBlock", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_numErrors", - "type": "uint256[]" - }, - { - "internalType": "string[]", - "name": "_errorString", - "type": "string[]" - }, - { - "internalType": "address[]", - "name": "_erroringContract", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_totalRevertedErrors", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "startIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numErrorTypesToShow", - "type": "uint256" - } - ], - "name": "showRevertedErrors", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_lastErrorBlock", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_numErrors", - "type": "uint256[]" - }, - { - "internalType": "string[]", - "name": "_errorString", - "type": "string[]" - }, - { - "internalType": "address[]", - "name": "_erroringContract", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_totalRevertedErrors", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "supply", - "outputs": [ - { - "internalType": "contract IISupply", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "switchToFallbackMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "switchToProductionMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "timelockedCalls", - "outputs": [ - { - "internalType": "uint256", - "name": "allowedAfterTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "encodedCall", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_contractNameHashes", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "_contractAddresses", - "type": "address[]" - } - ], - "name": "updateContractAddresses", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "updateOnRewardEpochSwitchover", - "outputs": [ - { - "internalType": "contract IUpdateValidators", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "useGoodRandom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "voterWhitelister", - "outputs": [ - { - "internalType": "contract IIVoterWhitelister", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "waitingForGoodRandomSinceTs", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6101406040523480156200001257600080fd5b50604051620064c3380380620064c383398101604081905262000035916200053e565b878a8a81806001600160a01b038116156200005557620000558162000457565b506001600160a01b038116620000a5576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b506001600160a01b038116620000f6576040805162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b604482015290519081900360640190fd5b60601b6001600160601b0319166080525062000112816200051a565b50854210156040518060400160405280601e81526020017f46697273742065706f636820737461727420747320696e20667574757265000081525090620001775760405162461bcd60e51b81526004016200016e9190620005e3565b60405180910390fd5b5060408051808201909152600e81526d05265776172642065706f636820360941b602082015282620001be5760405162461bcd60e51b81526004016200016e9190620005e3565b5060408051808201909152600d81526c050726963652065706f6368203609c1b602082015285620002045760405162461bcd60e51b81526004016200016e9190620005e3565b5060408051808201909152601481527f52657665616c2070726963652065706f636820300000000000000000000000006020820152846200025a5760405162461bcd60e51b81526004016200016e9190620005e3565b5060408051808201909152601e81527f566f746520706f77657220696e74657276616c206672616374696f6e20300000602082015281620002b05760405162461bcd60e51b81526004016200016e9190620005e3565b5060408051808201909152601b81527f52657665616c2070726963652065706f636820746f6f206c6f6e6700000000006020820152858510620003085760405162461bcd60e51b81526004016200016e9190620005e3565b508284870111156040518060400160405280601b81526020017f5265776172642065706f636820737461727420746f6f20736f6f6e000000000081525090620003665760405162461bcd60e51b81526004016200016e9190620005e3565b50848685850303816200037557fe5b066000146040518060600160405280602481526020016200649f6024913990620003b45760405162461bcd60e51b81526004016200016e9190620005e3565b50848281620003bf57fe5b06600014604051806060016040528060278152602001620064786027913990620003fe5760405162461bcd60e51b81526004016200016e9190620005e3565b506101008390526020829055602181905560a086905260c085905260e0849052601c83905584868403816200042f57fe5b04601b55505050505060609190911b6001600160601b03191661012052506200065292505050565b600054600160a01b900460ff1615620004b7576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6000806000806000806000806000806101408b8d0312156200055e578586fd5b8a516200056b8162000639565b60208c0151909a506200057e8162000639565b60408c0151909950620005918162000639565b60608c0151909850620005a48162000639565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b6000602080835283518082850152825b818110156200061157858101830151858201604001528201620005f3565b81811115620006235783604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146200064f57600080fd5b50565b60805160601c60a05160c05160e051610100516101205160601c615d68620007106000398061258e528061454f525080610b8b528061218c528061309f52806131ba525080610b5c528061207c528061467d5280614c69525080610a9d5280610b3b528061204b5280612a1f52806135ce528061465b52806147ca528061480a5280614c46525080610b1a528061202a5280612a40528061463952806147a55280614c21525080611526528061216252806126f25250615d686000f3fe608060405234801561001057600080fd5b506004361061041d5760003560e01c806374e6310e1161022b578063b4dba0f311610130578063e371aef0116100b8578063f2edab5a11610087578063f2edab5a1461082c578063f5a983831461083f578063f5f5ba7214610847578063f937d6ad1461085c578063ff882fbb146108645761041d565b8063e371aef0146107e6578063e5399da3146107fc578063e7c830d41461081c578063ec31db0c146108245761041d565b8063d429cfe5116100ff578063d429cfe5146107a8578063d89c39e6146107bb578063e080a970146107c3578063e17f212e146107d6578063e22fdece146107de5761041d565b8063b4dba0f31461077b578063c2b0d47b14610783578063cb063fa21461078b578063ce69f833146107935761041d565b8063a157713b116101b3578063a90a38e111610182578063a90a38e114610727578063a93a6f421461073a578063af946af71461074d578063b00c0b7614610760578063b23b6ef1146107735761041d565b8063a157713b146106f1578063a578f55b146106f9578063a670ff8714610701578063a795f409146107145761041d565b8063882376c3116101fa578063882376c3146106975780638de306b1146106aa57806393a79025146106bd5780639d6a890f146106d6578063a1077532146106e95761041d565b806374e6310e14610648578063758ff1da14610669578063823033a91461067c57806385f3c9c91461068f5761041d565b80633e7ff857116103315780635ff27079116102b957806369b11ac61161028857806369b11ac6146105fb5780636b65cc34146106035780636ca051e6146106165780636d0e8c341461062d5780636ea0aa31146106355761041d565b80635ff27079146105c557806360f2c5b2146105d857806362354e03146105e057806367fc4029146105e85761041d565b80635267a15d116103005780635267a15d1461057b5780635835cf30146105835780635904089a146105a25780635aa6e675146105aa5780635bb44e9a146105b25761041d565b80633e7ff857146105415780633fdeb7e1146105495780634b48dd5e1461055c5780634eac870f146105735761041d565b8063144e1591116103b45780632b3c41a4116103835780632b3c41a4146104f25780632fd8eb7d1461050b578063361b5459146105135780633758e6791461052657806338b5f869146105395761041d565b8063144e1591146104aa57806315c29c5b146104c15780631cb513f7146104c95780632663f1b4146104df5761041d565b80630f15f4c0116103f05780630f15f4c0146104725780630f4ef8a61461047c5780631322679314610484578063132c7e1f146104975761041d565b806302fb0c5e14610422578063047fc9aa1461044057806308a7f402146104555780630e063d7d1461046a575b600080fd5b61042a610877565b6040516104379190615840565b60405180910390f35b610448610880565b6040516104379190615699565b61045d61088f565b6040516104379190615a32565b61044861089f565b61047a6108ae565b005b6104486108fc565b61047a61049236600461550e565b61090b565b61047a6104a5366004615381565b610a28565b6104b2610b18565b60405161043793929190615a7a565b61045d610b80565b6104d1610b86565b604051610437929190615a54565b61047a6104ed366004614f64565b610bad565b6104fa610bec565b6040516104379594939291906157a1565b610448610c27565b61047a610521366004615381565b610c36565b61047a610534366004615325565b610cc2565b610448610d11565b61045d610d20565b61047a610557366004614f64565b610d26565b610564610d75565b6040516104379392919061584b565b610448610e54565b610448610e63565b61058b610e88565b6040516104379b9a99989796959493929190615ab3565b610448610f57565b610448610f66565b61045d6105c0366004614f64565b610ffa565b61047a6105d3366004615282565b611019565b61045d61136e565b610448611374565b61047a6105f6366004615282565b61137f565b61045d611462565b61047a610611366004615354565b611467565b61061e611508565b60405161043793929190615a62565b61042a611519565b6104fa610643366004615495565b61191b565b61065b610656366004615282565b611c76565b604051610437929190615a3b565b61047a6106773660046151da565b611d1c565b61042a61068a366004614f64565b611d83565b61045d611da1565b61047a6106a53660046153b1565b611da7565b61047a6106b8366004615108565b611f76565b6106c5612014565b604051610437959493929190615a90565b61047a6106e4366004614f64565b6120a7565b610448612160565b61045d612184565b61045d61218a565b61047a61070f366004614f64565b6121ae565b6104b2610722366004615381565b61221a565b61047a610735366004615257565b612243565b61047a6107483660046152aa565b612380565b61047a61075b3660046152ed565b612417565b61047a61076e366004615052565b6124df565b61045d612586565b61044861258c565b6104486125b0565b61042a6125bf565b61079b6125cd565b604051610437919061578e565b61047a6107b6366004615108565b6125d7565b61045d61263e565b61047a6107d13660046154b6565b612644565b61042a6126d5565b61042a6126e5565b6107ee6127c3565b604051610437929190615a10565b61080f61080a366004615381565b6127e4565b6040516104379190615926565b61045d612855565b61045d6128bb565b61045d61083a366004615381565b6128c1565b61047a6128d3565b61084f61298d565b6040516104379190615913565b6104486129b2565b61047a61087236600461523b565b6129c1565b60055460ff1681565b6025546001600160a01b031681565b6000610899612a1b565b90505b90565b6023546001600160a01b031690565b600054600160b01b900460ff16806108d05750600054600160a81b900460ff16155b156108ef576108dd612a6e565b6005805460ff191660011790556108fa565b6108fa600036612aa3565b565b6024546001600160a01b031681565b600054600160b01b900460ff168061092d5750600054600160a81b900460ff16155b15610a115761093a612a6e565b60008911801561094a5750600088115b80156109565750868610155b801561096457506127108511155b801561097257506127108411155b801561098057506127108311155b801561098c5750600082115b801561099a57506005815111155b6040518060400160405280601381526020017211dbdd8b881c185c985b5cc81a5b9d985b1a59606a1b815250906109ed5760405162461bcd60e51b81526004016109e49190615913565b60405180910390fd5b506109f9600a8b612c26565b610a0c600a8a8a8a8a8a8a898b8a612c7b565b610a1c565b610a1c600036612aa3565b50505050505050505050565b600054600160b01b900460ff1680610a4a5750600054600160a81b900460ff16155b15610b0a57610a57612a6e565b60408051808201909152600e81526d05265776172642065706f636820360941b602082015281610a9a5760405162461bcd60e51b81526004016109e49190615913565b507f00000000000000000000000000000000000000000000000000000000000000008181610ac457fe5b06600014604051806060016040528060278152602001615ceb6027913990610aff5760405162461bcd60e51b81526004016109e49190615913565b506020819055610b15565b610b15600036612aa3565b50565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000909192565b601e5481565b6020547f000000000000000000000000000000000000000000000000000000000000000091565b600054600160b01b900460ff1680610bcf5750600054600160a81b900460ff16155b15610b0a57610bdc612a6e565b610be7816001612e9e565b610b15565b600454606090819081908190600090610c1690600160c01b90046001600160401b0316600161191b565b945094509450945094509091929394565b6007546001600160a01b031681565b600054600160b01b900460ff1680610c585750600054600160a81b900460ff16155b15610b0a57610c65612a6e565b60408051808201909152601e81527f566f746520706f77657220696e74657276616c206672616374696f6e20300000602082015281610cb75760405162461bcd60e51b81526004016109e49190615913565b506021819055610b15565b600054600160b01b900460ff1680610ce45750600054600160a81b900460ff16155b15610d0157610cf1612a6e565b610cfc838383612f1d565b610d0c565b610d0c600036612aa3565b505050565b6019546001600160a01b031690565b60225490565b600054600160b01b900460ff1680610d485750600054600160a81b900460ff16155b15610b0a57610d55612a6e565b602780546001600160a01b0319166001600160a01b038316179055610b15565b602754600160a01b900460ff16606080610d8d612fa0565b8051909250806001600160401b0381118015610da857600080fd5b50604051908082528060200260200182016040528015610dd2578160200160208202803683370190505b50915060005b81811015610e4d5760166002016000858381518110610df357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16838281518110610e3557fe5b91151560209283029190910190910152600101610dd8565b5050909192565b6026546001600160a01b031681565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b600b54600c54600d54600e54600f54601054601254601154601454601380546040805160208084028201810190925282815260009c8d9c8d9c8d9c8d9c8d9c8d9c8d9c60609c8e9c8d9c999b989a979996989597949693959294909360ff6101008404811694931692859190830182828015610f2d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f0f575b505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b6027546001600160a01b031681565b60008054600160a81b900460ff16610f89576000546001600160a01b0316610899565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d6020811015610ff357600080fd5b5051905090565b6001600160a01b0381166000908152601560205260409020545b919050565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d602081101561108757600080fd5b50516110ca576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054611136576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b805442101561118c576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112265780601f106111fb57610100808354040283529160200191611226565b820191906000526020600020905b81548152906001019060200180831161120957829003601f168201915b5050506001600160e01b031986166000908152600160208190526040822082815594955090925061125a9150830182614d3a565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b602083106112a25780518252601f199092019160209182019101611283565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611304576040519150601f19603f3d011682016040523d82523d6000602084013e611309565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a161136881613021565b50505050565b60215490565b60076001609c1b0181565b61138761303e565b6001600160e01b031981166000908152600160205260409020546113f2576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b03198116600090815260016020819052604082208281559190610d0c90830182614d3a565b600581565b600054600160b01b900460ff16806114895750600054600160a81b900460ff16155b156114f957611496612a6e565b60405163d0d552dd60e01b81526001600160a01b0383169063d0d552dd906114c2908490600401615699565b600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50505050611504565b611504600036612aa3565b5050565b601b54601c54601d5460ff16909192565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b60055460ff1661159e5750600061089c565b6008546115b2576115ad61309d565b611915565b601d546000908190819060ff1680156115cd575042601c5411155b156115db57600191506115f9565b601d5460ff161580156115f057504260095411155b156115f9575060015b81806116025750805b156118c557601d54610100900460ff1615611811576023546040805163a978fb6b60e01b815281516000936001600160a01b03169263a978fb6b9260048082019391829003018186803b15801561165857600080fd5b505afa15801561166c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116909190615471565b9094509050801580156116a05750825b156117c657602354601b546001600160a01b0390911690631c91efcf906116c5612a1b565b6040518363ffffffff1660e01b81526004016116e2929190615a54565b600060405180830381600087803b1580156116fc57600080fd5b505af192505050801561170d575060015b6117c157611719615bb5565b806117245750611769565b6040517f945e1930d717c550cfdc738b4226b97a96c13dd0e378d3fa3c3812ee430af46990600090a1602354611763906001600160a01b0316826131e1565b506117c1565b6040517f945e1930d717c550cfdc738b4226b97a96c13dd0e378d3fa3c3812ee430af46990600090a16023546040805160608101909152602a8082526117c1926001600160a01b03169190615cc160208301396131e1565b61180b565b811561180b578061180557601f546117e55742601f55600091506117c1565b42601e54601f5401116117fc576000601f556117c1565b6000915061180b565b6000601f555b506118c5565b602360009054906101000a90046001600160a01b03166001600160a01b031663d89601fd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185f57600080fd5b505afa158015611873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118979190615399565b42016040516020016118a99190615a32565b6040516020818303038152906040528051906020012060001c92505b81156118d9576118d4836133ba565b611911565b8015611900576118e88361389d565b6118f0613a25565b6118f8613bb1565b6118d4613cfe565b42601c541161191157611911613e46565b5050505b50600190565b606080606080600060038054905087106040518060400160405280601081526020016f0e6e8c2e4e840d2dcc8caf040d0d2ced60831b815250906119725760405162461bcd60e51b81526004016109e49190615913565b50600354600090888801111561198d5760035488900361198f565b865b9050806001600160401b03811180156119a757600080fd5b506040519080825280602002602001820160405280156119d1578160200160208202803683370190505b509550806001600160401b03811180156119ea57600080fd5b50604051908082528060200260200182016040528015611a14578160200160208202803683370190505b509450806001600160401b0381118015611a2d57600080fd5b50604051908082528060200260200182016040528015611a6157816020015b6060815260200190600190039081611a4c5790505b509350806001600160401b0381118015611a7a57600080fd5b50604051908082528060200260200182016040528015611aa4578160200160208202803683370190505b50925060005b81811015611c5a5760006003828b0181548110611ac357fe5b6000918252602080832090910154808352600290915260409091205489519192506001600160c01b031690899084908110611afa57fe5b6020026020010181815250506002600082815260200190815260200160002060000160189054906101000a90046001600160401b03166001600160401b0316878381518110611b4557fe5b602090810291909101810191909152600082815260028083526040918290208101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015611be75780601f10611bbc57610100808354040283529160200191611be7565b820191906000526020600020905b815481529060010190602001808311611bca57829003601f168201915b5050505050868381518110611bf857fe5b60200260200101819052506002600082815260200190815260200160002060010160009054906101000a90046001600160a01b0316858381518110611c3957fe5b6001600160a01b039092166020928302919091019091015250600101611aaa565b50506004549497939650919450926001600160c01b0316919050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f81018590048502860185019096528585529094919392909190830182828015611d125780601f10611ce757610100808354040283529160200191611d12565b820191906000526020600020905b815481529060010190602001808311611cf557829003601f168201915b5050505050905082565b600054600160b01b900460ff1680611d3e5750600054600160a81b900460ff16155b15610d0157611d4b612a6e565b60005b8351811015611d7d57611d75848281518110611d6657fe5b60200260200101518484612f1d565b600101611d4e565b50610d0c565b6001600160a01b031660009081526017602052604090205460ff1690565b60205481565b600054600160b01b900460ff1680611dc95750600054600160a81b900460ff16155b15610d0157611dd6612a6e565b80518251146040518060400160405280601a81526020017f6172726179206c656e6774687320646f206e6f74206d6174636800000000000081525090611e2f5760405162461bcd60e51b81526004016109e49190615913565b50611e3b600a84612c26565b60005b8251811015611d7d57620f4240828281518110611e5757fe5b602002602001015111156040518060400160405280601a81526020017f656c61737469632062616e6420776964746820696e76616c696400000000000081525090611eb55760405162461bcd60e51b81526004016109e49190615913565b50818181518110611ec257fe5b6020026020010151600a600b016000858481518110611edd57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205414611f6e576014805460ff191660011790558151829082908110611f2657fe5b6020026020010151600a600b016000858481518110611f4157fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b600101611e3e565b600054600160b01b900460ff1680611f985750600054600160a81b900460ff16155b15610b0a57611fa5612a6e565b60405163984626c360e01b815273__$03dc2144a91b115216397a255bda0073a6$__9063984626c390611fdf906016908590600401615947565b60006040518083038186803b158015611ff757600080fd5b505af415801561200b573d6000803e3d6000fd5b50505050610b15565b600080600080600080612025612a1b565b9550507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808702820195506001870102019250507f000000000000000000000000000000000000000000000000000000000000000082019050429091929394565b600054600160a01b900460ff16156120fd576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160b01b900460ff16806121d05750600054600160a81b900460ff16155b15610b0a576121dd612a6e565b604051630d6f6ead60e11b815273__$03dc2144a91b115216397a255bda0073a6$__90631adedd5a90611fdf90601690600a90869060040161598a565b600080600080612229856127e4565b805160208201516040909201519097919650945092505050565b600054600160b01b900460ff16806122655750600054600160a81b900460ff16155b156114f957612272612a6e565b81156122da5760008111801561228b57506203f4808111155b60405180604001604052806012815260200171696e76616c696420706172616d657465727360701b815250906122d45760405162461bcd60e51b81526004016109e49190615913565b50612329565b604080518082019091526012815271696e76616c696420706172616d657465727360701b602082015281156123225760405162461bcd60e51b81526004016109e49190615913565b506000601f555b601d805461ff00191661010084151502179055601e8190556040517f5c9bf067f2a8b23128e64d5ce119251f51d6c0c24e0d7bf430c2dd77df3ec0929061237390849084906158a9565b60405180910390a1611504565b600054600160b01b900460ff16806123a25750600054600160a81b900460ff16155b156114f9576123af612a6e565b604051636904d3eb60e11b815273__$03dc2144a91b115216397a255bda0073a6$__9063d209a7d6906123eb9060169086908690600401615960565b60006040518083038186803b15801561240357600080fd5b505af41580156114f0573d6000803e3d6000fd5b61241f61303e565b6001600160a01b0382166000908152601660209081526040918290205482518084019093526009835268139bdd08199bdd5b9960ba1b9183019190915260ff1661247c5760405162461bcd60e51b81526004016109e49190615913565b506001600160a01b03821660009081526018602052604090819020805460ff1916831515179055517f24462ede4d3e8e5a69fecec6290d42a311016ca752216d9a3d681e284791b7ac906124d390849084906158b9565b60405180910390a15050565b6124e7610e63565b6001600160a01b0316336001600160a01b031614612543576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b61257c61257783836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506141a8565b6142d5565b61150482826142f9565b601f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a546001600160a01b031690565b601d54610100900460ff1681565b6060610899612fa0565b600054600160b01b900460ff16806125f95750600054600160a81b900460ff16155b15610b0a57612606612a6e565b60005b81518110156126385761263082828151811061262157fe5b60200260200101516001612e9e565b600101612609565b50610b15565b60095481565b600054600160b01b900460ff16806126665750600054600160a81b900460ff16155b15610d0157612673612a6e565b600554604080518082019091526011815270105b1c9958591e481858dd1a5d985d1959607a1b60208201529060ff16156126c05760405162461bcd60e51b81526004016109e49190615913565b50602283905560088290556009819055610d0c565b600054600160a81b900460ff1681565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612758576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b602754600160a01b900460ff166127bd576027805460ff60a01b1916600160a01b1790556040517f217a37a37fc40a97159886f80c3d45986e6fc4330ce6ad7283478b5e5ab705bc906127ad90600190615840565b60405180910390a150600161089c565b50600090565b6004546001600160c01b03811690600160c01b90046001600160401b031682565b6127ec614d7e565b60085482106040518060400160405280602081526020017f5265776172642065706f6368206e6f7420696e697469616c697a656420796574815250906128455760405162461bcd60e51b81526004016109e49190615913565b5061284f82614506565b92915050565b6000600854600014156040518060400160405280602081526020017f5265776172642065706f6368206e6f7420696e697469616c697a656420796574815250906128b25760405162461bcd60e51b81526004016109e49190615913565b5061089961460b565b60115490565b60006128cc826127e4565b5192915050565b6128db61303e565b600054600160a81b900460ff161561293a576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b60408051808201909152600b81526a233a39b7a6b0b730b3b2b960a91b602082015290565b6023546001600160a01b031681565b6129c961303e565b6027805460ff60a01b1916600160a01b831515021790556040517f217a37a37fc40a97159886f80c3d45986e6fc4330ce6ad7283478b5e5ab705bc90612a10908390615840565b60405180910390a150565b60007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000420381612a6857fe5b04905090565b600054600160b01b900460ff1615612a9b57333014612a8957fe5b6000805460ff60b01b191690556108fa565b6108fa61303e565b612aab61303e565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af357600080fd5b505afa158015612b07573d6000803e3d6000fd5b505050506040513d6020811015612b1d57600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450612ba193928501920190614d9f565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b801580612c3257504281115b612c77576040805162461bcd60e51b8152602060048201526011602482015270696e76616c69642075706461746520747360781b604482015290519081900360640190fd5b9055565b888a6001015414612c9e57600a8a01805460ff191660019081179091558a018990555b878a6002015414612cc057600a8a01805460ff1916600117905560028a018890555b868a6003015414612ce257600a8a01805460ff1916600117905560038a018790555b858a6004015414612d0457600a8a01805460ff1916600117905560048a018690555b848a6005015414612d2657600a8a01805460ff1916600117905560058a018590555b838a6006015414612d4857600a8a01805460ff1916600117905560068a018490555b828a6007015414612d6a57600a8a01805460ff1916600117905560078a018390555b818a6008015414612d8c57600a8a01805460ff1916600117905560088a018290555b805160098b015414612dc2578051612dad9060098c01906020840190614e2b565b50600a8a01805460ff19166001179055612e81565b60005b8151811015612e7f57818181518110612dda57fe5b60200260200101516001600160a01b03168b6009018281548110612dfa57fe5b6000918252602090912001546001600160a01b031614612e7757600a8b01805460ff191660011790558151829082908110612e3157fe5b60200260200101518b6009018281548110612e4857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600101612dc5565b505b505050600a909601805461ff001916610100179055505050505050565b601d546040516306b8c18560e01b815273__$03dc2144a91b115216397a255bda0073a6$__916306b8c18591612ee491601691600a918891889160ff16906004016159a9565b60006040518083038186803b158015612efc57600080fd5b505af4158015612f10573d6000803e3d6000fd5b5050505061150482614615565b601d5460405163169ffdc760e21b815273__$03dc2144a91b115216397a255bda0073a6$__91635a7ff71c91612f6791601691600a9189918991899160ff909116906004016159d9565b60006040518083038186803b158015612f7f57600080fd5b505af4158015612f93573d6000803e3d6000fd5b50505050610d0c83614615565b60195460408051635200305d60e11b815290516060926001600160a01b03169163a40060ba916004808301926000929190829003018186803b158015612fe557600080fd5b505afa158015612ff9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190615142565b3d604051818101604052816000823e821561303a578181f35b8181fd5b613046610f66565b6001600160a01b0316336001600160a01b0316146108fa576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000042106108fa5760006130ce612fa0565b80516040805160608101825243600019810182526020808301918252428385019081526008805460009081526006909352948220845181559251600180850191909155905160029093019290925583549091019092559293509091905b828110156131b35783818151811061313f57fe5b60200260200101516001600160a01b031663e536f39683600001516040518263ffffffff1660e01b81526004016131769190615a32565b600060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b5050505080600101905061312b565b50506020547f0000000000000000000000000000000000000000000000000000000000000000016009555050565b600082826040516020016131f69291906156c6565b60408051601f198184030181528282528051602091820120600081815260029092529190208054436001600160c01b038181166001600160401b03600160c01b80860482166001019091160291909316176001600160c01b031916919091179091559092507f1a601cf5e0efbd558b2778b7389af04741d1c49bcab104c40daa2da1945936179161328a91869186906156ea565b60405180910390a1600480546001600160c01b0319811660016001600160c01b03928316810190921617909155600082815260026020526040902054600160c01b90046001600160401b031611156132e25750611504565b6003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01829055600082815260026020818152604090922092830180546001600160a01b0319166001600160a01b03881617905584516133529390910191850190614d9f565b50600354600091825260026020526040909120600101805467ffffffffffffffff60a01b1916600160a01b6000199093016001600160401b0390811684029190911791829055600480546001600160c01b03169390920416600160c01b029190911790555050565b60006133c4612fa0565b805190915080158015906133e25750602754600160a01b900460ff16155b156137b25760008184816133f257fe5b06905060608060008080805b8781101561359a576000888289018161341357fe5b06905060008a828151811061342457fe5b6020908102919091018101516001600160a01b0381166000908152601790925260409091205490915060ff161561347a576001600160a01b03166000908152601760205260409020805460ff1916905550613592565b601b546040516340462a2d60e01b81526001600160a01b038316916340462a2d916134ab9190891590600401615903565b600060405180830381600087803b1580156134c557600080fd5b505af19250505080156134fa57506040513d6000823e601f3d908101601f191682016040526134f79190810190614f87565b60015b61356557613506615bb5565b806135115750613521565b61351b8282614752565b50613560565b613560816040518060400160405280601881526020017f6572722066696e616c697a652070726963652065706f63680000000000000000815250614752565b61358f565b87158015613574575060008351115b1561358b5791995097509550600194509250828787875b5050505b50505b6001016133fe565b5060006135a561460b565b9050821561374957602454601b546001600160a01b039091169063a9b79e1790889088908890877f00000000000000000000000000000000000000000000000000000000000000008860016135f9856147a3565b036136038b614506565b516040516001600160e01b031960e08c901b16815261362d99989796959493929190600401615711565b600060405180830381600087803b15801561364757600080fd5b505af1925050508015613658575060015b61374457613664615bb5565b8061366f57506136c6565b7f175a1d13d190d6a1e14461c214b3ecf6118b828797750b7bffd7c4f2c1eba54c83601b546040516136a29291906156ad565b60405180910390a16024546136c0906001600160a01b0316826131e1565b50613744565b7f175a1d13d190d6a1e14461c214b3ecf6118b828797750b7bffd7c4f2c1eba54c82601b546040516136f99291906156ad565b60405180910390a16024546040805180820190915260168152756572722064697374726962757465207265776172647360501b6020820152613744916001600160a01b0316906131e1565b613751565b6137516147f0565b600780546001600160a01b0319166001600160a01b0384161790556040517f98b050a4042fbd1b89934ef40b9342e593f15081a348af940573a0179031f4ad9061379e90849084906156ad565b60405180910390a15050505050505061388e565b60005b818110156138335760008382815181106137cb57fe5b6020908102919091018101516001600160a01b0381166000908152601790925260409091205490915060ff1615613820576001600160a01b03166000908152601760205260409020805460ff1916905561382b565b61382981614972565b505b6001016137b5565b5061383c6147f0565b600780546001600160a01b03191690557f98b050a4042fbd1b89934ef40b9342e593f15081a348af940573a0179031f4ad600061387761460b565b6040516138859291906156ad565b60405180910390a15b5050601d805460ff1916905550565b60006138a7612fa0565b905060008151905060006021546138c46138bf61460b565b614506565b602001514303816138d157fe5b049050806138dd575060015b60008185816138e857fe5b069050806138f4575060015b60408051606081018252438381038252602080830191825242838501908152600880546000908152600690935294822084518155925160018085019190915590516002909301929092558354909101909255905b848110156139d15785818151811061395c57fe5b60200260200101516001600160a01b031663e536f39683600001516040518263ffffffff1660e01b81526004016139939190615a32565b600060405180830381600087803b1580156139ad57600080fd5b505af11580156139c1573d6000803e3d6000fd5b5050600190920191506139489050565b50805160208201516040517f1813f880dc24666c8b69c9d771a487ea620a27fde1514be3112847056c0c532292613a09929091615a54565b60405180910390a1505060205460098054909101905550505050565b6000613a2f61460b565b60115490915042035b81602254108015613a5a575080613a53602254600101614506565b6040015111155b1561150457602454602254604051636b60edf760e11b81526001600160a01b039092169163d6c1dbee91613a9091600401615a32565b600060405180830381600087803b158015613aaa57600080fd5b505af1925050508015613abb575060015b613ba357613ac7615bb5565b80613ad25750613b27565b7fa819a21065ad87bdde9e6d398d3213e0d3634afd87aceb7092236483f5d7ca8d602254604051613b039190615a32565b60405180910390a1602454613b21906001600160a01b0316826131e1565b50611504565b7fa819a21065ad87bdde9e6d398d3213e0d3634afd87aceb7092236483f5d7ca8d602254604051613b589190615a32565b60405180910390a1602454604080518082019091526011815270195c9c8818db1bdcd948195e1c1a5c9959607a1b6020820152613b9e916001600160a01b0316906131e1565b611504565b602280546001019055613a38565b6000613bbe602254614506565b5160265460405163cbc31cf760e01b81529192506001600160a01b03169063cbc31cf790613bf0908490600401615a32565b600060405180830381600087803b158015613c0a57600080fd5b505af1925050508015613c1b575060015b610b1557613c27615bb5565b80613c325750613c85565b7f9f874ea08c7014cce74622bfe71434f81aba7598ad65126a6aea86945bdfa18d82604051613c619190615a32565b60405180910390a1602654613c7f906001600160a01b0316826131e1565b50610be7565b7f9f874ea08c7014cce74622bfe71434f81aba7598ad65126a6aea86945bdfa18d81604051613cb49190615a32565b60405180910390a16026546040805180820190915260158152746572722073657420636c65616e757020626c6f636b60581b6020820152610be7916001600160a01b0316906131e1565b6027546001600160a01b0316156108fa576000613d1961460b565b9050602760009054906101000a90046001600160a01b03166001600160a01b03166321eb1a956040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d6b57600080fd5b505af1925050508015613d7c575060015b610b1557613d88615bb5565b80613d935750613de0565b7ff7c7d6681321cc290eb89e8c96dba504436073b8bb277945cc32177e5181dd8482604051613dc29190615a32565b60405180910390a1602754613c7f906001600160a01b0316826131e1565b7ff7c7d6681321cc290eb89e8c96dba504436073b8bb277945cc32177e5181dd8481604051613e0f9190615a32565b60405180910390a160275460408051606081019091526022808252610be7926001600160a01b03169190615c9f60208301396131e1565b60145460ff168015613e5a5750600a544210155b15613ec357602354604051639ec2b58160e01b81526001600160a01b0390911690639ec2b58190613e909060139060040161577b565b600060405180830381600087803b158015613eaa57600080fd5b505af1158015613ebe573d6000803e3d6000fd5b505050505b6000613ecd612fa0565b805190915060008115801590613eed5750602754600160a01b900460ff16155b15613f86576000613eff6138bf61460b565b516025546040516237b08960e41b81529192506001600160a01b03169063037b089090613f30908490600401615a32565b602060405180830381600087803b158015613f4a57600080fd5b505af1158015613f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f829190615399565b9150505b60005b82811015614153576000848281518110613f9f57fe5b602090810291909101015160145490915060ff168015613fc15750600a544210155b1561405957600b54600c54600d54600e54600f546010546012546001600160a01b03881660008181526015602052604090819020549051632d1e4ec760e11b81529198635a3c9d8e986140269891979096919590949193909290601390600401615b1a565b600060405180830381600087803b15801561404057600080fd5b505af1158015614054573d6000803e3d6000fd5b505050505b806001600160a01b031663f670ebe384602760149054906101000a900460ff168061409c57506001600160a01b03841660009081526018602052604090205460ff165b6040518363ffffffff1660e01b81526004016140b9929190615903565b600060405180830381600087803b1580156140d357600080fd5b505af19250505080156140e4575060015b61414a576140f0615bb5565b806140fb575061410b565b6141058282614a0e565b5061414a565b61414a816040518060400160405280601981526020017f65727220696e69742065706f636820666f722072657665616c00000000000000815250614a0e565b50600101613f89565b5060145460ff1680156141685750600a544210155b15614178576014805460ff191690555b6000614182612a1b565b601b819055905061419281614c1f565b601c555050601d805460ff191660011790555050565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b838110156141ec5781810151838201526020016141d4565b50505050905090810190601f1680156142195780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b86518110156142815786818151811061424f57fe5b60200260200101518314156142795785818151811061426a57fe5b60200260200101519150614281565b60010161423a565b506001600160a01b0381166142cc576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61432a82826040518060400160405280600e81526020016d283934b1b2a9bab136b4ba3a32b960911b8152506141a8565b602360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614384828260405180604001604052806011815260200170233a39b7a932bbb0b93226b0b730b3b2b960791b8152506141a8565b602460006101000a8154816001600160a01b0302191690836001600160a01b031602179055506143d3828260405180604001604052806006815260200165537570706c7960d01b8152506141a8565b602560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061443982826040518060400160405280601981526020017f436c65616e7570426c6f636b4e756d6265724d616e61676572000000000000008152506141a8565b602660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061448e82826040518060400160405280600c81526020016b4674736f526567697374727960a01b8152506141a8565b601980546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152601081526f2b37ba32b92bb434ba32b634b9ba32b960811b60208201526144e290839083906141a8565b601a80546001600160a01b0319166001600160a01b03929092169190911790555050565b61450e614d7e565b5060008181526006602090815260409182902082516060810184528154815260018201549281019290925260020154918101829052906110145760008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a795f409866040518263ffffffff1660e01b81526004016145999190615a32565b60606040518083038186803b1580156145b157600080fd5b505afa1580156145c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e991906154e1565b6040805160608101825293845260208401929092529082015295945050505050565b6008546000190190565b604051630bc29bcf60e21b81526001600160a01b03821690632f0a6f3c906146a5907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615a7a565b600060405180830381600087803b1580156146bf57600080fd5b505af11580156146d3573d6000803e3d6000fd5b50505050600854600014610b1557806001600160a01b031663e536f3966146fb6138bf61460b565b516040516001600160e01b031960e084901b16815261471d9190600401615a32565b600060405180830381600087803b15801561473757600080fd5b505af115801561474b573d6000803e3d6000fd5b5050505050565b7f79f4c7cc43bfb79f5a3aad0d92f75b6fed7db061bb5cc2580a01c8132711b88182601b546001604051614788939291906158d4565b60405180910390a161479a82826131e1565b61150482614972565b7f0000000000000000000000000000000000000000000000000000000000000000600182017f00000000000000000000000000000000000000000000000000000000000000000201919050565b602454601b546001600160a01b03909116906367dcac53907f00000000000000000000000000000000000000000000000000000000000000006001614834836147a3565b036040518463ffffffff1660e01b815260040161485393929190615a7a565b600060405180830381600087803b15801561486d57600080fd5b505af192505050801561487e575060015b6108fa5761488a615bb5565b8061489557506148ea565b7f8eb60f903ef61e0e490d7d7ba6e5b85cd949ebece7a5e5b3346eb046c041413f601b546040516148c69190615a32565b60405180910390a16024546148e4906001600160a01b0316826131e1565b5061496d565b7f8eb60f903ef61e0e490d7d7ba6e5b85cd949ebece7a5e5b3346eb046c041413f601b5460405161491b9190615a32565b60405180910390a160245460408051808201909152601b81527f6572722061636372756520756e6561726e656420726577617264730000000000602082015261496d916001600160a01b0316906131e1565b6108fa565b601b5460405163257ea88160e11b81526001600160a01b03831691634afd5102916149a09190600401615a32565b600060405180830381600087803b1580156149ba57600080fd5b505af19250505080156149cb575060015b610b15576149d7615bb5565b806149e257506149ec565b613c7f8282614c8e565b610be781604051806060016040528060218152602001615d1260219139614c8e565b7f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46282614a38612a1b565b604051614a469291906156ad565b60405180910390a1614a5882826131e1565b602754600160a01b900460ff1680614a8857506001600160a01b03821660009081526018602052604090205460ff165b15614ab5576001600160a01b0382166000908152601760205260409020805460ff19166001179055611504565b60405163f670ebe360e01b81526001600160a01b0383169063f670ebe390614ae590600090600190600401615903565b600060405180830381600087803b158015614aff57600080fd5b505af1925050508015614b10575060015b61150457614b1c615bb5565b80614b275750614b9a565b6001600160a01b0383166000908152601760205260409020805460ff191660011790557f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46283614b74612a1b565b604051614b829291906156ad565b60405180910390a1614b9483826131e1565b50613b9e565b6001600160a01b0382166000908152601760205260409020805460ff191660011790557f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46282614be7612a1b565b604051614bf59291906156ad565b60405180910390a1613b9e82604051806060016040528060228152602001615c7d602291396131e1565b7f0000000000000000000000000000000000000000000000000000000000000000600182017f000000000000000000000000000000000000000000000000000000000000000002017f000000000000000000000000000000000000000000000000000000000000000001919050565b7f79f4c7cc43bfb79f5a3aad0d92f75b6fed7db061bb5cc2580a01c8132711b88182601b546002604051614cc4939291906158d4565b60405180910390a1614cd682826131e1565b601b5460405163974d7a6b60e01b81526001600160a01b0384169163974d7a6b91614d049190600401615a32565b600060405180830381600087803b158015614d1e57600080fd5b505af1158015614d32573d6000803e3d6000fd5b505050505050565b50805460018160011615610100020316600290046000825580601f10614d605750610b15565b601f016020900490600052602060002090810190610b159190614e80565b60405180606001604052806000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614dd55760008555614e1b565b82601f10614dee57805160ff1916838001178555614e1b565b82800160010185558215614e1b579182015b82811115614e1b578251825591602001919060010190614e00565b50614e27929150614e80565b5090565b828054828255906000526020600020908101928215614e1b579160200282015b82811115614e1b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e4b565b5b80821115614e275760008155600101614e81565b600082601f830112614ea5578081fd5b81356020614eba614eb583615b92565b615b6f565b8281528181019085830183850287018401881015614ed6578586fd5b855b85811015614efd578135614eeb81615c59565b84529284019290840190600101614ed8565b5090979650505050505050565b600082601f830112614f1a578081fd5b81516020614f2a614eb583615b92565b8281528181019085830183850287018401881015614f46578586fd5b855b85811015614efd57815184529284019290840190600101614f48565b600060208284031215614f75578081fd5b8135614f8081615c59565b9392505050565b600080600060608486031215614f9b578182fd5b83516001600160401b0380821115614fb1578384fd5b818601915086601f830112614fc4578384fd5b81516020614fd4614eb583615b92565b82815281810190858301838502870184018c1015614ff0578889fd5b8896505b8487101561501b57805161500781615c59565b835260019690960195918301918301614ff4565b5091890151919750909350505080821115615034578384fd5b5061504186828701614f0a565b925050604084015190509250925092565b60008060408385031215615064578182fd5b82356001600160401b038082111561507a578384fd5b818501915085601f83011261508d578384fd5b8135602061509d614eb583615b92565b82815281810190858301838502870184018b10156150b9578889fd5b8896505b848710156150db5780358352600196909601959183019183016150bd565b50965050860135925050808211156150f1578283fd5b506150fe85828601614e95565b9150509250929050565b600060208284031215615119578081fd5b81356001600160401b0381111561512e578182fd5b61513a84828501614e95565b949350505050565b60006020808385031215615154578182fd5b82516001600160401b03811115615169578283fd5b8301601f81018513615179578283fd5b8051615187614eb582615b92565b81815283810190838501858402850186018910156151a3578687fd5b8694505b838510156151ce5780516151ba81615c59565b8352600194909401939185019185016151a7565b50979650505050505050565b6000806000606084860312156151ee578081fd5b83356001600160401b03811115615203578182fd5b61520f86828701614e95565b935050602084013561522081615c6e565b9150604084013561523081615c6e565b809150509250925092565b60006020828403121561524c578081fd5b8135614f8081615c6e565b60008060408385031215615269578182fd5b823561527481615c6e565b946020939093013593505050565b600060208284031215615293578081fd5b81356001600160e01b031981168114614f80578182fd5b600080604083850312156152bc578182fd5b82356152c781615c59565b915060208301356001600160401b038111156152e1578182fd5b6150fe85828601614e95565b600080604083850312156152ff578182fd5b823561530a81615c59565b9150602083013561531a81615c6e565b809150509250929050565b600080600060608486031215615339578081fd5b833561534481615c59565b9250602084013561522081615c6e565b60008060408385031215615366578182fd5b823561537181615c59565b9150602083013561531a81615c59565b600060208284031215615392578081fd5b5035919050565b6000602082840312156153aa578081fd5b5051919050565b6000806000606084860312156153c5578081fd5b833592506020808501356001600160401b03808211156153e3578384fd5b6153ef88838901614e95565b94506040870135915080821115615404578384fd5b508501601f81018713615415578283fd5b8035615423614eb582615b92565b81815283810190838501858402850186018b101561543f578687fd5b8694505b83851015615461578035835260019490940193918501918501615443565b5080955050505050509250925092565b60008060408385031215615483578182fd5b82519150602083015161531a81615c6e565b600080604083850312156154a7578182fd5b50508035926020909101359150565b6000806000606084860312156154ca578081fd5b505081359360208301359350604090920135919050565b6000806000606084860312156154f5578081fd5b8351925060208401519150604084015190509250925092565b6000806000806000806000806000806101408b8d03121561552d578788fd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b013591506101208b01356001600160401b03811115615583578182fd5b61558f8d828e01614e95565b9150509295989b9194979a5092959850565b6000815180845260208085019450808401835b838110156155d95781516001600160a01b0316875295820195908201906001016155b4565b509495945050505050565b6000815480845260208085019450838352808320835b838110156155d95781546001600160a01b0316875295820195600191820191016155fa565b6000815180845260208085019450808401835b838110156155d957815187529582019590820190600101615632565b60008151808452815b8181101561567357602081850181015186830182015201615657565b818111156156845782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b038316815260406020820181905260009061513a9083018461564e565b600060018060a01b0385168252836020830152606060408301526142cc606083018461564e565b60006101208083526157258184018d6155a1565b90508281036020840152615739818c61561f565b604084019a909a52505060608101969096526001600160a01b0394909416608086015260a085019290925260c084015260e08301526101009091015292915050565b600060208252614f8060208301846155e4565b600060208252614f8060208301846155a1565b600060a082526157b460a083018861561f565b6020838203818501526157c7828961561f565b848103604086015287518082529092508183019082810284018301838a01865b8381101561581557601f1987840301855261580383835161564e565b948601949250908501906001016157e7565b50508681036060880152615829818a6155a1565b955050505050508260808301529695505050505050565b901515815260200190565b60008415158252602060608184015261586760608401866155a1565b8381036040850152845180825282860191830190845b8181101561589b57835115158352928401929184019160010161587d565b509098975050505050505050565b9115158252602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03841681526020810183905260608101600683106158f557fe5b826040830152949350505050565b9182521515602082015260400190565b600060208252614f80602083018461564e565b81518152602080830151908201526040918201519181019190915260600190565b60008382526040602083015261513a60408301846155a1565b8381526001600160a01b03831660208201526060604082018190526000906142cc908301846155a1565b92835260208301919091526001600160a01b0316604082015260600190565b94855260208501939093526001600160a01b03919091166040840152151560608301521515608082015260a00190565b95865260208601949094526001600160a01b039290921660408501521515606084015215156080830152151560a082015260c00190565b6001600160c01b039290921682526001600160401b0316602082015260400190565b90815260200190565b60008382526040602083015261513a604083018461564e565b918252602082015260400190565b92835260208301919091521515604082015260600190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b60006101608d83528c60208401528b60408401528a60608401528960808401528860a08401528760c08401528660e084015280610100840152615af8818401876155a1565b9415156101208401525050901515610140909101529998505050505050505050565b60006101208b83528a60208401528960408401528860608401528760808401528660a08401528560c08401528460e084015280610100840152615b5f818401856155e4565b9c9b505050505050505050505050565b6040518181016001600160401b0381118282101715615b8a57fe5b604052919050565b60006001600160401b03821115615ba557fe5b5060209081020190565b60e01c90565b600060443d1015615bc55761089c565b600481823e6308c379a0615bd98251615baf565b14615be35761089c565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c12575050505061089c565b82840192508251915080821115615c2c575050505061089c565b503d83016020828401011115615c445750505061089c565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114610b1557600080fd5b8015158114610b1557600080fdfe6572722066616c6c6261636b20696e69742065706f636820666f722072657665616c6572722063616c6c696e672075706461746541637469766556616c696461746f72736572722063616c6c696e67206368696c6c4e6f6e72657665616c696e674461746150726f7669646572735265776172642065706f6368206475726174696f6e20636f6e646974696f6e20696e76616c69646572722066616c6c6261636b2066696e616c697a652070726963652065706f6368a264697066735822122076907a0af1c83c43dfdaeea92a9588fe9297340a5b541346f9310e999dcc836a64736f6c634300070600335265776172642065706f6368206475726174696f6e20636f6e646974696f6e20696e76616c69645265776172642065706f636820737461727420636f6e646974696f6e20696e76616c6964", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061041d5760003560e01c806374e6310e1161022b578063b4dba0f311610130578063e371aef0116100b8578063f2edab5a11610087578063f2edab5a1461082c578063f5a983831461083f578063f5f5ba7214610847578063f937d6ad1461085c578063ff882fbb146108645761041d565b8063e371aef0146107e6578063e5399da3146107fc578063e7c830d41461081c578063ec31db0c146108245761041d565b8063d429cfe5116100ff578063d429cfe5146107a8578063d89c39e6146107bb578063e080a970146107c3578063e17f212e146107d6578063e22fdece146107de5761041d565b8063b4dba0f31461077b578063c2b0d47b14610783578063cb063fa21461078b578063ce69f833146107935761041d565b8063a157713b116101b3578063a90a38e111610182578063a90a38e114610727578063a93a6f421461073a578063af946af71461074d578063b00c0b7614610760578063b23b6ef1146107735761041d565b8063a157713b146106f1578063a578f55b146106f9578063a670ff8714610701578063a795f409146107145761041d565b8063882376c3116101fa578063882376c3146106975780638de306b1146106aa57806393a79025146106bd5780639d6a890f146106d6578063a1077532146106e95761041d565b806374e6310e14610648578063758ff1da14610669578063823033a91461067c57806385f3c9c91461068f5761041d565b80633e7ff857116103315780635ff27079116102b957806369b11ac61161028857806369b11ac6146105fb5780636b65cc34146106035780636ca051e6146106165780636d0e8c341461062d5780636ea0aa31146106355761041d565b80635ff27079146105c557806360f2c5b2146105d857806362354e03146105e057806367fc4029146105e85761041d565b80635267a15d116103005780635267a15d1461057b5780635835cf30146105835780635904089a146105a25780635aa6e675146105aa5780635bb44e9a146105b25761041d565b80633e7ff857146105415780633fdeb7e1146105495780634b48dd5e1461055c5780634eac870f146105735761041d565b8063144e1591116103b45780632b3c41a4116103835780632b3c41a4146104f25780632fd8eb7d1461050b578063361b5459146105135780633758e6791461052657806338b5f869146105395761041d565b8063144e1591146104aa57806315c29c5b146104c15780631cb513f7146104c95780632663f1b4146104df5761041d565b80630f15f4c0116103f05780630f15f4c0146104725780630f4ef8a61461047c5780631322679314610484578063132c7e1f146104975761041d565b806302fb0c5e14610422578063047fc9aa1461044057806308a7f402146104555780630e063d7d1461046a575b600080fd5b61042a610877565b6040516104379190615840565b60405180910390f35b610448610880565b6040516104379190615699565b61045d61088f565b6040516104379190615a32565b61044861089f565b61047a6108ae565b005b6104486108fc565b61047a61049236600461550e565b61090b565b61047a6104a5366004615381565b610a28565b6104b2610b18565b60405161043793929190615a7a565b61045d610b80565b6104d1610b86565b604051610437929190615a54565b61047a6104ed366004614f64565b610bad565b6104fa610bec565b6040516104379594939291906157a1565b610448610c27565b61047a610521366004615381565b610c36565b61047a610534366004615325565b610cc2565b610448610d11565b61045d610d20565b61047a610557366004614f64565b610d26565b610564610d75565b6040516104379392919061584b565b610448610e54565b610448610e63565b61058b610e88565b6040516104379b9a99989796959493929190615ab3565b610448610f57565b610448610f66565b61045d6105c0366004614f64565b610ffa565b61047a6105d3366004615282565b611019565b61045d61136e565b610448611374565b61047a6105f6366004615282565b61137f565b61045d611462565b61047a610611366004615354565b611467565b61061e611508565b60405161043793929190615a62565b61042a611519565b6104fa610643366004615495565b61191b565b61065b610656366004615282565b611c76565b604051610437929190615a3b565b61047a6106773660046151da565b611d1c565b61042a61068a366004614f64565b611d83565b61045d611da1565b61047a6106a53660046153b1565b611da7565b61047a6106b8366004615108565b611f76565b6106c5612014565b604051610437959493929190615a90565b61047a6106e4366004614f64565b6120a7565b610448612160565b61045d612184565b61045d61218a565b61047a61070f366004614f64565b6121ae565b6104b2610722366004615381565b61221a565b61047a610735366004615257565b612243565b61047a6107483660046152aa565b612380565b61047a61075b3660046152ed565b612417565b61047a61076e366004615052565b6124df565b61045d612586565b61044861258c565b6104486125b0565b61042a6125bf565b61079b6125cd565b604051610437919061578e565b61047a6107b6366004615108565b6125d7565b61045d61263e565b61047a6107d13660046154b6565b612644565b61042a6126d5565b61042a6126e5565b6107ee6127c3565b604051610437929190615a10565b61080f61080a366004615381565b6127e4565b6040516104379190615926565b61045d612855565b61045d6128bb565b61045d61083a366004615381565b6128c1565b61047a6128d3565b61084f61298d565b6040516104379190615913565b6104486129b2565b61047a61087236600461523b565b6129c1565b60055460ff1681565b6025546001600160a01b031681565b6000610899612a1b565b90505b90565b6023546001600160a01b031690565b600054600160b01b900460ff16806108d05750600054600160a81b900460ff16155b156108ef576108dd612a6e565b6005805460ff191660011790556108fa565b6108fa600036612aa3565b565b6024546001600160a01b031681565b600054600160b01b900460ff168061092d5750600054600160a81b900460ff16155b15610a115761093a612a6e565b60008911801561094a5750600088115b80156109565750868610155b801561096457506127108511155b801561097257506127108411155b801561098057506127108311155b801561098c5750600082115b801561099a57506005815111155b6040518060400160405280601381526020017211dbdd8b881c185c985b5cc81a5b9d985b1a59606a1b815250906109ed5760405162461bcd60e51b81526004016109e49190615913565b60405180910390fd5b506109f9600a8b612c26565b610a0c600a8a8a8a8a8a8a898b8a612c7b565b610a1c565b610a1c600036612aa3565b50505050505050505050565b600054600160b01b900460ff1680610a4a5750600054600160a81b900460ff16155b15610b0a57610a57612a6e565b60408051808201909152600e81526d05265776172642065706f636820360941b602082015281610a9a5760405162461bcd60e51b81526004016109e49190615913565b507f00000000000000000000000000000000000000000000000000000000000000008181610ac457fe5b06600014604051806060016040528060278152602001615ceb6027913990610aff5760405162461bcd60e51b81526004016109e49190615913565b506020819055610b15565b610b15600036612aa3565b50565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000909192565b601e5481565b6020547f000000000000000000000000000000000000000000000000000000000000000091565b600054600160b01b900460ff1680610bcf5750600054600160a81b900460ff16155b15610b0a57610bdc612a6e565b610be7816001612e9e565b610b15565b600454606090819081908190600090610c1690600160c01b90046001600160401b0316600161191b565b945094509450945094509091929394565b6007546001600160a01b031681565b600054600160b01b900460ff1680610c585750600054600160a81b900460ff16155b15610b0a57610c65612a6e565b60408051808201909152601e81527f566f746520706f77657220696e74657276616c206672616374696f6e20300000602082015281610cb75760405162461bcd60e51b81526004016109e49190615913565b506021819055610b15565b600054600160b01b900460ff1680610ce45750600054600160a81b900460ff16155b15610d0157610cf1612a6e565b610cfc838383612f1d565b610d0c565b610d0c600036612aa3565b505050565b6019546001600160a01b031690565b60225490565b600054600160b01b900460ff1680610d485750600054600160a81b900460ff16155b15610b0a57610d55612a6e565b602780546001600160a01b0319166001600160a01b038316179055610b15565b602754600160a01b900460ff16606080610d8d612fa0565b8051909250806001600160401b0381118015610da857600080fd5b50604051908082528060200260200182016040528015610dd2578160200160208202803683370190505b50915060005b81811015610e4d5760166002016000858381518110610df357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16838281518110610e3557fe5b91151560209283029190910190910152600101610dd8565b5050909192565b6026546001600160a01b031681565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b600b54600c54600d54600e54600f54601054601254601154601454601380546040805160208084028201810190925282815260009c8d9c8d9c8d9c8d9c8d9c8d9c8d9c60609c8e9c8d9c999b989a979996989597949693959294909360ff6101008404811694931692859190830182828015610f2d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f0f575b505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b6027546001600160a01b031681565b60008054600160a81b900460ff16610f89576000546001600160a01b0316610899565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d6020811015610ff357600080fd5b5051905090565b6001600160a01b0381166000908152601560205260409020545b919050565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d602081101561108757600080fd5b50516110ca576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054611136576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b805442101561118c576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112265780601f106111fb57610100808354040283529160200191611226565b820191906000526020600020905b81548152906001019060200180831161120957829003601f168201915b5050506001600160e01b031986166000908152600160208190526040822082815594955090925061125a9150830182614d3a565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b602083106112a25780518252601f199092019160209182019101611283565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611304576040519150601f19603f3d011682016040523d82523d6000602084013e611309565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a161136881613021565b50505050565b60215490565b60076001609c1b0181565b61138761303e565b6001600160e01b031981166000908152600160205260409020546113f2576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b03198116600090815260016020819052604082208281559190610d0c90830182614d3a565b600581565b600054600160b01b900460ff16806114895750600054600160a81b900460ff16155b156114f957611496612a6e565b60405163d0d552dd60e01b81526001600160a01b0383169063d0d552dd906114c2908490600401615699565b600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50505050611504565b611504600036612aa3565b5050565b601b54601c54601d5460ff16909192565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b60055460ff1661159e5750600061089c565b6008546115b2576115ad61309d565b611915565b601d546000908190819060ff1680156115cd575042601c5411155b156115db57600191506115f9565b601d5460ff161580156115f057504260095411155b156115f9575060015b81806116025750805b156118c557601d54610100900460ff1615611811576023546040805163a978fb6b60e01b815281516000936001600160a01b03169263a978fb6b9260048082019391829003018186803b15801561165857600080fd5b505afa15801561166c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116909190615471565b9094509050801580156116a05750825b156117c657602354601b546001600160a01b0390911690631c91efcf906116c5612a1b565b6040518363ffffffff1660e01b81526004016116e2929190615a54565b600060405180830381600087803b1580156116fc57600080fd5b505af192505050801561170d575060015b6117c157611719615bb5565b806117245750611769565b6040517f945e1930d717c550cfdc738b4226b97a96c13dd0e378d3fa3c3812ee430af46990600090a1602354611763906001600160a01b0316826131e1565b506117c1565b6040517f945e1930d717c550cfdc738b4226b97a96c13dd0e378d3fa3c3812ee430af46990600090a16023546040805160608101909152602a8082526117c1926001600160a01b03169190615cc160208301396131e1565b61180b565b811561180b578061180557601f546117e55742601f55600091506117c1565b42601e54601f5401116117fc576000601f556117c1565b6000915061180b565b6000601f555b506118c5565b602360009054906101000a90046001600160a01b03166001600160a01b031663d89601fd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185f57600080fd5b505afa158015611873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118979190615399565b42016040516020016118a99190615a32565b6040516020818303038152906040528051906020012060001c92505b81156118d9576118d4836133ba565b611911565b8015611900576118e88361389d565b6118f0613a25565b6118f8613bb1565b6118d4613cfe565b42601c541161191157611911613e46565b5050505b50600190565b606080606080600060038054905087106040518060400160405280601081526020016f0e6e8c2e4e840d2dcc8caf040d0d2ced60831b815250906119725760405162461bcd60e51b81526004016109e49190615913565b50600354600090888801111561198d5760035488900361198f565b865b9050806001600160401b03811180156119a757600080fd5b506040519080825280602002602001820160405280156119d1578160200160208202803683370190505b509550806001600160401b03811180156119ea57600080fd5b50604051908082528060200260200182016040528015611a14578160200160208202803683370190505b509450806001600160401b0381118015611a2d57600080fd5b50604051908082528060200260200182016040528015611a6157816020015b6060815260200190600190039081611a4c5790505b509350806001600160401b0381118015611a7a57600080fd5b50604051908082528060200260200182016040528015611aa4578160200160208202803683370190505b50925060005b81811015611c5a5760006003828b0181548110611ac357fe5b6000918252602080832090910154808352600290915260409091205489519192506001600160c01b031690899084908110611afa57fe5b6020026020010181815250506002600082815260200190815260200160002060000160189054906101000a90046001600160401b03166001600160401b0316878381518110611b4557fe5b602090810291909101810191909152600082815260028083526040918290208101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015611be75780601f10611bbc57610100808354040283529160200191611be7565b820191906000526020600020905b815481529060010190602001808311611bca57829003601f168201915b5050505050868381518110611bf857fe5b60200260200101819052506002600082815260200190815260200160002060010160009054906101000a90046001600160a01b0316858381518110611c3957fe5b6001600160a01b039092166020928302919091019091015250600101611aaa565b50506004549497939650919450926001600160c01b0316919050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f81018590048502860185019096528585529094919392909190830182828015611d125780601f10611ce757610100808354040283529160200191611d12565b820191906000526020600020905b815481529060010190602001808311611cf557829003601f168201915b5050505050905082565b600054600160b01b900460ff1680611d3e5750600054600160a81b900460ff16155b15610d0157611d4b612a6e565b60005b8351811015611d7d57611d75848281518110611d6657fe5b60200260200101518484612f1d565b600101611d4e565b50610d0c565b6001600160a01b031660009081526017602052604090205460ff1690565b60205481565b600054600160b01b900460ff1680611dc95750600054600160a81b900460ff16155b15610d0157611dd6612a6e565b80518251146040518060400160405280601a81526020017f6172726179206c656e6774687320646f206e6f74206d6174636800000000000081525090611e2f5760405162461bcd60e51b81526004016109e49190615913565b50611e3b600a84612c26565b60005b8251811015611d7d57620f4240828281518110611e5757fe5b602002602001015111156040518060400160405280601a81526020017f656c61737469632062616e6420776964746820696e76616c696400000000000081525090611eb55760405162461bcd60e51b81526004016109e49190615913565b50818181518110611ec257fe5b6020026020010151600a600b016000858481518110611edd57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205414611f6e576014805460ff191660011790558151829082908110611f2657fe5b6020026020010151600a600b016000858481518110611f4157fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b600101611e3e565b600054600160b01b900460ff1680611f985750600054600160a81b900460ff16155b15610b0a57611fa5612a6e565b60405163984626c360e01b815273__$03dc2144a91b115216397a255bda0073a6$__9063984626c390611fdf906016908590600401615947565b60006040518083038186803b158015611ff757600080fd5b505af415801561200b573d6000803e3d6000fd5b50505050610b15565b600080600080600080612025612a1b565b9550507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808702820195506001870102019250507f000000000000000000000000000000000000000000000000000000000000000082019050429091929394565b600054600160a01b900460ff16156120fd576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160b01b900460ff16806121d05750600054600160a81b900460ff16155b15610b0a576121dd612a6e565b604051630d6f6ead60e11b815273__$03dc2144a91b115216397a255bda0073a6$__90631adedd5a90611fdf90601690600a90869060040161598a565b600080600080612229856127e4565b805160208201516040909201519097919650945092505050565b600054600160b01b900460ff16806122655750600054600160a81b900460ff16155b156114f957612272612a6e565b81156122da5760008111801561228b57506203f4808111155b60405180604001604052806012815260200171696e76616c696420706172616d657465727360701b815250906122d45760405162461bcd60e51b81526004016109e49190615913565b50612329565b604080518082019091526012815271696e76616c696420706172616d657465727360701b602082015281156123225760405162461bcd60e51b81526004016109e49190615913565b506000601f555b601d805461ff00191661010084151502179055601e8190556040517f5c9bf067f2a8b23128e64d5ce119251f51d6c0c24e0d7bf430c2dd77df3ec0929061237390849084906158a9565b60405180910390a1611504565b600054600160b01b900460ff16806123a25750600054600160a81b900460ff16155b156114f9576123af612a6e565b604051636904d3eb60e11b815273__$03dc2144a91b115216397a255bda0073a6$__9063d209a7d6906123eb9060169086908690600401615960565b60006040518083038186803b15801561240357600080fd5b505af41580156114f0573d6000803e3d6000fd5b61241f61303e565b6001600160a01b0382166000908152601660209081526040918290205482518084019093526009835268139bdd08199bdd5b9960ba1b9183019190915260ff1661247c5760405162461bcd60e51b81526004016109e49190615913565b506001600160a01b03821660009081526018602052604090819020805460ff1916831515179055517f24462ede4d3e8e5a69fecec6290d42a311016ca752216d9a3d681e284791b7ac906124d390849084906158b9565b60405180910390a15050565b6124e7610e63565b6001600160a01b0316336001600160a01b031614612543576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b61257c61257783836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506141a8565b6142d5565b61150482826142f9565b601f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a546001600160a01b031690565b601d54610100900460ff1681565b6060610899612fa0565b600054600160b01b900460ff16806125f95750600054600160a81b900460ff16155b15610b0a57612606612a6e565b60005b81518110156126385761263082828151811061262157fe5b60200260200101516001612e9e565b600101612609565b50610b15565b60095481565b600054600160b01b900460ff16806126665750600054600160a81b900460ff16155b15610d0157612673612a6e565b600554604080518082019091526011815270105b1c9958591e481858dd1a5d985d1959607a1b60208201529060ff16156126c05760405162461bcd60e51b81526004016109e49190615913565b50602283905560088290556009819055610d0c565b600054600160a81b900460ff1681565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612758576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b602754600160a01b900460ff166127bd576027805460ff60a01b1916600160a01b1790556040517f217a37a37fc40a97159886f80c3d45986e6fc4330ce6ad7283478b5e5ab705bc906127ad90600190615840565b60405180910390a150600161089c565b50600090565b6004546001600160c01b03811690600160c01b90046001600160401b031682565b6127ec614d7e565b60085482106040518060400160405280602081526020017f5265776172642065706f6368206e6f7420696e697469616c697a656420796574815250906128455760405162461bcd60e51b81526004016109e49190615913565b5061284f82614506565b92915050565b6000600854600014156040518060400160405280602081526020017f5265776172642065706f6368206e6f7420696e697469616c697a656420796574815250906128b25760405162461bcd60e51b81526004016109e49190615913565b5061089961460b565b60115490565b60006128cc826127e4565b5192915050565b6128db61303e565b600054600160a81b900460ff161561293a576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b60408051808201909152600b81526a233a39b7a6b0b730b3b2b960a91b602082015290565b6023546001600160a01b031681565b6129c961303e565b6027805460ff60a01b1916600160a01b831515021790556040517f217a37a37fc40a97159886f80c3d45986e6fc4330ce6ad7283478b5e5ab705bc90612a10908390615840565b60405180910390a150565b60007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000420381612a6857fe5b04905090565b600054600160b01b900460ff1615612a9b57333014612a8957fe5b6000805460ff60b01b191690556108fa565b6108fa61303e565b612aab61303e565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af357600080fd5b505afa158015612b07573d6000803e3d6000fd5b505050506040513d6020811015612b1d57600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450612ba193928501920190614d9f565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b801580612c3257504281115b612c77576040805162461bcd60e51b8152602060048201526011602482015270696e76616c69642075706461746520747360781b604482015290519081900360640190fd5b9055565b888a6001015414612c9e57600a8a01805460ff191660019081179091558a018990555b878a6002015414612cc057600a8a01805460ff1916600117905560028a018890555b868a6003015414612ce257600a8a01805460ff1916600117905560038a018790555b858a6004015414612d0457600a8a01805460ff1916600117905560048a018690555b848a6005015414612d2657600a8a01805460ff1916600117905560058a018590555b838a6006015414612d4857600a8a01805460ff1916600117905560068a018490555b828a6007015414612d6a57600a8a01805460ff1916600117905560078a018390555b818a6008015414612d8c57600a8a01805460ff1916600117905560088a018290555b805160098b015414612dc2578051612dad9060098c01906020840190614e2b565b50600a8a01805460ff19166001179055612e81565b60005b8151811015612e7f57818181518110612dda57fe5b60200260200101516001600160a01b03168b6009018281548110612dfa57fe5b6000918252602090912001546001600160a01b031614612e7757600a8b01805460ff191660011790558151829082908110612e3157fe5b60200260200101518b6009018281548110612e4857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600101612dc5565b505b505050600a909601805461ff001916610100179055505050505050565b601d546040516306b8c18560e01b815273__$03dc2144a91b115216397a255bda0073a6$__916306b8c18591612ee491601691600a918891889160ff16906004016159a9565b60006040518083038186803b158015612efc57600080fd5b505af4158015612f10573d6000803e3d6000fd5b5050505061150482614615565b601d5460405163169ffdc760e21b815273__$03dc2144a91b115216397a255bda0073a6$__91635a7ff71c91612f6791601691600a9189918991899160ff909116906004016159d9565b60006040518083038186803b158015612f7f57600080fd5b505af4158015612f93573d6000803e3d6000fd5b50505050610d0c83614615565b60195460408051635200305d60e11b815290516060926001600160a01b03169163a40060ba916004808301926000929190829003018186803b158015612fe557600080fd5b505afa158015612ff9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190615142565b3d604051818101604052816000823e821561303a578181f35b8181fd5b613046610f66565b6001600160a01b0316336001600160a01b0316146108fa576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000042106108fa5760006130ce612fa0565b80516040805160608101825243600019810182526020808301918252428385019081526008805460009081526006909352948220845181559251600180850191909155905160029093019290925583549091019092559293509091905b828110156131b35783818151811061313f57fe5b60200260200101516001600160a01b031663e536f39683600001516040518263ffffffff1660e01b81526004016131769190615a32565b600060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b5050505080600101905061312b565b50506020547f0000000000000000000000000000000000000000000000000000000000000000016009555050565b600082826040516020016131f69291906156c6565b60408051601f198184030181528282528051602091820120600081815260029092529190208054436001600160c01b038181166001600160401b03600160c01b80860482166001019091160291909316176001600160c01b031916919091179091559092507f1a601cf5e0efbd558b2778b7389af04741d1c49bcab104c40daa2da1945936179161328a91869186906156ea565b60405180910390a1600480546001600160c01b0319811660016001600160c01b03928316810190921617909155600082815260026020526040902054600160c01b90046001600160401b031611156132e25750611504565b6003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01829055600082815260026020818152604090922092830180546001600160a01b0319166001600160a01b03881617905584516133529390910191850190614d9f565b50600354600091825260026020526040909120600101805467ffffffffffffffff60a01b1916600160a01b6000199093016001600160401b0390811684029190911791829055600480546001600160c01b03169390920416600160c01b029190911790555050565b60006133c4612fa0565b805190915080158015906133e25750602754600160a01b900460ff16155b156137b25760008184816133f257fe5b06905060608060008080805b8781101561359a576000888289018161341357fe5b06905060008a828151811061342457fe5b6020908102919091018101516001600160a01b0381166000908152601790925260409091205490915060ff161561347a576001600160a01b03166000908152601760205260409020805460ff1916905550613592565b601b546040516340462a2d60e01b81526001600160a01b038316916340462a2d916134ab9190891590600401615903565b600060405180830381600087803b1580156134c557600080fd5b505af19250505080156134fa57506040513d6000823e601f3d908101601f191682016040526134f79190810190614f87565b60015b61356557613506615bb5565b806135115750613521565b61351b8282614752565b50613560565b613560816040518060400160405280601881526020017f6572722066696e616c697a652070726963652065706f63680000000000000000815250614752565b61358f565b87158015613574575060008351115b1561358b5791995097509550600194509250828787875b5050505b50505b6001016133fe565b5060006135a561460b565b9050821561374957602454601b546001600160a01b039091169063a9b79e1790889088908890877f00000000000000000000000000000000000000000000000000000000000000008860016135f9856147a3565b036136038b614506565b516040516001600160e01b031960e08c901b16815261362d99989796959493929190600401615711565b600060405180830381600087803b15801561364757600080fd5b505af1925050508015613658575060015b61374457613664615bb5565b8061366f57506136c6565b7f175a1d13d190d6a1e14461c214b3ecf6118b828797750b7bffd7c4f2c1eba54c83601b546040516136a29291906156ad565b60405180910390a16024546136c0906001600160a01b0316826131e1565b50613744565b7f175a1d13d190d6a1e14461c214b3ecf6118b828797750b7bffd7c4f2c1eba54c82601b546040516136f99291906156ad565b60405180910390a16024546040805180820190915260168152756572722064697374726962757465207265776172647360501b6020820152613744916001600160a01b0316906131e1565b613751565b6137516147f0565b600780546001600160a01b0319166001600160a01b0384161790556040517f98b050a4042fbd1b89934ef40b9342e593f15081a348af940573a0179031f4ad9061379e90849084906156ad565b60405180910390a15050505050505061388e565b60005b818110156138335760008382815181106137cb57fe5b6020908102919091018101516001600160a01b0381166000908152601790925260409091205490915060ff1615613820576001600160a01b03166000908152601760205260409020805460ff1916905561382b565b61382981614972565b505b6001016137b5565b5061383c6147f0565b600780546001600160a01b03191690557f98b050a4042fbd1b89934ef40b9342e593f15081a348af940573a0179031f4ad600061387761460b565b6040516138859291906156ad565b60405180910390a15b5050601d805460ff1916905550565b60006138a7612fa0565b905060008151905060006021546138c46138bf61460b565b614506565b602001514303816138d157fe5b049050806138dd575060015b60008185816138e857fe5b069050806138f4575060015b60408051606081018252438381038252602080830191825242838501908152600880546000908152600690935294822084518155925160018085019190915590516002909301929092558354909101909255905b848110156139d15785818151811061395c57fe5b60200260200101516001600160a01b031663e536f39683600001516040518263ffffffff1660e01b81526004016139939190615a32565b600060405180830381600087803b1580156139ad57600080fd5b505af11580156139c1573d6000803e3d6000fd5b5050600190920191506139489050565b50805160208201516040517f1813f880dc24666c8b69c9d771a487ea620a27fde1514be3112847056c0c532292613a09929091615a54565b60405180910390a1505060205460098054909101905550505050565b6000613a2f61460b565b60115490915042035b81602254108015613a5a575080613a53602254600101614506565b6040015111155b1561150457602454602254604051636b60edf760e11b81526001600160a01b039092169163d6c1dbee91613a9091600401615a32565b600060405180830381600087803b158015613aaa57600080fd5b505af1925050508015613abb575060015b613ba357613ac7615bb5565b80613ad25750613b27565b7fa819a21065ad87bdde9e6d398d3213e0d3634afd87aceb7092236483f5d7ca8d602254604051613b039190615a32565b60405180910390a1602454613b21906001600160a01b0316826131e1565b50611504565b7fa819a21065ad87bdde9e6d398d3213e0d3634afd87aceb7092236483f5d7ca8d602254604051613b589190615a32565b60405180910390a1602454604080518082019091526011815270195c9c8818db1bdcd948195e1c1a5c9959607a1b6020820152613b9e916001600160a01b0316906131e1565b611504565b602280546001019055613a38565b6000613bbe602254614506565b5160265460405163cbc31cf760e01b81529192506001600160a01b03169063cbc31cf790613bf0908490600401615a32565b600060405180830381600087803b158015613c0a57600080fd5b505af1925050508015613c1b575060015b610b1557613c27615bb5565b80613c325750613c85565b7f9f874ea08c7014cce74622bfe71434f81aba7598ad65126a6aea86945bdfa18d82604051613c619190615a32565b60405180910390a1602654613c7f906001600160a01b0316826131e1565b50610be7565b7f9f874ea08c7014cce74622bfe71434f81aba7598ad65126a6aea86945bdfa18d81604051613cb49190615a32565b60405180910390a16026546040805180820190915260158152746572722073657420636c65616e757020626c6f636b60581b6020820152610be7916001600160a01b0316906131e1565b6027546001600160a01b0316156108fa576000613d1961460b565b9050602760009054906101000a90046001600160a01b03166001600160a01b03166321eb1a956040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d6b57600080fd5b505af1925050508015613d7c575060015b610b1557613d88615bb5565b80613d935750613de0565b7ff7c7d6681321cc290eb89e8c96dba504436073b8bb277945cc32177e5181dd8482604051613dc29190615a32565b60405180910390a1602754613c7f906001600160a01b0316826131e1565b7ff7c7d6681321cc290eb89e8c96dba504436073b8bb277945cc32177e5181dd8481604051613e0f9190615a32565b60405180910390a160275460408051606081019091526022808252610be7926001600160a01b03169190615c9f60208301396131e1565b60145460ff168015613e5a5750600a544210155b15613ec357602354604051639ec2b58160e01b81526001600160a01b0390911690639ec2b58190613e909060139060040161577b565b600060405180830381600087803b158015613eaa57600080fd5b505af1158015613ebe573d6000803e3d6000fd5b505050505b6000613ecd612fa0565b805190915060008115801590613eed5750602754600160a01b900460ff16155b15613f86576000613eff6138bf61460b565b516025546040516237b08960e41b81529192506001600160a01b03169063037b089090613f30908490600401615a32565b602060405180830381600087803b158015613f4a57600080fd5b505af1158015613f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f829190615399565b9150505b60005b82811015614153576000848281518110613f9f57fe5b602090810291909101015160145490915060ff168015613fc15750600a544210155b1561405957600b54600c54600d54600e54600f546010546012546001600160a01b03881660008181526015602052604090819020549051632d1e4ec760e11b81529198635a3c9d8e986140269891979096919590949193909290601390600401615b1a565b600060405180830381600087803b15801561404057600080fd5b505af1158015614054573d6000803e3d6000fd5b505050505b806001600160a01b031663f670ebe384602760149054906101000a900460ff168061409c57506001600160a01b03841660009081526018602052604090205460ff165b6040518363ffffffff1660e01b81526004016140b9929190615903565b600060405180830381600087803b1580156140d357600080fd5b505af19250505080156140e4575060015b61414a576140f0615bb5565b806140fb575061410b565b6141058282614a0e565b5061414a565b61414a816040518060400160405280601981526020017f65727220696e69742065706f636820666f722072657665616c00000000000000815250614a0e565b50600101613f89565b5060145460ff1680156141685750600a544210155b15614178576014805460ff191690555b6000614182612a1b565b601b819055905061419281614c1f565b601c555050601d805460ff191660011790555050565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b838110156141ec5781810151838201526020016141d4565b50505050905090810190601f1680156142195780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b86518110156142815786818151811061424f57fe5b60200260200101518314156142795785818151811061426a57fe5b60200260200101519150614281565b60010161423a565b506001600160a01b0381166142cc576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61432a82826040518060400160405280600e81526020016d283934b1b2a9bab136b4ba3a32b960911b8152506141a8565b602360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614384828260405180604001604052806011815260200170233a39b7a932bbb0b93226b0b730b3b2b960791b8152506141a8565b602460006101000a8154816001600160a01b0302191690836001600160a01b031602179055506143d3828260405180604001604052806006815260200165537570706c7960d01b8152506141a8565b602560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061443982826040518060400160405280601981526020017f436c65616e7570426c6f636b4e756d6265724d616e61676572000000000000008152506141a8565b602660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061448e82826040518060400160405280600c81526020016b4674736f526567697374727960a01b8152506141a8565b601980546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152601081526f2b37ba32b92bb434ba32b634b9ba32b960811b60208201526144e290839083906141a8565b601a80546001600160a01b0319166001600160a01b03929092169190911790555050565b61450e614d7e565b5060008181526006602090815260409182902082516060810184528154815260018201549281019290925260020154918101829052906110145760008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a795f409866040518263ffffffff1660e01b81526004016145999190615a32565b60606040518083038186803b1580156145b157600080fd5b505afa1580156145c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e991906154e1565b6040805160608101825293845260208401929092529082015295945050505050565b6008546000190190565b604051630bc29bcf60e21b81526001600160a01b03821690632f0a6f3c906146a5907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615a7a565b600060405180830381600087803b1580156146bf57600080fd5b505af11580156146d3573d6000803e3d6000fd5b50505050600854600014610b1557806001600160a01b031663e536f3966146fb6138bf61460b565b516040516001600160e01b031960e084901b16815261471d9190600401615a32565b600060405180830381600087803b15801561473757600080fd5b505af115801561474b573d6000803e3d6000fd5b5050505050565b7f79f4c7cc43bfb79f5a3aad0d92f75b6fed7db061bb5cc2580a01c8132711b88182601b546001604051614788939291906158d4565b60405180910390a161479a82826131e1565b61150482614972565b7f0000000000000000000000000000000000000000000000000000000000000000600182017f00000000000000000000000000000000000000000000000000000000000000000201919050565b602454601b546001600160a01b03909116906367dcac53907f00000000000000000000000000000000000000000000000000000000000000006001614834836147a3565b036040518463ffffffff1660e01b815260040161485393929190615a7a565b600060405180830381600087803b15801561486d57600080fd5b505af192505050801561487e575060015b6108fa5761488a615bb5565b8061489557506148ea565b7f8eb60f903ef61e0e490d7d7ba6e5b85cd949ebece7a5e5b3346eb046c041413f601b546040516148c69190615a32565b60405180910390a16024546148e4906001600160a01b0316826131e1565b5061496d565b7f8eb60f903ef61e0e490d7d7ba6e5b85cd949ebece7a5e5b3346eb046c041413f601b5460405161491b9190615a32565b60405180910390a160245460408051808201909152601b81527f6572722061636372756520756e6561726e656420726577617264730000000000602082015261496d916001600160a01b0316906131e1565b6108fa565b601b5460405163257ea88160e11b81526001600160a01b03831691634afd5102916149a09190600401615a32565b600060405180830381600087803b1580156149ba57600080fd5b505af19250505080156149cb575060015b610b15576149d7615bb5565b806149e257506149ec565b613c7f8282614c8e565b610be781604051806060016040528060218152602001615d1260219139614c8e565b7f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46282614a38612a1b565b604051614a469291906156ad565b60405180910390a1614a5882826131e1565b602754600160a01b900460ff1680614a8857506001600160a01b03821660009081526018602052604090205460ff165b15614ab5576001600160a01b0382166000908152601760205260409020805460ff19166001179055611504565b60405163f670ebe360e01b81526001600160a01b0383169063f670ebe390614ae590600090600190600401615903565b600060405180830381600087803b158015614aff57600080fd5b505af1925050508015614b10575060015b61150457614b1c615bb5565b80614b275750614b9a565b6001600160a01b0383166000908152601760205260409020805460ff191660011790557f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46283614b74612a1b565b604051614b829291906156ad565b60405180910390a1614b9483826131e1565b50613b9e565b6001600160a01b0382166000908152601760205260409020805460ff191660011790557f61156899176547b8075bfa81fa2996c6057ce9c71320884b11c0179d9dc2e46282614be7612a1b565b604051614bf59291906156ad565b60405180910390a1613b9e82604051806060016040528060228152602001615c7d602291396131e1565b7f0000000000000000000000000000000000000000000000000000000000000000600182017f000000000000000000000000000000000000000000000000000000000000000002017f000000000000000000000000000000000000000000000000000000000000000001919050565b7f79f4c7cc43bfb79f5a3aad0d92f75b6fed7db061bb5cc2580a01c8132711b88182601b546002604051614cc4939291906158d4565b60405180910390a1614cd682826131e1565b601b5460405163974d7a6b60e01b81526001600160a01b0384169163974d7a6b91614d049190600401615a32565b600060405180830381600087803b158015614d1e57600080fd5b505af1158015614d32573d6000803e3d6000fd5b505050505050565b50805460018160011615610100020316600290046000825580601f10614d605750610b15565b601f016020900490600052602060002090810190610b159190614e80565b60405180606001604052806000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614dd55760008555614e1b565b82601f10614dee57805160ff1916838001178555614e1b565b82800160010185558215614e1b579182015b82811115614e1b578251825591602001919060010190614e00565b50614e27929150614e80565b5090565b828054828255906000526020600020908101928215614e1b579160200282015b82811115614e1b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e4b565b5b80821115614e275760008155600101614e81565b600082601f830112614ea5578081fd5b81356020614eba614eb583615b92565b615b6f565b8281528181019085830183850287018401881015614ed6578586fd5b855b85811015614efd578135614eeb81615c59565b84529284019290840190600101614ed8565b5090979650505050505050565b600082601f830112614f1a578081fd5b81516020614f2a614eb583615b92565b8281528181019085830183850287018401881015614f46578586fd5b855b85811015614efd57815184529284019290840190600101614f48565b600060208284031215614f75578081fd5b8135614f8081615c59565b9392505050565b600080600060608486031215614f9b578182fd5b83516001600160401b0380821115614fb1578384fd5b818601915086601f830112614fc4578384fd5b81516020614fd4614eb583615b92565b82815281810190858301838502870184018c1015614ff0578889fd5b8896505b8487101561501b57805161500781615c59565b835260019690960195918301918301614ff4565b5091890151919750909350505080821115615034578384fd5b5061504186828701614f0a565b925050604084015190509250925092565b60008060408385031215615064578182fd5b82356001600160401b038082111561507a578384fd5b818501915085601f83011261508d578384fd5b8135602061509d614eb583615b92565b82815281810190858301838502870184018b10156150b9578889fd5b8896505b848710156150db5780358352600196909601959183019183016150bd565b50965050860135925050808211156150f1578283fd5b506150fe85828601614e95565b9150509250929050565b600060208284031215615119578081fd5b81356001600160401b0381111561512e578182fd5b61513a84828501614e95565b949350505050565b60006020808385031215615154578182fd5b82516001600160401b03811115615169578283fd5b8301601f81018513615179578283fd5b8051615187614eb582615b92565b81815283810190838501858402850186018910156151a3578687fd5b8694505b838510156151ce5780516151ba81615c59565b8352600194909401939185019185016151a7565b50979650505050505050565b6000806000606084860312156151ee578081fd5b83356001600160401b03811115615203578182fd5b61520f86828701614e95565b935050602084013561522081615c6e565b9150604084013561523081615c6e565b809150509250925092565b60006020828403121561524c578081fd5b8135614f8081615c6e565b60008060408385031215615269578182fd5b823561527481615c6e565b946020939093013593505050565b600060208284031215615293578081fd5b81356001600160e01b031981168114614f80578182fd5b600080604083850312156152bc578182fd5b82356152c781615c59565b915060208301356001600160401b038111156152e1578182fd5b6150fe85828601614e95565b600080604083850312156152ff578182fd5b823561530a81615c59565b9150602083013561531a81615c6e565b809150509250929050565b600080600060608486031215615339578081fd5b833561534481615c59565b9250602084013561522081615c6e565b60008060408385031215615366578182fd5b823561537181615c59565b9150602083013561531a81615c59565b600060208284031215615392578081fd5b5035919050565b6000602082840312156153aa578081fd5b5051919050565b6000806000606084860312156153c5578081fd5b833592506020808501356001600160401b03808211156153e3578384fd5b6153ef88838901614e95565b94506040870135915080821115615404578384fd5b508501601f81018713615415578283fd5b8035615423614eb582615b92565b81815283810190838501858402850186018b101561543f578687fd5b8694505b83851015615461578035835260019490940193918501918501615443565b5080955050505050509250925092565b60008060408385031215615483578182fd5b82519150602083015161531a81615c6e565b600080604083850312156154a7578182fd5b50508035926020909101359150565b6000806000606084860312156154ca578081fd5b505081359360208301359350604090920135919050565b6000806000606084860312156154f5578081fd5b8351925060208401519150604084015190509250925092565b6000806000806000806000806000806101408b8d03121561552d578788fd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b013591506101208b01356001600160401b03811115615583578182fd5b61558f8d828e01614e95565b9150509295989b9194979a5092959850565b6000815180845260208085019450808401835b838110156155d95781516001600160a01b0316875295820195908201906001016155b4565b509495945050505050565b6000815480845260208085019450838352808320835b838110156155d95781546001600160a01b0316875295820195600191820191016155fa565b6000815180845260208085019450808401835b838110156155d957815187529582019590820190600101615632565b60008151808452815b8181101561567357602081850181015186830182015201615657565b818111156156845782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b038316815260406020820181905260009061513a9083018461564e565b600060018060a01b0385168252836020830152606060408301526142cc606083018461564e565b60006101208083526157258184018d6155a1565b90508281036020840152615739818c61561f565b604084019a909a52505060608101969096526001600160a01b0394909416608086015260a085019290925260c084015260e08301526101009091015292915050565b600060208252614f8060208301846155e4565b600060208252614f8060208301846155a1565b600060a082526157b460a083018861561f565b6020838203818501526157c7828961561f565b848103604086015287518082529092508183019082810284018301838a01865b8381101561581557601f1987840301855261580383835161564e565b948601949250908501906001016157e7565b50508681036060880152615829818a6155a1565b955050505050508260808301529695505050505050565b901515815260200190565b60008415158252602060608184015261586760608401866155a1565b8381036040850152845180825282860191830190845b8181101561589b57835115158352928401929184019160010161587d565b509098975050505050505050565b9115158252602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03841681526020810183905260608101600683106158f557fe5b826040830152949350505050565b9182521515602082015260400190565b600060208252614f80602083018461564e565b81518152602080830151908201526040918201519181019190915260600190565b60008382526040602083015261513a60408301846155a1565b8381526001600160a01b03831660208201526060604082018190526000906142cc908301846155a1565b92835260208301919091526001600160a01b0316604082015260600190565b94855260208501939093526001600160a01b03919091166040840152151560608301521515608082015260a00190565b95865260208601949094526001600160a01b039290921660408501521515606084015215156080830152151560a082015260c00190565b6001600160c01b039290921682526001600160401b0316602082015260400190565b90815260200190565b60008382526040602083015261513a604083018461564e565b918252602082015260400190565b92835260208301919091521515604082015260600190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b60006101608d83528c60208401528b60408401528a60608401528960808401528860a08401528760c08401528660e084015280610100840152615af8818401876155a1565b9415156101208401525050901515610140909101529998505050505050505050565b60006101208b83528a60208401528960408401528860608401528760808401528660a08401528560c08401528460e084015280610100840152615b5f818401856155e4565b9c9b505050505050505050505050565b6040518181016001600160401b0381118282101715615b8a57fe5b604052919050565b60006001600160401b03821115615ba557fe5b5060209081020190565b60e01c90565b600060443d1015615bc55761089c565b600481823e6308c379a0615bd98251615baf565b14615be35761089c565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c12575050505061089c565b82840192508251915080821115615c2c575050505061089c565b503d83016020828401011115615c445750505061089c565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114610b1557600080fd5b8015158114610b1557600080fdfe6572722066616c6c6261636b20696e69742065706f636820666f722072657665616c6572722063616c6c696e672075706461746541637469766556616c696461746f72736572722063616c6c696e67206368696c6c4e6f6e72657665616c696e674461746150726f7669646572735265776172642065706f6368206475726174696f6e20636f6e646974696f6e20696e76616c69646572722066616c6c6261636b2066696e616c697a652070726963652065706f6368a264697066735822122076907a0af1c83c43dfdaeea92a9588fe9297340a5b541346f9310e999dcc836a64736f6c63430007060033", - "linkReferences": { - "contracts/ftso/lib/FtsoManagement.sol": { - "FtsoManagement": [ - { - "length": 20, - "start": 9924 - }, - { - "length": 20, - "start": 10492 - }, - { - "length": 20, - "start": 10958 - }, - { - "length": 20, - "start": 13760 - }, - { - "length": 20, - "start": 13887 - } - ] - } - }, - "deployedLinkReferences": { - "contracts/ftso/lib/FtsoManagement.sol": { - "FtsoManagement": [ - { - "length": 20, - "start": 8116 - }, - { - "length": 20, - "start": 8684 - }, - { - "length": 20, - "start": 9150 - }, - { - "length": 20, - "start": 11952 - }, - { - "length": 20, - "start": 12079 - } - ] - } - } -} diff --git a/artifacts/contracts/protocol/implementation/FlareSystemsManager.sol/FlareSystemsManager.json b/artifacts/contracts/protocol/implementation/FlareSystemsManager.sol/FlareSystemsManager.json new file mode 100644 index 0000000..8de0fdb --- /dev/null +++ b/artifacts/contracts/protocol/implementation/FlareSystemsManager.sol/FlareSystemsManager.json @@ -0,0 +1,1991 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FlareSystemsManager", + "sourceName": "contracts/protocol/implementation/FlareSystemsManager.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IGovernanceSettings", + "name": "_governanceSettings", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialGovernance", + "type": "address" + }, + { + "internalType": "address", + "name": "_addressUpdater", + "type": "address" + }, + { + "internalType": "address", + "name": "_flareDaemon", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint16", + "name": "randomAcquisitionMaxDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "randomAcquisitionMaxDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "newSigningPolicyInitializationStartSeconds", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "newSigningPolicyMinNumberOfVotingRoundsDelay", + "type": "uint8" + }, + { + "internalType": "uint16", + "name": "voterRegistrationMinDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "voterRegistrationMinDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "submitUptimeVoteMinDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "submitUptimeVoteMinDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint24", + "name": "signingPolicyThresholdPPM", + "type": "uint24" + }, + { + "internalType": "uint16", + "name": "signingPolicyMinNumberOfVoters", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "rewardExpiryOffsetSeconds", + "type": "uint32" + } + ], + "internalType": "struct FlareSystemsManager.Settings", + "name": "_settings", + "type": "tuple" + }, + { + "internalType": "uint32", + "name": "_firstVotingRoundStartTs", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "_votingEpochDurationSeconds", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "_firstRewardEpochStartVotingRoundId", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "_rewardEpochDurationInVotingEpochs", + "type": "uint16" + }, + { + "components": [ + { + "internalType": "uint16", + "name": "initialRandomVotePowerBlockSelectionSize", + "type": "uint16" + }, + { + "internalType": "uint24", + "name": "initialRewardEpochId", + "type": "uint24" + }, + { + "internalType": "uint16", + "name": "initialRewardEpochThreshold", + "type": "uint16" + } + ], + "internalType": "struct FlareSystemsManager.InitialSettings", + "name": "_initialSettings", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + } + ], + "name": "ClosingExpiredRewardEpochFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allowedAfterTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedCall", + "type": "bytes" + } + ], + "name": "GovernanceCallTimelocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "initialGovernance", + "type": "address" + } + ], + "name": "GovernanceInitialised", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "governanceSettings", + "type": "address" + } + ], + "name": "GovernedProductionModeEntered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "RandomAcquisitionStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "startVotingRoundId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "RewardEpochStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "signingPolicyAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rewardsHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "rewardManagerId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "noOfWeightBasedClaims", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IFlareSystemsManager.NumberOfWeightBasedClaims[]", + "name": "noOfWeightBasedClaims", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "thresholdReached", + "type": "bool" + } + ], + "name": "RewardsSigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "blockNumber", + "type": "uint64" + } + ], + "name": "SettingCleanUpBlockNumberFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "SignUptimeVoteEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "signingPolicyAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "thresholdReached", + "type": "bool" + } + ], + "name": "SigningPolicySigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "TimelockedGovernanceCallCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "TimelockedGovernanceCallExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + } + ], + "name": "TriggeringVoterRegistrationFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "signingPolicyAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "uptimeVoteHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "thresholdReached", + "type": "bool" + } + ], + "name": "UptimeVoteSigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "signingPolicyAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes20[]", + "name": "nodeIds", + "type": "bytes20[]" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "UptimeVoteSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "votePowerBlock", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "VotePowerBlockSelected", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "cancelGovernanceCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cleanupBlockNumberManager", + "outputs": [ + { + "internalType": "contract IICleanupBlockNumberManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentRewardEpochExpectedEndTs", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "daemonize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "executeGovernanceCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "firstRewardEpochStartTs", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstVotingRoundStartTs", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flareDaemon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAddressUpdater", + "outputs": [ + { + "internalType": "address", + "name": "_addressUpdater", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContractName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentRewardEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentRewardEpochId", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentVotingEpochId", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + } + ], + "name": "getRandomAcquisitionInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_randomAcquisitionStartTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_randomAcquisitionStartBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_randomAcquisitionEndTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_randomAcquisitionEndBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + } + ], + "name": "getRewardEpochStartInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_rewardEpochStartTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_rewardEpochStartBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRewardEpochSwitchoverTriggerContracts", + "outputs": [ + { + "internalType": "contract IIRewardEpochSwitchoverTrigger[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + } + ], + "name": "getRewardsSignInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_rewardsSignStartTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_rewardsSignStartBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_rewardsSignEndTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_rewardsSignEndBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "name": "getSeed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + } + ], + "name": "getSigningPolicySignInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_signingPolicySignStartTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_signingPolicySignStartBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_signingPolicySignEndTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_signingPolicySignEndBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "name": "getStartVotingRoundId", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + } + ], + "name": "getUptimeVoteSignStartInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_uptimeVoteSignStartTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_uptimeVoteSignStartBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "name": "getVotePowerBlock", + "outputs": [ + { + "internalType": "uint64", + "name": "_votePowerBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "name": "getVoterRegistrationData", + "outputs": [ + { + "internalType": "uint256", + "name": "_votePowerBlock", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_enabled", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "address", + "name": "_voter", + "type": "address" + } + ], + "name": "getVoterRewardsSignInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_rewardsSignTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_rewardsSignBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "address", + "name": "_voter", + "type": "address" + } + ], + "name": "getVoterSigningPolicySignInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_signingPolicySignTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_signingPolicySignBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "address", + "name": "_voter", + "type": "address" + } + ], + "name": "getVoterUptimeVoteSignInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_uptimeVoteSignTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_uptimeVoteSignBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "address", + "name": "_voter", + "type": "address" + } + ], + "name": "getVoterUptimeVoteSubmitInfo", + "outputs": [ + { + "internalType": "uint64", + "name": "_uptimeVoteSubmitTs", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_uptimeVoteSubmitBlock", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governance", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governanceSettings", + "outputs": [ + { + "internalType": "contract IGovernanceSettings", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialRandomVotePowerBlockSelectionSize", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGovernanceSettings", + "name": "_governanceSettings", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialGovernance", + "type": "address" + } + ], + "name": "initialise", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isExecutor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isVoterRegistrationEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastInitializedVotingRoundId", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "newSigningPolicyInitializationStartSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "newSigningPolicyMinNumberOfVotingRoundsDelay", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rewardEpochId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardManagerId", + "type": "uint256" + } + ], + "name": "noOfWeightBasedClaims", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rewardEpochId", + "type": "uint256" + } + ], + "name": "noOfWeightBasedClaimsHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "productionMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "randomAcquisitionMaxDurationBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "randomAcquisitionMaxDurationSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relay", + "outputs": [ + { + "internalType": "contract IIRelay", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardEpochDurationSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardEpochIdToExpireNext", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardExpiryOffsetSeconds", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardManager", + "outputs": [ + { + "internalType": "contract IIRewardManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rewardEpochId", + "type": "uint256" + } + ], + "name": "rewardsHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IIRewardEpochSwitchoverTrigger[]", + "name": "_contracts", + "type": "address[]" + } + ], + "name": "setRewardEpochSwitchoverTriggerContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "rewardManagerId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "noOfWeightBasedClaims", + "type": "uint256" + } + ], + "internalType": "struct IFlareSystemsManager.NumberOfWeightBasedClaims[]", + "name": "_noOfWeightBasedClaims", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_rewardsHash", + "type": "bytes32" + } + ], + "name": "setRewardsData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_submit3Aligned", + "type": "bool" + } + ], + "name": "setSubmit3Aligned", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_triggerExpirationAndCleanup", + "type": "bool" + } + ], + "name": "setTriggerExpirationAndCleanup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IIVoterRegistrationTrigger", + "name": "_contract", + "type": "address" + } + ], + "name": "setVoterRegistrationTriggerContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "bytes32", + "name": "_newSigningPolicyHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct IFlareSystemsManager.Signature", + "name": "_signature", + "type": "tuple" + } + ], + "name": "signNewSigningPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "rewardManagerId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "noOfWeightBasedClaims", + "type": "uint256" + } + ], + "internalType": "struct IFlareSystemsManager.NumberOfWeightBasedClaims[]", + "name": "_noOfWeightBasedClaims", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_rewardsHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct IFlareSystemsManager.Signature", + "name": "_signature", + "type": "tuple" + } + ], + "name": "signRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "bytes32", + "name": "_uptimeVoteHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct IFlareSystemsManager.Signature", + "name": "_signature", + "type": "tuple" + } + ], + "name": "signUptimeVote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "signingPolicyMinNumberOfVoters", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "signingPolicyThresholdPPM", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submission", + "outputs": [ + { + "internalType": "contract IISubmission", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submit3Aligned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "bytes20[]", + "name": "_nodeIds", + "type": "bytes20[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct IFlareSystemsManager.Signature", + "name": "_signature", + "type": "tuple" + } + ], + "name": "submitUptimeVote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "submitUptimeVoteMinDurationBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submitUptimeVoteMinDurationSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "switchToFallbackMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "switchToProductionMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "timelockedCalls", + "outputs": [ + { + "internalType": "uint256", + "name": "allowedAfterTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "encodedCall", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "triggerExpirationAndCleanup", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_contractNameHashes", + "type": "bytes32[]" + }, + { + "internalType": "address[]", + "name": "_contractAddresses", + "type": "address[]" + } + ], + "name": "updateContractAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint16", + "name": "randomAcquisitionMaxDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "randomAcquisitionMaxDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "newSigningPolicyInitializationStartSeconds", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "newSigningPolicyMinNumberOfVotingRoundsDelay", + "type": "uint8" + }, + { + "internalType": "uint16", + "name": "voterRegistrationMinDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "voterRegistrationMinDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "submitUptimeVoteMinDurationSeconds", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "submitUptimeVoteMinDurationBlocks", + "type": "uint16" + }, + { + "internalType": "uint24", + "name": "signingPolicyThresholdPPM", + "type": "uint24" + }, + { + "internalType": "uint16", + "name": "signingPolicyMinNumberOfVoters", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "rewardExpiryOffsetSeconds", + "type": "uint32" + } + ], + "internalType": "struct FlareSystemsManager.Settings", + "name": "_settings", + "type": "tuple" + } + ], + "name": "updateSettings", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rewardEpochId", + "type": "uint256" + } + ], + "name": "uptimeVoteHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voterRegistrationMinDurationBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voterRegistrationMinDurationSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voterRegistrationTriggerContract", + "outputs": [ + { + "internalType": "contract IIVoterRegistrationTrigger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voterRegistry", + "outputs": [ + { + "internalType": "contract IIVoterRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingEpochDurationSeconds", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x610140604052600a805461ffff60281b1916650100000000001790553480156200002857600080fd5b5060405162006b5738038062006b578339810160408190526200004b916200091e565b878a8a6200005a8282620003c2565b50620000869050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038716620000d75760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008261ffff16116200012d5760405162461bcd60e51b815260206004820152601a60248201527f7265776172642065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000ce565b60008460ff1611620001825760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000ce565b805161ffff16620001c45760405162461bcd60e51b815260206004820152600b60248201526a7a65726f20626c6f636b7360a81b6044820152606401620000ce565b620001cf8662000537565b6001600160a01b03871660805263ffffffff851660e05260ff8416610100819052620001fc908462000afb565b62000208908662000b26565b63ffffffff1660a0526200022460ff851661ffff841662000b4d565b6001600160401b031660c052805161ffff166101205260208101516200024c90600162000b73565b600a8054602084015165ffffffffffff60981b19909116600160981b62ffffff9485160262ffffff60b01b191617600160b01b9382169390930292909217905560c051906200029d90600162000b73565b62ffffff16620002ae919062000b4d565b60a051620002bd919062000b92565b600a8054600160381b600160781b0319166701000000000000006001600160401b03939093169290920291909117905560408181015160208084015162ffffff1660009081526003909152829020600501805461ffff60601b19166c0100000000000000000000000061ffff93841602179055908701516200034191164262000bb5565b600a5467010000000000000090046001600160401b031611620003b25760405162461bcd60e51b815260206004820152602260248201527f7265776172642065706f636820656e64206e6f7420696e207468652066757475604482015261726560f01b6064820152608401620000ce565b5050505050505050505062000beb565b600054600160a01b900460ff16156200041e5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000ce565b6001600160a01b038216620004765760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000ce565b6001600160a01b038116620004c15760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000ce565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b620f424081610100015162ffffff1611156200058b5760405162461bcd60e51b81526020600482015260126024820152710e8d0e4cae6d0ded8c840e8dede40d0d2ced60731b6044820152606401620000ce565b600081610120015161ffff161180156200063b5750600b546001600160a01b031615806200063b575080610120015161ffff16600b60009054906101000a90046001600160a01b03166001600160a01b031663d5e50a636040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000638919062000bd1565b10155b620006895760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e756d626572206f6620766f7465727300000000000000006044820152606401620000ce565b4281610140015163ffffffff161115620006d85760405162461bcd60e51b815260206004820152600f60248201526e65787069727920746f6f206c6f6e6760881b6044820152606401620000ce565b80516008805460208401516040850151606086015161014087015161ffff9687166001600160801b0319958616179387166801000000000000000090810294909417600160801b600160e01b031916928716600160801b90810263ffffffff60c01b19169390931760ff909216600160c01b908102929092176001600160e01b0316600160e01b63ffffffff909216919091021790945560808601516009805460a089015160c08a015160e08b0151948a169290971691909117908816909402939093176001600160801b03169386169091026001600160c01b031692909217918416909202179055610100820151600a80546101209094015162ffffff90921664ffffffffff199094169390931763010000009190921602179055565b6001600160a01b03811681146200080c57600080fd5b50565b60405161016081016001600160401b03811182821017156200084157634e487b7160e01b600052604160045260246000fd5b60405290565b805161ffff811681146200085a57600080fd5b919050565b805160ff811681146200085a57600080fd5b805162ffffff811681146200085a57600080fd5b805163ffffffff811681146200085a57600080fd5b600060608284031215620008ad57600080fd5b604051606081016001600160401b0381118282101715620008de57634e487b7160e01b600052604160045260246000fd5b604052905080620008ef8362000847565b8152620008ff6020840162000871565b6020820152620009126040840162000847565b60408201525092915050565b6000806000806000806000806000808a8c036102c08112156200094057600080fd5b8b516200094d81620007f6565b60208d0151909b506200096081620007f6565b60408d0151909a506200097381620007f6565b60608d01519099506200098681620007f6565b9750610160607f19820112156200099c57600080fd5b50620009a76200080f565b620009b560808d0162000847565b8152620009c560a08d0162000847565b6020820152620009d860c08d0162000847565b6040820152620009eb60e08d016200085f565b6060820152620009ff6101008d0162000847565b608082015261012062000a14818e0162000847565b60a083015261014062000a29818f0162000847565b60c084015262000a3d6101608f0162000847565b60e084015262000a516101808f0162000871565b61010084015262000a666101a08f0162000847565b8284015262000a796101c08f0162000885565b9083015250955062000a8f6101e08c0162000885565b945062000aa06102008c016200085f565b935062000ab16102208c0162000885565b925062000ac26102408c0162000847565b915062000ad48c6102608d016200089a565b90509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b63ffffffff81811683821602808216919082811462000b1e5762000b1e62000ae5565b505092915050565b63ffffffff81811683821601908082111562000b465762000b4662000ae5565b5092915050565b6001600160401b0381811683821602808216919082811462000b1e5762000b1e62000ae5565b62ffffff81811683821601908082111562000b465762000b4662000ae5565b6001600160401b0381811683821601908082111562000b465762000b4662000ae5565b8082018082111562000bcb5762000bcb62000ae5565b92915050565b60006020828403121562000be457600080fd5b5051919050565b60805160a05160c05160e0516101005161012051615ed662000c8160003960008181610c540152613bbd01526000818161070c015281816137160152614b5f015260008181610cb2015281816137400152614b1a01526000818161088101528181611def0152818161357001526141ac01526000818161085a015261359a0152600081816109890152613aed0152615ed66000f3fe608060405234801561001057600080fd5b50600436106104485760003560e01c806388e49ac711610241578063d10e807f1161013b578063e0d4ea37116100c3578063ed54fd6311610087578063ed54fd6314610cd4578063ef88bf1314610cee578063f21d630414610d01578063f5a9838314610d10578063f5f5ba7214610d1857600080fd5b8063e0d4ea3714610c76578063e17f212e14610c89578063e22fdece14610c9d578063e7c830d414610ca5578063e8d0e70a14610cad57600080fd5b8063d8a01a0a1161010a578063d8a01a0a14610bbb578063dac4319d14610bd5578063dc5a422514610c29578063debfda3014610c3c578063ded7c4b814610c4f57600080fd5b8063d10e807f14610b1d578063d2e9ad7114610b37578063d346691114610b88578063d4be6faa14610ba857600080fd5b8063a733d54b116101c9578063be60040e1161018d578063be60040e14610a75578063c00a1a9714610a88578063c263221614610a9b578063c581e79114610aae578063c9f1d2aa14610ad957600080fd5b8063a733d54b146109d1578063aec84ab6146109e8578063b00c0b76146109fe578063b59589d114610a11578063b6c25af014610a2457600080fd5b80639b760d13116102105780639b760d131461095d5780639dd6850f14610971578063a107753214610984578063a219fe02146109ab578063a72b826e146109be57600080fd5b806388e49ac7146108a35780638f8f9f3a146108b65780638fbaf860146109375780639a7590971461094a57600080fd5b80634f923d371161035257806367fc4029116102da57806374e6310e1161029e57806374e6310e1461080157806375d2187a14610822578063787173e71461083557806379e047ed1461085557806385f3c9c91461087c57600080fd5b806367fc40291461079d5780636aeffddc146107b05780636b4c7bd6146107ca5780636d0e8c34146107dd57806370562697146107e557600080fd5b80635aa6e675116103215780635aa6e6751461072e5780635ff270791461073657806362354e0314610749578063647006e21461075c57806367daec891461078a57600080fd5b80634f923d37146106755780635267a15d1461068c57806359db0e2f146106b35780635a8320881461070757600080fd5b80632e3645f8116103d557806346831531116103a45780634683153114610602578063490344f4146106175780634c528765146106315780634eac870f1461064b5780634eaee3071461065e57600080fd5b80632e3645f8146105975780634134520b146105bf57806341c05ad5146105dc5780634615d5e9146105ef57600080fd5b80630f4ef8a61161041c5780630f4ef8a614610508578063107d8ffb146105335780631703a788146105495780631916e9151461057157806324eb64de1461058457600080fd5b8062ddae531461044d57806306886f41146104b057806309505d25146104c5578063098e7ff6146104dd575b600080fd5b61048b61045b366004614f7d565b62ffffff16600090815260036020819052604090912001546001600160401b0380821692600160401b9092041690565b604080516001600160401b039384168152929091166020830152015b60405180910390f35b6104c36104be366004614fe3565b610d4d565b005b6104cd610ee4565b60405190151581526020016104a7565b6008546104f0906001600160401b031681565b6040516001600160401b0390911681526020016104a7565b600e5461051b906001600160a01b031681565b6040516001600160a01b0390911681526020016104a7565b600a546104cd9065010000000000900460ff1681565b61055c610557366004615024565b610f21565b604080519283529015156020830152016104a7565b61048b61057f366004615052565b610f51565b6104c3610592366004615089565b611053565b600a546105ac906301000000900461ffff1681565b60405161ffff90911681526020016104a7565b6105c76110ae565b60405163ffffffff90911681526020016104a7565b61048b6105ea366004615052565b6110bd565b6105ac6105fd366004615024565b611123565b61060a611155565b6040516104a791906150a6565b6008546104f090600160401b90046001600160401b031681565b6009546104f090600160801b90046001600160401b031681565b600f5461051b906001600160a01b031681565b6008546105c790600160e01b900463ffffffff1681565b600a546105c790600160781b900463ffffffff1681565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461051b565b61048b6106c1366004615052565b62ffffff90911660009081526003602090815260408083206001600160a01b0390941683526009909301905220546001600160401b0380821692600160401b9092041690565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b61051b6111b7565b6104c36107443660046150e7565b61124e565b60005461051b906001600160a01b031681565b61077c61076a366004615024565b60056020526000908152604090205481565b6040519081526020016104a7565b6104c361079836600461511f565b6114ce565b6104c36107ab3660046150e7565b61151a565b6008546104f090600160801b90046001600160401b031681565b6104c36107d836600461514e565b6115fb565b6104cd611917565b6107ed612589565b60405162ffffff90911681526020016104a7565b61081461080f3660046150e7565b612593565b6040516104a79291906151db565b6105c7610830366004615024565b612638565b61077c610843366004615024565b60076020526000908152604090205481565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b60105461051b906001600160a01b031681565b6109046108c4366004614f7d565b62ffffff166000908152600360205260409020546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016104a7565b6104c36109453660046152ab565b612668565b600c5461051b906001600160a01b031681565b600a546104cd90600160301b900460ff1681565b6104c361097f366004615385565b6126a0565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6009546104f0906001600160401b031681565b6104c36109cc36600461511f565b612826565b6008546105c790600160c01b900463ffffffff1681565b600a546107ed90600160981b900462ffffff1681565b6104c3610a0c366004615481565b612873565b600d5461051b906001600160a01b031681565b610904610a32366004614f7d565b62ffffff166000908152600360205260409020600201546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b600b5461051b906001600160a01b031681565b6104c3610a9636600461557d565b61294e565b6104f0610aa9366004615024565b612c21565b61077c610abc3660046155eb565b600660209081526000928352604080842090915290825290205481565b61048b610ae7366004614f7d565b62ffffff16600090815260036020819052604090912001546001600160401b03600160801b8204811692600160c01b9092041690565b6009546104f090600160401b90046001600160401b031681565b610904610b45366004614f7d565b62ffffff166000908152600360205260409020600101546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b61077c610b96366004615024565b60046020526000908152604090205481565b6104c3610bb636600461560d565b612c9d565b6009546104f090600160c01b90046001600160401b031681565b61048b610be3366004615052565b62ffffff90911660009081526003602090815260408083206001600160a01b0390941683526007909301905220546001600160401b0380821692600160401b9092041690565b6104c3610c3736600461514e565b612ccd565b6104cd610c4a366004615089565b613089565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b61077c610c84366004615024565b613112565b6000546104cd90600160a81b900460ff1681565b6104cd613191565b61077c6131a1565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b600a546104f090600160381b90046001600160401b031681565b6104c3610cfc366004615666565b6131b5565b600a546107ed9062ffffff1681565b6104c361331b565b6040805180820182526013815272233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b602082015290516104a79190615684565b600054600160b01b900460ff1680610d6f5750600054600160a81b900460ff16155b15610ed557610d7c6133e1565b610d8860116000614f01565b8060005b81811015610ecf576000848483818110610da857610da8615697565b9050602002016020810190610dbd9190615089565b90506000610dcc8360016156c3565b90505b83811015610e6c57858582818110610de957610de9615697565b9050602002016020810190610dfe9190615089565b6001600160a01b0316826001600160a01b031603610e5a5760405162461bcd60e51b81526020600482015260146024820152736475706c69636174656420636f6e74726163747360601b60448201526064015b60405180910390fd5b80610e64816156d6565b915050610dcf565b50601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b039290921691909117905580610ec7816156d6565b915050610d8c565b50505050565b610ee060003661341b565b5050565b600080610eef613567565b610efa9060016156ef565b62ffffff166000818152600360205260409020909150610f1b9082906135fb565b91505090565b600081815260036020526040812060058101546001600160401b03169190610f4a9084906135fb565b9050915091565b62ffffff82166000908152600560205260408120548190610fb45760405162461bcd60e51b815260206004820152601b60248201527f726577617264732068617368206e6f74207369676e65642079657400000000006044820152606401610e51565b62ffffff841660008181526003602090815260408083206007835281842054600584528285205483519485019690965291830191909152606082019390935260800160408051601f1981840301815291815281516020928301206000908152600b90940182528084206001600160a01b039097168452600190960190525092909220546001600160401b0380821695600160401b909204169350915050565b600054600160b01b900460ff16806110755750600054600160a81b900460ff16155b156110a0576110826133e1565b601080546001600160a01b0319166001600160a01b03831617905550565b6110ab60003661341b565b50565b60006110b861370f565b905090565b6000806110c984613782565b505062ffffff909116600090815260036020908152604080832060048352818420548452600a0182528083206001600160a01b0390941683526001909301905220546001600160401b0380821692600160401b9092041690565b60008161112f816137e3565b600083815260036020526040902060050154600160601b900461ffff1691505b50919050565b606060118054806020026020016040519081016040528092919081815260200182805480156111ad57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118f575b5050505050905090565b60008054600160a81b900460ff166111d957506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190615712565b61125733613089565b6112935760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610e51565b6001600160e01b03198116600090815260026020526040812080549091036112fd5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610e51565b805442101561134e5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610e51565b600081600101805461135f9061572f565b80601f016020809104026020016040519081016040528092919081815260200182805461138b9061572f565b80156113d85780601f106113ad576101008083540402835291602001916113d8565b820191906000526020600020905b8154815290600101906020018083116113bb57829003601f168201915b505050506001600160e01b031985166000908152600260205260408120818155929350905061140a6001830182614f1f565b50506000805460ff60b01b1916600160b01b178155604051309061142f908490615763565b6000604051808303816000865af19150503d806000811461146c576040519150601f19603f3d011682016040523d82523d6000602084013e611471565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610ecf8161384c565b600054600160b01b900460ff16806114f05750600054600160a81b900460ff16155b156110a0576114fd6133e1565b600a805466ff0000000000001916600160301b8315150217905550565b611522613869565b6001600160e01b03198116600090815260026020526040812054900361158a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610e51565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906115f66001830182614f1f565b505050565b811580159061161157508161160f846138c3565b145b61165d5760405162461bcd60e51b815260206004820152601f60248201527f6e6577207369676e696e6720706f6c696379206861736820696e76616c6964006044820152606401610e51565b62ffffff831660009081526003602052604090206001810154600160801b90046001600160401b0316156116dd5760405162461bcd60e51b815260206004820152602160248201527f6e6577207369676e696e6720706f6c69637920616c7265616479207369676e656044820152601960fa1b6064820152608401610e51565b600080806116f66116ef60018961577f565b8787613935565b6001600160a01b0382166000908152600788016020526040902054929550909350915061172b906001600160401b0316613a5a565b604051806040016040528061173f42613aa8565b6001600160401b0316815260200161175643613aa8565b6001600160401b039081169091526001600160a01b0384166000908152600787016020908152604082208451815495909201518416600160401b026001600160801b031990951691909316179290921790556003816117b660018b61577f565b62ffffff168152602081019190915260400160002060050154600686015461ffff600160601b9092048216916117ee9185911661579b565b61ffff1611905080156118705761180442613aa8565b8560010160106101000a8154816001600160401b0302191690836001600160401b0316021790555061183543613aa8565b6001860180546001600160401b0392909216600160c01b026001600160c01b0390921691909117905560068501805461ffff191690556118a6565b60068501805483919060009061188b90849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b826001600160a01b0316846001600160a01b03168962ffffff167f154b0214ae62d8a5548c1eac25fabd87c38b04932a217732e1022f3118da67f36118ea42613aa8565b604080516001600160401b0390921682528615156020830152015b60405180910390a45050505050505050565b6000611921613ae2565b600061192b61370f565b90506000611937613567565b600854600a549192508291611966916001600160401b03600160801b909104811691600160381b9004166157b6565b6001600160401b03164210611f805760006119828360016156ef565b9050600061198f826138c3565b03611ddc5762ffffff81166000908152600360205260408120805490916001600160401b039091169003611ac4576119c642613aa8565b815467ffffffffffffffff19166001600160401b03919091161781556119eb43613aa8565b81546001600160401b0391909116600160401b0267ffffffffffffffff60401b19909116178155600b54604051635213182360e01b815262ffffff841660048201526001600160a01b0390911690635213182390602401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b505050508162ffffff167ff9991783e5e480e42d9a54d3f35f4321857f8f0ebeb3742d326dce28b1126708611aa442613aa8565b6040516001600160401b03909116815260200160405180910390a2611dda565b8054600160801b90046001600160401b0316600003611d61576000806000600d60009054906101000a90046001600160a01b03166001600160a01b031663dbdff2c16040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5991906157d6565b865492955090935091506000906001600160401b031682118015611b7a5750825b15611b9057611b898685613b4e565b9050611c4a565b60085485544391611bb8916001600160401b03600160401b928390048116929091041661580f565b6001600160401b0316108015611bf1575060085485544291611be6916001600160401b03918216911661580f565b6001600160401b0316105b15611c4a575062ffffff87166000908152600360205260409020600501546001600160401b03168015611c3d5762ffffff88166000908152600360205260409020600401549350611c4a565b611c478685613b4e565b90505b6001600160401b03811615611d585743816001600160401b031610611c7157611c7161582f565b611c7a42613aa8565b85546001600160401b0391909116600160801b0267ffffffffffffffff60801b19909116178555611caa43613aa8565b85546001600160c01b0316600160c01b6001600160401b039283160217865560058601805467ffffffffffffffff19169183169190911790556004850184905562ffffff86167ff21722dbe044a7cea0f6d81c871cae750971e36c9dd10999e46f2b46f26ac7ff82611d1b42613aa8565b604080516001600160401b0393841681529290911660208301520160405180910390a26010546001600160a01b031615611d5857611d5886613c38565b50505050611dda565b611d708262ffffff16826135fb565b611dda57611d7d42613aa8565b60018201805467ffffffffffffffff19166001600160401b0392909216919091179055611da943613aa8565b8160010160086101000a8154816001600160401b0302191690836001600160401b03160217905550611dda82613cd3565b505b611de581613eb2565b15611f7e578092507f0000000000000000000000000000000000000000000000000000000000000000600a60078282829054906101000a90046001600160401b0316611e31919061580f565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550611e5e42613aa8565b62ffffff8416600090815260036020819052604090912001805467ffffffffffffffff19166001600160401b0392909216919091179055611e9e43613aa8565b62ffffff84166000818152600360208190526040909120908101805467ffffffffffffffff60401b1916600160401b6001600160401b039590951685021790556005015490917f4abb62ab1e4c42a11b90e4e45b92af1274f74cc634b759518e8c99e000d8be6d910463ffffffff16611f1642613aa8565b6040805163ffffffff90931683526001600160401b0390911660208301520160405180910390a2600a54600160301b900460ff1615611f6057611f5883613f22565b611f60614096565b600a54611f7e908490600160381b90046001600160401b0316614156565b505b600a5463ffffffff600160781b909104811690841611156121c757600a805463ffffffff60781b1916600160781b63ffffffff861602179055600b54604051637c2cb92160e01b815262ffffff83166004820152606091829182916001600160a01b031690637c2cb92190602401600060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203391908101906158a9565b600b54604051635b0dabfd60e11b815262ffffff871660048201529193506001600160a01b03169063b61b57fa90602401600060405180830381865afa158015612081573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120a991908101906158a9565b90508362ffffff168562ffffff16111561213957600b54604051637c2cb92160e01b815262ffffff871660048201526001600160a01b0390911690637c2cb92190602401600060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261213291908101906158a9565b925061213d565b8192505b600c54600a546001600160a01b039091169063f8ae8a2f908590859065010000000000900460ff1661216f5785612171565b865b856040518563ffffffff1660e01b81526004016121919493929190615921565b600060405180830381600087803b1580156121ab57600080fd5b505af11580156121bf573d6000803e3d6000fd5b505050505050505b600a546000906121e490600160b01b900462ffffff1660016156ef565b90508062ffffff168362ffffff16118015612225575062ffffff811660009081526003602081905260409091200154600160801b90046001600160401b0316155b156123bf57600060038161223a8460016156ef565b62ffffff168152602081019190915260400160002060095460038201549192504291612279916001600160401b03600160801b9091048116911661580f565b6001600160401b03161080156122c45750600954600382015443916122b9916001600160401b03600160c01b909204821691600160401b9091041661580f565b6001600160401b0316105b156123bd57600a805462ffffff60b01b1916600160b01b62ffffff8516021790556122ee42613aa8565b62ffffff831660009081526003602081905260409091200180546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561233943613aa8565b62ffffff831660008181526003602081905260409091200180546001600160401b0393909316600160c01b026001600160c01b03909316929092179091557f235cef7d085c1e59545613282d239e56eb0cd056135aa46b8c658cf54a0785616123a142613aa8565b6040516001600160401b03909116815260200160405180910390a25b505b600a54600160301b900460ff1661257e57600e546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa15801561241a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243e919061596e565b90505b600a5462ffffff808616600160981b909204161080156124895750600a54600160981b900462ffffff166000908152600360205260409020600501546001600160401b031681115b1561257c57600e54600a54604051636b60edf760e11b8152600160981b90910462ffffff1660048201526001600160a01b039091169063d6c1dbee90602401600060405180830381600087803b1580156124e257600080fd5b505af19250505080156124f3575060015b61253e57600a54604051600160981b90910462ffffff1681527fc0cded1f60001401da804c8a7703c1e8dc60521fca0f0f9853e2f1984b5410ba9060200160405180910390a161257c565b600a8054600160981b900462ffffff1690601361255a83615987565b91906101000a81548162ffffff021916908362ffffff16021790555050612441565b505b600194505050505090565b60006110b8613567565b600260205260009081526040902080546001820180549192916125b59061572f565b80601f01602080910402602001604051908101604052809291908181526020018280546125e19061572f565b801561262e5780601f106126035761010080835404028352916020019161262e565b820191906000526020600020905b81548152906001019060200180831161261157829003601f168201915b5050505050905082565b600081612644816137e3565b5050600090815260036020526040902060050154600160401b900463ffffffff1690565b600054600160b01b900460ff168061268a5750600054600160a81b900460ff16155b156110a0576126976133e1565b6110ab8161422b565b6126a9846144e8565b62ffffff8416600090815260036020819052604090912090810154600160801b90046001600160401b0316156127215760405162461bcd60e51b815260206004820181905260248201527f7375626d697420757074696d6520766f746520616c726561647920656e6465646044820152606401610e51565b6000858585604051602001612738939291906159fe565b60405160208183030381529060405280519060200120905060008061275e888487613935565b5091509150604051806040016040528061277742613aa8565b6001600160401b0316815260200161278e43613aa8565b6001600160401b039081169091526001600160a01b03808416600081815260098901602090815260409091208551815496909201518516600160401b026001600160801b0319909616919094161793909317909155831662ffffff8a167fed370d61eb315e1d46d979894585530b99f94dab64c0d40366685aebe39e3db08a8a61281742613aa8565b60405161190593929190615a1d565b600054600160b01b900460ff16806128485750600054600160a81b900460ff16155b156110a0576128556133e1565b600a805465ff00000000001916650100000000008315150217905550565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146128ec5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610e51565b61294461292083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b81525061453e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610ee08282614619565b61295885836147ca565b61296185613782565b62ffffff8516600090815260056020526040902054156129c35760405162461bcd60e51b815260206004820152601b60248201527f72657761726473206861736820616c7265616479207369676e656400000000006044820152606401610e51565b60008585856040516020016129d9929190615a80565b60408051601f19818403018152828252805160209182012062ffffff90941690830152810191909152606081018490526080016040516020818303038152906040528051906020012090506000806000612a34898587613935565b62ffffff8c1660009081526003602090815260408083208a8452600b810183528184206001600160a01b038716855260010190925290912054939650919450925090612a88906001600160401b0316613a5a565b6040518060400160405280612a9c42613aa8565b6001600160401b03168152602001612ab343613aa8565b6001600160401b039081169091526000878152600b8401602081815260408084206001600160a01b038a16855260018101835290842086518154978401518716600160401b026001600160801b03199098169616959095179590951790935560058501548983529252915461ffff600160601b909204821691612b389186911661579b565b61ffff161190508015612bc657612b4e42613aa8565b8260020160106101000a8154816001600160401b0302191690836001600160401b03160217905550612b7f43613aa8565b6002830180546001600160401b0392909216600160c01b026001600160c01b039092169190911790556000868152600b830160205260409020805461ffff19169055612c05565b6000868152600b8301602052604081208054859290612bea90849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b612c148b86868b8e8e8761489c565b5050505050505050505050565b6000818152600360205260408120600501546001600160401b031690819003612c985760405162461bcd60e51b8152602060048201526024808201527f766f746520706f77657220626c6f636b206e6f7420696e697469616c697a6564604482015263081e595d60e21b6064820152608401610e51565b919050565b612ca5613869565b612caf84826147ca565b610ecf84612cbb6111b7565b612cc36111b7565b848787600161489c565b81612d125760405162461bcd60e51b8152602060048201526015602482015274757074696d6520766f74652068617368207a65726f60581b6044820152606401610e51565b612d1b836144e8565b62ffffff831660009081526003602081905260408220908101549091600160801b9091046001600160401b03169003612d965760405162461bcd60e51b815260206004820181905260248201527f7369676e20757074696d6520766f7465206e6f742073746172746564207965746044820152606401610e51565b62ffffff841660009081526004602052604090205415612df85760405162461bcd60e51b815260206004820152601f60248201527f757074696d6520766f7465206861736820616c7265616479207369676e6564006044820152606401610e51565b6040805162ffffff861660208201529081018490526000906060016040516020818303038152906040528051906020012090506000806000612e3b888588613935565b60008a8152600a8901602090815260408083206001600160a01b03861684526001019091529020549295509093509150612e7d906001600160401b0316613a5a565b6040518060400160405280612e9142613aa8565b6001600160401b03168152602001612ea843613aa8565b6001600160401b039081169091526000898152600a8801602081815260408084206001600160a01b038916855260018101835290842086518154978401518716600160401b026001600160801b03199098169616959095179590951790935560058901548b83529252915461ffff600160601b909204821691612f2d9185911661579b565b61ffff161190508015612fd157612f4342613aa8565b60028701805467ffffffffffffffff19166001600160401b0392909216919091179055612f6f43613aa8565b6002870180546001600160401b0392909216600160401b0267ffffffffffffffff60401b1990921691909117905562ffffff891660009081526004602090815260408083208b90558a8352600a89019091529020805461ffff19169055613010565b6000888152600a8701602052604081208054849290612ff590849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b826001600160a01b0316846001600160a01b03168a62ffffff167f5506337d1266599f8b64675a1c8321701657ca2f2f70be0e0c58302b6c22e7978b61305542613aa8565b604080519283526001600160401b0390911660208301528615159082015260600160405180910390a4505050505050505050565b60008054600160a01b900460ff16801561310c5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c9190615a94565b92915050565b6000818152600360205260408120600501546001600160401b0316810361317b5760405162461bcd60e51b815260206004820152601860248201527f73656564206e6f7420696e697469616c697a65642079657400000000000000006044820152606401610e51565b5060009081526003602052604090206004015490565b600061319b613ae2565b50600090565b60006131ab613567565b62ffffff16905090565b600054600160a01b900460ff16156132065760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610e51565b6001600160a01b03821661325c5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610e51565b6001600160a01b0381166132a55760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610e51565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b613323613869565b600054600160a81b900460ff161561337d5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610e51565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff1615613411573330146134025761340261582f565b6000805460ff60b01b19169055565b613419613869565b565b613423613869565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa15801561346f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613493919061596e565b905060006134a182426156c3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b0319861681526002602090815260409091208351815590830151909150600182019061351f9082615aff565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516135589493929190615bbe565b60405180910390a15050505050565b60006110b860017f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f0000000000000000000000000000000000000000000000000000000000000000600a60079054906101000a90046001600160401b03166135d991906157b6565b6001600160401b03166135ec9190615c1a565b6135f69190615c2e565b614a67565b8054600090600160801b90046001600160401b0316158015906137085750600954825461363b916001600160401b0390811691600160801b90041661580f565b6001600160401b03164211158061368357506009548254613676916001600160401b03600160401b909104811691600160c01b90041661580f565b6001600160401b03164311155b806137085750600a54600b54604051630da7a50d60e21b815260048101869052630100000090920461ffff16916001600160a01b039091169063369e943490602401602060405180830381865afa1580156136e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613706919061596e565b105b9392505050565b60006110b87f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426137739190615c2e565b61377d9190615c1a565b614a97565b62ffffff81166000908152600460205260409020546110ab5760405162461bcd60e51b815260206004820152601f60248201527f757074696d6520766f74652068617368206e6f74207369676e656420796574006044820152606401610e51565b6000818152600360205260408120600101546001600160401b031690036110ab5760405162461bcd60e51b815260206004820181905260248201527f7265776172642065706f6368206e6f7420696e697469616c697a6564207965746044820152606401610e51565b3d604051818101604052816000823e8215613865578181f35b8181fd5b6138716111b7565b6001600160a01b0316336001600160a01b0316146134195760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610e51565b600d54604051630c85bf0760e01b815262ffffff831660048201526000916001600160a01b031690630c85bf0790602401602060405180830381865afa158015613911573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c919061596e565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c812081908190613988906139796020870187615c41565b86602001358760400135614ac8565b600b5460405163118c8ae560e31b815262ffffff891660048201526001600160a01b038084166024830152929550911690638c645728906044016040805180830381865afa1580156139de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a029190615c67565b90925090506001600160a01b038216613a515760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c99481a5b9d985b1a59607a1b6044820152606401610e51565b93509350939050565b6001600160401b038116156110ab5760405162461bcd60e51b81526020600482015260146024820152731d9bdd195c88185b1c9958591e481cda59db995960621b6044820152606401610e51565b60006001600160401b03821115613ade57604080516306dfcc6560e41b8152600481019190915260248101839052604401610e51565b5090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146134195760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610e51565b600080600381613b5f60018761577f565b62ffffff9081168252602080830193909352604091820160009081205491881681526003909352908220546001600160401b03600160401b92839004811694509190041690828103613bf657613bef613bea836001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316614af6565b613aa8565b9050613c03565b613c0083836157b6565b90505b6000613c186001600160401b03831687615c96565b9050613c2381613aa8565b613c2d90846157b6565b979650505050505050565b601054604051637b83fb0960e11b815262ffffff831660048201526001600160a01b039091169063f707f61290602401600060405180830381600087803b158015613c8257600080fd5b505af1925050508015613c93575060015b6110ab5760405162ffffff821681527f449d255b9c487823db86822a857f218d40682abada12acee2483788dc2fa975a906020015b60405180910390a150565b62ffffff81166000818152600360209081526040808320815160c0810183529283018490529082018390526060808301939093526080820183905260a082019290925291825290613d22614b0c565b63ffffffff166020820152600b5460405163c452e47f60e01b815262ffffff851660048201526000916001600160a01b03169063c452e47f906024016000604051808303816000875af1158015613d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da59190810190615caa565b60a08501919091526080840191909152600a5461ffff9091169150613ddd90613dd890839062ffffff16620f4240614be4565b614c24565b61ffff16604080840182905260048086015460608601526020850151600587018054600160601b90950261ffff60601b1963ffffffff909316600160401b02929092166dffffffffffff0000000000000000199095169490941717909255600d549051638353412560e01b81526001600160a01b0390911691638353412591613e6891869101615d74565b6020604051808303816000875af1158015613e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eab919061596e565b5050505050565b600a54600090600160381b90046001600160401b03164210801590613ee057506000613edd836138c3565b14155b801561310c575062ffffff8216600090815260036020526040902060050154600160401b900463ffffffff16613f1461370f565b63ffffffff16101592915050565b600854600090613f3f90600160e01b900463ffffffff1642615c2e565b90505b600a5462ffffff808416600160981b90920416108015613fa45750600a548190600390600090613f7f90600160981b900462ffffff1660016156ef565b62ffffff1681526020810191909152604001600020600301546001600160401b031611155b15610ee057600e54600a54604051636b60edf760e11b8152600160981b90910462ffffff1660048201526001600160a01b039091169063d6c1dbee90602401600060405180830381600087803b158015613ffd57600080fd5b505af192505050801561400e575060015b61405857600a54604051600160981b90910462ffffff1681527fc0cded1f60001401da804c8a7703c1e8dc60521fca0f0f9853e2f1984b5410ba9060200160405180910390a15050565b600a8054600160981b900462ffffff1690601361407483615987565b91906101000a81548162ffffff021916908362ffffff16021790555050613f42565b600a54600160981b900462ffffff166000908152600360205260409081902060050154600f54915163cbc31cf760e01b81526001600160401b0390911660048201819052916001600160a01b03169063cbc31cf790602401600060405180830381600087803b15801561410857600080fd5b505af1925050508015614119575060015b6110ab576040516001600160401b03821681527fe9a7be2e41a6b0b36d253d56488c6844e611be2bffd8dd4b69b89a078f41fecc90602001613cc8565b60005b6011548110156115f6576011818154811061417657614176615697565b6000918252602090912001546040516391f2567960e01b815262ffffff851660048201526001600160401b0380851660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526001600160a01b03909116906391f2567990606401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050508080614223906156d6565b915050614159565b620f424081610100015162ffffff16111561427d5760405162461bcd60e51b81526020600482015260126024820152710e8d0e4cae6d0ded8c840e8dede40d0d2ced60731b6044820152606401610e51565b600081610120015161ffff161180156143285750600b546001600160a01b03161580614328575080610120015161ffff16600b60009054906101000a90046001600160a01b03166001600160a01b031663d5e50a636040518163ffffffff1660e01b8152600401602060405180830381865afa158015614301573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614325919061596e565b10155b6143745760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e756d626572206f6620766f7465727300000000000000006044820152606401610e51565b4281610140015163ffffffff1611156143c15760405162461bcd60e51b815260206004820152600f60248201526e65787069727920746f6f206c6f6e6760881b6044820152606401610e51565b80516008805460208401516040850151606086015161014087015161ffff9687166001600160801b031995861617938716600160401b908102949094176bffffffffffffffffffffffff60801b1916928716600160801b90810263ffffffff60c01b19169390931760ff909216600160c01b908102929092176001600160e01b0316600160e01b63ffffffff909216919091021790945560808601516009805460a089015160c08a015160e08b0151948a169290971691909117908816909402939093176fffffffffffffffffffffffffffffffff169386169091026001600160c01b031692909217918416909202179055610100820151600a80546101209094015162ffffff90921664ffffffffff199094169390931763010000009190921602179055565b6144f0613567565b62ffffff168162ffffff16106110ab5760405162461bcd60e51b8152602060048201526013602482015272195c1bd8da081b9bdd08195b991959081e595d606a1b6044820152606401610e51565b600080826040516020016145529190615684565b6040516020818303038152906040528051906020012090506000805b86518110156145ca5786818151811061458957614589615697565b602002602001015183036145b8578581815181106145a9576145a9615697565b602002602001015191506145ca565b806145c2816156d6565b91505061456e565b506001600160a01b0381166146105760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610e51565b95945050505050565b61464982826040518060400160405280600d81526020016c566f746572526567697374727960981b81525061453e565b600b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061469c82826040518060400160405280600a81526020016929bab136b4b9b9b4b7b760b11b81525061453e565b600c60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506146ea82826040518060400160405280600581526020016452656c617960d81b81525061453e565b600d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061474082826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b81525061453e565b600e60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506147a682826040518060400160405280601981526020017f436c65616e7570426c6f636b4e756d6265724d616e616765720000000000000081525061453e565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b8061480b5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610e51565b614814826144e8565b600360006148238460016156ef565b62ffffff1681526020810191909152604001600090812060010154600160801b90046001600160401b03169003610ee05760405162461bcd60e51b815260206004820152601d60248201527f7369676e696e6720706f6c696379206e6f74207369676e6564207965740000006044820152606401610e51565b80156149fd5762ffffff871660009081526005602090815260409182902086905590516148cd918591859101615a80565b60408051601f19818403018152918152815160209283012062ffffff8a1660009081526007909352908220555b828110156149fb57600084848381811061491657614916615697565b604002919091013591505081158061495257508484614936600185615c2e565b81811061494557614945615697565b9050604002016000013581115b61499e5760405162461bcd60e51b815260206004820181905260248201527f726577617264206d616e61676572206964206e6f7420696e6372656173696e676044820152606401610e51565b8484838181106149b0576149b0615697565b90506040020160200135600660008b62ffffff1681526020019081526020016000206000838152602001908152602001600020819055505080806149f3906156d6565b9150506148fa565b505b846001600160a01b0316866001600160a01b03168862ffffff167f81b5504045130d3b82498ff414ad58271e85bbde420cc85aa66d91eff9af30fb878787614a4442613aa8565b88604051614a56959493929190615e1a565b60405180910390a450505050505050565b600062ffffff821115613ade576040516306dfcc6560e41b81526018600482015260248101839052604401610e51565b600063ffffffff821115613ade576040516306dfcc6560e41b81526020600482015260248101839052604401610e51565b600080600080614ada88888888614c53565b925092509250614aea8282614d22565b50909695505050505050565b6000818310614b055781613708565b5090919050565b600a546000908190614b4f907f000000000000000000000000000000000000000000000000000000000000000090600160381b90046001600160401b03166157b6565b6001600160401b03169050614b927f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168261377d9190615c1a565b600854909250600090600160c01b900463ffffffff16614bb061370f565b614bba9190615e56565b614bc5906001615e56565b90508063ffffffff168363ffffffff161015614bdf578092505b505090565b600080614bf2858585614ddb565b905060008380614c0457614c04615c04565b85870990508015614c185781600101614c1a565b815b9695505050505050565b600061ffff821115613ade576040516306dfcc6560e41b81526010600482015260248101839052604401610e51565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614c8e5750600091506003905082614d18565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614ce2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614d0e57506000925060019150829050614d18565b9250600091508190505b9450945094915050565b6000826003811115614d3657614d36615e73565b03614d3f575050565b6001826003811115614d5357614d53615e73565b03614d715760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614d8557614d85615e73565b03614da65760405163fce698f760e01b815260048101829052602401610e51565b6003826003811115614dba57614dba615e73565b03610ee0576040516335e2f38360e21b815260048101829052602401610e51565b6000808211614e1f5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610e51565b83600003614e2f57506000613708565b83830283858281614e4257614e42615c04565b0403614e6057828181614e5757614e57615c04565b04915050613708565b506000614e6d8386615c1a565b90506000614e7b8487615c96565b90506000614e898587615c1a565b90506000614e978688615c96565b905085614ea48285615e89565b614eae9190615c1a565b614eb88385615e89565b614ec28387615e89565b88614ecd8689615e89565b614ed79190615e89565b614ee191906156c3565b614eeb91906156c3565b614ef591906156c3565b98975050505050505050565b50805460008255906000526020600020908101906110ab9190614f55565b508054614f2b9061572f565b6000825580601f10614f3b575050565b601f0160209004906000526020600020908101906110ab91905b5b80821115613ade5760008155600101614f56565b803562ffffff81168114612c9857600080fd5b600060208284031215614f8f57600080fd5b61370882614f6a565b60008083601f840112614faa57600080fd5b5081356001600160401b03811115614fc157600080fd5b6020830191508360208260051b8501011115614fdc57600080fd5b9250929050565b60008060208385031215614ff657600080fd5b82356001600160401b0381111561500c57600080fd5b61501885828601614f98565b90969095509350505050565b60006020828403121561503657600080fd5b5035919050565b6001600160a01b03811681146110ab57600080fd5b6000806040838503121561506557600080fd5b61506e83614f6a565b9150602083013561507e8161503d565b809150509250929050565b60006020828403121561509b57600080fd5b81356137088161503d565b6020808252825182820181905260009190848201906040850190845b81811015614aea5783516001600160a01b0316835292840192918401916001016150c2565b6000602082840312156150f957600080fd5b81356001600160e01b03198116811461370857600080fd5b80151581146110ab57600080fd5b60006020828403121561513157600080fd5b813561370881615111565b60006060828403121561114f57600080fd5b600080600060a0848603121561516357600080fd5b61516c84614f6a565b925060208401359150615182856040860161513c565b90509250925092565b60005b838110156151a657818101518382015260200161518e565b50506000910152565b600081518084526151c781602086016020860161518b565b601f01601f19169290920160200192915050565b8281526040602082015260006151f460408301846151af565b949350505050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715615235576152356151fc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615263576152636151fc565b604052919050565b61ffff811681146110ab57600080fd5b8035612c988161526b565b803560ff81168114612c9857600080fd5b803563ffffffff81168114612c9857600080fd5b600061016082840312156152be57600080fd5b6152c6615212565b6152cf8361527b565b81526152dd6020840161527b565b60208201526152ee6040840161527b565b60408201526152ff60608401615286565b60608201526153106080840161527b565b608082015261532160a0840161527b565b60a082015261533260c0840161527b565b60c082015261534360e0840161527b565b60e0820152610100615356818501614f6a565b9082015261012061536884820161527b565b9082015261014061537a848201615297565b908201529392505050565b60008060008060a0858703121561539b57600080fd5b6153a485614f6a565b935060208501356001600160401b038111156153bf57600080fd5b6153cb87828801614f98565b90945092506153df9050866040870161513c565b905092959194509250565b60006001600160401b03821115615403576154036151fc565b5060051b60200190565b600082601f83011261541e57600080fd5b8135602061543361542e836153ea565b61523b565b82815260059290921b8401810191818101908684111561545257600080fd5b8286015b848110156154765780356154698161503d565b8352918301918301615456565b509695505050505050565b6000806040838503121561549457600080fd5b82356001600160401b03808211156154ab57600080fd5b818501915085601f8301126154bf57600080fd5b813560206154cf61542e836153ea565b82815260059290921b840181019181810190898411156154ee57600080fd5b948201945b8386101561550c578535825294820194908201906154f3565b9650508601359250508082111561552257600080fd5b5061552f8582860161540d565b9150509250929050565b60008083601f84011261554b57600080fd5b5081356001600160401b0381111561556257600080fd5b6020830191508360208260061b8501011115614fdc57600080fd5b600080600080600060c0868803121561559557600080fd5b61559e86614f6a565b945060208601356001600160401b038111156155b957600080fd5b6155c588828901615539565b909550935050604086013591506155df876060880161513c565b90509295509295909350565b600080604083850312156155fe57600080fd5b50508035926020909101359150565b6000806000806060858703121561562357600080fd5b61562c85614f6a565b935060208501356001600160401b0381111561564757600080fd5b61565387828801615539565b9598909750949560400135949350505050565b6000806040838503121561567957600080fd5b823561506e8161503d565b60208152600061370860208301846151af565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561310c5761310c6156ad565b6000600182016156e8576156e86156ad565b5060010190565b62ffffff81811683821601908082111561570b5761570b6156ad565b5092915050565b60006020828403121561572457600080fd5b81516137088161503d565b600181811c9082168061574357607f821691505b60208210810361114f57634e487b7160e01b600052602260045260246000fd5b6000825161577581846020870161518b565b9190910192915050565b62ffffff82811682821603908082111561570b5761570b6156ad565b61ffff81811683821601908082111561570b5761570b6156ad565b6001600160401b0382811682821603908082111561570b5761570b6156ad565b6000806000606084860312156157eb57600080fd5b8351925060208401516157fd81615111565b80925050604084015190509250925092565b6001600160401b0381811683821601908082111561570b5761570b6156ad565b634e487b7160e01b600052600160045260246000fd5b600082601f83011261585657600080fd5b8151602061586661542e836153ea565b82815260059290921b8401810191818101908684111561588557600080fd5b8286015b8481101561547657805161589c8161503d565b8352918301918301615889565b6000602082840312156158bb57600080fd5b81516001600160401b038111156158d157600080fd5b6151f484828501615845565b600081518084526020808501945080840160005b838110156159165781516001600160a01b0316875295820195908201906001016158f1565b509495945050505050565b60808152600061593460808301876158dd565b828103602084015261594681876158dd565b9050828103604084015261595a81866158dd565b90508281036060840152613c2d81856158dd565b60006020828403121561598057600080fd5b5051919050565b600062ffffff80831681810361599f5761599f6156ad565b6001019392505050565b818352600060208085019450826000805b868110156159f25782356bffffffffffffffffffffffff1981168082146159df578384fd5b89525096830196918301916001016159ba565b50959695505050505050565b62ffffff841681526040602082015260006146106040830184866159a9565b604081526000615a316040830185876159a9565b90506001600160401b0383166020830152949350505050565b8183526000602080850194508260005b858110156159165781358752828201358388015260409687019690910190600101615a5a565b6020815260006151f4602083018486615a4a565b600060208284031215615aa657600080fd5b815161370881615111565b601f8211156115f657600081815260208120601f850160051c81016020861015615ad85750805b601f850160051c820191505b81811015615af757828155600101615ae4565b505050505050565b81516001600160401b03811115615b1857615b186151fc565b615b2c81615b26845461572f565b84615ab1565b602080601f831160018114615b615760008415615b495750858301515b600019600386901b1c1916600185901b178555615af7565b600085815260208120601f198616915b82811015615b9057888601518255948401946001909101908401615b71565b5085821015615bae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052601260045260246000fd5b600082615c2957615c29615c04565b500490565b8181038181111561310c5761310c6156ad565b600060208284031215615c5357600080fd5b61370882615286565b8051612c988161526b565b60008060408385031215615c7a57600080fd5b8251615c858161503d565b602084015190925061507e8161526b565b600082615ca557615ca5615c04565b500690565b600080600060608486031215615cbf57600080fd5b83516001600160401b0380821115615cd657600080fd5b615ce287838801615845565b9450602091508186015181811115615cf957600080fd5b86019050601f81018713615d0c57600080fd5b8051615d1a61542e826153ea565b81815260059190911b82018301908381019089831115615d3957600080fd5b928401925b82841015615d60578351615d518161526b565b82529284019290840190615d3e565b809650505050505061518260408501615c5c565b6000602080835262ffffff8451168184015263ffffffff81850151166040840152604084015161ffff8082166060860152606086015160808601526080860151915060c060a0860152615dca60e08601836158dd565b60a0870151868203601f190160c0880152805180835290850193506000918501905b80831015615e0e57845184168252938501936001929092019190850190615dec565b50979650505050505050565b858152608060208201526000615e34608083018688615a4a565b6001600160401b03949094166040830152509015156060909101529392505050565b63ffffffff81811683821601908082111561570b5761570b6156ad565b634e487b7160e01b600052602160045260246000fd5b808202811582820484141761310c5761310c6156ad56fea2646970667358221220ca1f77d9e14203cb1a3dcf3e173b01f3df88d1904977e26ba08e9c7a1586636764736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104485760003560e01c806388e49ac711610241578063d10e807f1161013b578063e0d4ea37116100c3578063ed54fd6311610087578063ed54fd6314610cd4578063ef88bf1314610cee578063f21d630414610d01578063f5a9838314610d10578063f5f5ba7214610d1857600080fd5b8063e0d4ea3714610c76578063e17f212e14610c89578063e22fdece14610c9d578063e7c830d414610ca5578063e8d0e70a14610cad57600080fd5b8063d8a01a0a1161010a578063d8a01a0a14610bbb578063dac4319d14610bd5578063dc5a422514610c29578063debfda3014610c3c578063ded7c4b814610c4f57600080fd5b8063d10e807f14610b1d578063d2e9ad7114610b37578063d346691114610b88578063d4be6faa14610ba857600080fd5b8063a733d54b116101c9578063be60040e1161018d578063be60040e14610a75578063c00a1a9714610a88578063c263221614610a9b578063c581e79114610aae578063c9f1d2aa14610ad957600080fd5b8063a733d54b146109d1578063aec84ab6146109e8578063b00c0b76146109fe578063b59589d114610a11578063b6c25af014610a2457600080fd5b80639b760d13116102105780639b760d131461095d5780639dd6850f14610971578063a107753214610984578063a219fe02146109ab578063a72b826e146109be57600080fd5b806388e49ac7146108a35780638f8f9f3a146108b65780638fbaf860146109375780639a7590971461094a57600080fd5b80634f923d371161035257806367fc4029116102da57806374e6310e1161029e57806374e6310e1461080157806375d2187a14610822578063787173e71461083557806379e047ed1461085557806385f3c9c91461087c57600080fd5b806367fc40291461079d5780636aeffddc146107b05780636b4c7bd6146107ca5780636d0e8c34146107dd57806370562697146107e557600080fd5b80635aa6e675116103215780635aa6e6751461072e5780635ff270791461073657806362354e0314610749578063647006e21461075c57806367daec891461078a57600080fd5b80634f923d37146106755780635267a15d1461068c57806359db0e2f146106b35780635a8320881461070757600080fd5b80632e3645f8116103d557806346831531116103a45780634683153114610602578063490344f4146106175780634c528765146106315780634eac870f1461064b5780634eaee3071461065e57600080fd5b80632e3645f8146105975780634134520b146105bf57806341c05ad5146105dc5780634615d5e9146105ef57600080fd5b80630f4ef8a61161041c5780630f4ef8a614610508578063107d8ffb146105335780631703a788146105495780631916e9151461057157806324eb64de1461058457600080fd5b8062ddae531461044d57806306886f41146104b057806309505d25146104c5578063098e7ff6146104dd575b600080fd5b61048b61045b366004614f7d565b62ffffff16600090815260036020819052604090912001546001600160401b0380821692600160401b9092041690565b604080516001600160401b039384168152929091166020830152015b60405180910390f35b6104c36104be366004614fe3565b610d4d565b005b6104cd610ee4565b60405190151581526020016104a7565b6008546104f0906001600160401b031681565b6040516001600160401b0390911681526020016104a7565b600e5461051b906001600160a01b031681565b6040516001600160a01b0390911681526020016104a7565b600a546104cd9065010000000000900460ff1681565b61055c610557366004615024565b610f21565b604080519283529015156020830152016104a7565b61048b61057f366004615052565b610f51565b6104c3610592366004615089565b611053565b600a546105ac906301000000900461ffff1681565b60405161ffff90911681526020016104a7565b6105c76110ae565b60405163ffffffff90911681526020016104a7565b61048b6105ea366004615052565b6110bd565b6105ac6105fd366004615024565b611123565b61060a611155565b6040516104a791906150a6565b6008546104f090600160401b90046001600160401b031681565b6009546104f090600160801b90046001600160401b031681565b600f5461051b906001600160a01b031681565b6008546105c790600160e01b900463ffffffff1681565b600a546105c790600160781b900463ffffffff1681565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461051b565b61048b6106c1366004615052565b62ffffff90911660009081526003602090815260408083206001600160a01b0390941683526009909301905220546001600160401b0380821692600160401b9092041690565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b61051b6111b7565b6104c36107443660046150e7565b61124e565b60005461051b906001600160a01b031681565b61077c61076a366004615024565b60056020526000908152604090205481565b6040519081526020016104a7565b6104c361079836600461511f565b6114ce565b6104c36107ab3660046150e7565b61151a565b6008546104f090600160801b90046001600160401b031681565b6104c36107d836600461514e565b6115fb565b6104cd611917565b6107ed612589565b60405162ffffff90911681526020016104a7565b61081461080f3660046150e7565b612593565b6040516104a79291906151db565b6105c7610830366004615024565b612638565b61077c610843366004615024565b60076020526000908152604090205481565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b60105461051b906001600160a01b031681565b6109046108c4366004614f7d565b62ffffff166000908152600360205260409020546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016104a7565b6104c36109453660046152ab565b612668565b600c5461051b906001600160a01b031681565b600a546104cd90600160301b900460ff1681565b6104c361097f366004615385565b6126a0565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6009546104f0906001600160401b031681565b6104c36109cc36600461511f565b612826565b6008546105c790600160c01b900463ffffffff1681565b600a546107ed90600160981b900462ffffff1681565b6104c3610a0c366004615481565b612873565b600d5461051b906001600160a01b031681565b610904610a32366004614f7d565b62ffffff166000908152600360205260409020600201546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b600b5461051b906001600160a01b031681565b6104c3610a9636600461557d565b61294e565b6104f0610aa9366004615024565b612c21565b61077c610abc3660046155eb565b600660209081526000928352604080842090915290825290205481565b61048b610ae7366004614f7d565b62ffffff16600090815260036020819052604090912001546001600160401b03600160801b8204811692600160c01b9092041690565b6009546104f090600160401b90046001600160401b031681565b610904610b45366004614f7d565b62ffffff166000908152600360205260409020600101546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b61077c610b96366004615024565b60046020526000908152604090205481565b6104c3610bb636600461560d565b612c9d565b6009546104f090600160c01b90046001600160401b031681565b61048b610be3366004615052565b62ffffff90911660009081526003602090815260408083206001600160a01b0390941683526007909301905220546001600160401b0380821692600160401b9092041690565b6104c3610c3736600461514e565b612ccd565b6104cd610c4a366004615089565b613089565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b61077c610c84366004615024565b613112565b6000546104cd90600160a81b900460ff1681565b6104cd613191565b61077c6131a1565b6104f07f000000000000000000000000000000000000000000000000000000000000000081565b600a546104f090600160381b90046001600160401b031681565b6104c3610cfc366004615666565b6131b5565b600a546107ed9062ffffff1681565b6104c361331b565b6040805180820182526013815272233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b602082015290516104a79190615684565b600054600160b01b900460ff1680610d6f5750600054600160a81b900460ff16155b15610ed557610d7c6133e1565b610d8860116000614f01565b8060005b81811015610ecf576000848483818110610da857610da8615697565b9050602002016020810190610dbd9190615089565b90506000610dcc8360016156c3565b90505b83811015610e6c57858582818110610de957610de9615697565b9050602002016020810190610dfe9190615089565b6001600160a01b0316826001600160a01b031603610e5a5760405162461bcd60e51b81526020600482015260146024820152736475706c69636174656420636f6e74726163747360601b60448201526064015b60405180910390fd5b80610e64816156d6565b915050610dcf565b50601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b039290921691909117905580610ec7816156d6565b915050610d8c565b50505050565b610ee060003661341b565b5050565b600080610eef613567565b610efa9060016156ef565b62ffffff166000818152600360205260409020909150610f1b9082906135fb565b91505090565b600081815260036020526040812060058101546001600160401b03169190610f4a9084906135fb565b9050915091565b62ffffff82166000908152600560205260408120548190610fb45760405162461bcd60e51b815260206004820152601b60248201527f726577617264732068617368206e6f74207369676e65642079657400000000006044820152606401610e51565b62ffffff841660008181526003602090815260408083206007835281842054600584528285205483519485019690965291830191909152606082019390935260800160408051601f1981840301815291815281516020928301206000908152600b90940182528084206001600160a01b039097168452600190960190525092909220546001600160401b0380821695600160401b909204169350915050565b600054600160b01b900460ff16806110755750600054600160a81b900460ff16155b156110a0576110826133e1565b601080546001600160a01b0319166001600160a01b03831617905550565b6110ab60003661341b565b50565b60006110b861370f565b905090565b6000806110c984613782565b505062ffffff909116600090815260036020908152604080832060048352818420548452600a0182528083206001600160a01b0390941683526001909301905220546001600160401b0380821692600160401b9092041690565b60008161112f816137e3565b600083815260036020526040902060050154600160601b900461ffff1691505b50919050565b606060118054806020026020016040519081016040528092919081815260200182805480156111ad57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118f575b5050505050905090565b60008054600160a81b900460ff166111d957506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190615712565b61125733613089565b6112935760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610e51565b6001600160e01b03198116600090815260026020526040812080549091036112fd5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610e51565b805442101561134e5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610e51565b600081600101805461135f9061572f565b80601f016020809104026020016040519081016040528092919081815260200182805461138b9061572f565b80156113d85780601f106113ad576101008083540402835291602001916113d8565b820191906000526020600020905b8154815290600101906020018083116113bb57829003601f168201915b505050506001600160e01b031985166000908152600260205260408120818155929350905061140a6001830182614f1f565b50506000805460ff60b01b1916600160b01b178155604051309061142f908490615763565b6000604051808303816000865af19150503d806000811461146c576040519150601f19603f3d011682016040523d82523d6000602084013e611471565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610ecf8161384c565b600054600160b01b900460ff16806114f05750600054600160a81b900460ff16155b156110a0576114fd6133e1565b600a805466ff0000000000001916600160301b8315150217905550565b611522613869565b6001600160e01b03198116600090815260026020526040812054900361158a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610e51565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906115f66001830182614f1f565b505050565b811580159061161157508161160f846138c3565b145b61165d5760405162461bcd60e51b815260206004820152601f60248201527f6e6577207369676e696e6720706f6c696379206861736820696e76616c6964006044820152606401610e51565b62ffffff831660009081526003602052604090206001810154600160801b90046001600160401b0316156116dd5760405162461bcd60e51b815260206004820152602160248201527f6e6577207369676e696e6720706f6c69637920616c7265616479207369676e656044820152601960fa1b6064820152608401610e51565b600080806116f66116ef60018961577f565b8787613935565b6001600160a01b0382166000908152600788016020526040902054929550909350915061172b906001600160401b0316613a5a565b604051806040016040528061173f42613aa8565b6001600160401b0316815260200161175643613aa8565b6001600160401b039081169091526001600160a01b0384166000908152600787016020908152604082208451815495909201518416600160401b026001600160801b031990951691909316179290921790556003816117b660018b61577f565b62ffffff168152602081019190915260400160002060050154600686015461ffff600160601b9092048216916117ee9185911661579b565b61ffff1611905080156118705761180442613aa8565b8560010160106101000a8154816001600160401b0302191690836001600160401b0316021790555061183543613aa8565b6001860180546001600160401b0392909216600160c01b026001600160c01b0390921691909117905560068501805461ffff191690556118a6565b60068501805483919060009061188b90849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b826001600160a01b0316846001600160a01b03168962ffffff167f154b0214ae62d8a5548c1eac25fabd87c38b04932a217732e1022f3118da67f36118ea42613aa8565b604080516001600160401b0390921682528615156020830152015b60405180910390a45050505050505050565b6000611921613ae2565b600061192b61370f565b90506000611937613567565b600854600a549192508291611966916001600160401b03600160801b909104811691600160381b9004166157b6565b6001600160401b03164210611f805760006119828360016156ef565b9050600061198f826138c3565b03611ddc5762ffffff81166000908152600360205260408120805490916001600160401b039091169003611ac4576119c642613aa8565b815467ffffffffffffffff19166001600160401b03919091161781556119eb43613aa8565b81546001600160401b0391909116600160401b0267ffffffffffffffff60401b19909116178155600b54604051635213182360e01b815262ffffff841660048201526001600160a01b0390911690635213182390602401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b505050508162ffffff167ff9991783e5e480e42d9a54d3f35f4321857f8f0ebeb3742d326dce28b1126708611aa442613aa8565b6040516001600160401b03909116815260200160405180910390a2611dda565b8054600160801b90046001600160401b0316600003611d61576000806000600d60009054906101000a90046001600160a01b03166001600160a01b031663dbdff2c16040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5991906157d6565b865492955090935091506000906001600160401b031682118015611b7a5750825b15611b9057611b898685613b4e565b9050611c4a565b60085485544391611bb8916001600160401b03600160401b928390048116929091041661580f565b6001600160401b0316108015611bf1575060085485544291611be6916001600160401b03918216911661580f565b6001600160401b0316105b15611c4a575062ffffff87166000908152600360205260409020600501546001600160401b03168015611c3d5762ffffff88166000908152600360205260409020600401549350611c4a565b611c478685613b4e565b90505b6001600160401b03811615611d585743816001600160401b031610611c7157611c7161582f565b611c7a42613aa8565b85546001600160401b0391909116600160801b0267ffffffffffffffff60801b19909116178555611caa43613aa8565b85546001600160c01b0316600160c01b6001600160401b039283160217865560058601805467ffffffffffffffff19169183169190911790556004850184905562ffffff86167ff21722dbe044a7cea0f6d81c871cae750971e36c9dd10999e46f2b46f26ac7ff82611d1b42613aa8565b604080516001600160401b0393841681529290911660208301520160405180910390a26010546001600160a01b031615611d5857611d5886613c38565b50505050611dda565b611d708262ffffff16826135fb565b611dda57611d7d42613aa8565b60018201805467ffffffffffffffff19166001600160401b0392909216919091179055611da943613aa8565b8160010160086101000a8154816001600160401b0302191690836001600160401b03160217905550611dda82613cd3565b505b611de581613eb2565b15611f7e578092507f0000000000000000000000000000000000000000000000000000000000000000600a60078282829054906101000a90046001600160401b0316611e31919061580f565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550611e5e42613aa8565b62ffffff8416600090815260036020819052604090912001805467ffffffffffffffff19166001600160401b0392909216919091179055611e9e43613aa8565b62ffffff84166000818152600360208190526040909120908101805467ffffffffffffffff60401b1916600160401b6001600160401b039590951685021790556005015490917f4abb62ab1e4c42a11b90e4e45b92af1274f74cc634b759518e8c99e000d8be6d910463ffffffff16611f1642613aa8565b6040805163ffffffff90931683526001600160401b0390911660208301520160405180910390a2600a54600160301b900460ff1615611f6057611f5883613f22565b611f60614096565b600a54611f7e908490600160381b90046001600160401b0316614156565b505b600a5463ffffffff600160781b909104811690841611156121c757600a805463ffffffff60781b1916600160781b63ffffffff861602179055600b54604051637c2cb92160e01b815262ffffff83166004820152606091829182916001600160a01b031690637c2cb92190602401600060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203391908101906158a9565b600b54604051635b0dabfd60e11b815262ffffff871660048201529193506001600160a01b03169063b61b57fa90602401600060405180830381865afa158015612081573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120a991908101906158a9565b90508362ffffff168562ffffff16111561213957600b54604051637c2cb92160e01b815262ffffff871660048201526001600160a01b0390911690637c2cb92190602401600060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261213291908101906158a9565b925061213d565b8192505b600c54600a546001600160a01b039091169063f8ae8a2f908590859065010000000000900460ff1661216f5785612171565b865b856040518563ffffffff1660e01b81526004016121919493929190615921565b600060405180830381600087803b1580156121ab57600080fd5b505af11580156121bf573d6000803e3d6000fd5b505050505050505b600a546000906121e490600160b01b900462ffffff1660016156ef565b90508062ffffff168362ffffff16118015612225575062ffffff811660009081526003602081905260409091200154600160801b90046001600160401b0316155b156123bf57600060038161223a8460016156ef565b62ffffff168152602081019190915260400160002060095460038201549192504291612279916001600160401b03600160801b9091048116911661580f565b6001600160401b03161080156122c45750600954600382015443916122b9916001600160401b03600160c01b909204821691600160401b9091041661580f565b6001600160401b0316105b156123bd57600a805462ffffff60b01b1916600160b01b62ffffff8516021790556122ee42613aa8565b62ffffff831660009081526003602081905260409091200180546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561233943613aa8565b62ffffff831660008181526003602081905260409091200180546001600160401b0393909316600160c01b026001600160c01b03909316929092179091557f235cef7d085c1e59545613282d239e56eb0cd056135aa46b8c658cf54a0785616123a142613aa8565b6040516001600160401b03909116815260200160405180910390a25b505b600a54600160301b900460ff1661257e57600e546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa15801561241a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243e919061596e565b90505b600a5462ffffff808616600160981b909204161080156124895750600a54600160981b900462ffffff166000908152600360205260409020600501546001600160401b031681115b1561257c57600e54600a54604051636b60edf760e11b8152600160981b90910462ffffff1660048201526001600160a01b039091169063d6c1dbee90602401600060405180830381600087803b1580156124e257600080fd5b505af19250505080156124f3575060015b61253e57600a54604051600160981b90910462ffffff1681527fc0cded1f60001401da804c8a7703c1e8dc60521fca0f0f9853e2f1984b5410ba9060200160405180910390a161257c565b600a8054600160981b900462ffffff1690601361255a83615987565b91906101000a81548162ffffff021916908362ffffff16021790555050612441565b505b600194505050505090565b60006110b8613567565b600260205260009081526040902080546001820180549192916125b59061572f565b80601f01602080910402602001604051908101604052809291908181526020018280546125e19061572f565b801561262e5780601f106126035761010080835404028352916020019161262e565b820191906000526020600020905b81548152906001019060200180831161261157829003601f168201915b5050505050905082565b600081612644816137e3565b5050600090815260036020526040902060050154600160401b900463ffffffff1690565b600054600160b01b900460ff168061268a5750600054600160a81b900460ff16155b156110a0576126976133e1565b6110ab8161422b565b6126a9846144e8565b62ffffff8416600090815260036020819052604090912090810154600160801b90046001600160401b0316156127215760405162461bcd60e51b815260206004820181905260248201527f7375626d697420757074696d6520766f746520616c726561647920656e6465646044820152606401610e51565b6000858585604051602001612738939291906159fe565b60405160208183030381529060405280519060200120905060008061275e888487613935565b5091509150604051806040016040528061277742613aa8565b6001600160401b0316815260200161278e43613aa8565b6001600160401b039081169091526001600160a01b03808416600081815260098901602090815260409091208551815496909201518516600160401b026001600160801b0319909616919094161793909317909155831662ffffff8a167fed370d61eb315e1d46d979894585530b99f94dab64c0d40366685aebe39e3db08a8a61281742613aa8565b60405161190593929190615a1d565b600054600160b01b900460ff16806128485750600054600160a81b900460ff16155b156110a0576128556133e1565b600a805465ff00000000001916650100000000008315150217905550565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146128ec5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610e51565b61294461292083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b81525061453e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610ee08282614619565b61295885836147ca565b61296185613782565b62ffffff8516600090815260056020526040902054156129c35760405162461bcd60e51b815260206004820152601b60248201527f72657761726473206861736820616c7265616479207369676e656400000000006044820152606401610e51565b60008585856040516020016129d9929190615a80565b60408051601f19818403018152828252805160209182012062ffffff90941690830152810191909152606081018490526080016040516020818303038152906040528051906020012090506000806000612a34898587613935565b62ffffff8c1660009081526003602090815260408083208a8452600b810183528184206001600160a01b038716855260010190925290912054939650919450925090612a88906001600160401b0316613a5a565b6040518060400160405280612a9c42613aa8565b6001600160401b03168152602001612ab343613aa8565b6001600160401b039081169091526000878152600b8401602081815260408084206001600160a01b038a16855260018101835290842086518154978401518716600160401b026001600160801b03199098169616959095179590951790935560058501548983529252915461ffff600160601b909204821691612b389186911661579b565b61ffff161190508015612bc657612b4e42613aa8565b8260020160106101000a8154816001600160401b0302191690836001600160401b03160217905550612b7f43613aa8565b6002830180546001600160401b0392909216600160c01b026001600160c01b039092169190911790556000868152600b830160205260409020805461ffff19169055612c05565b6000868152600b8301602052604081208054859290612bea90849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b612c148b86868b8e8e8761489c565b5050505050505050505050565b6000818152600360205260408120600501546001600160401b031690819003612c985760405162461bcd60e51b8152602060048201526024808201527f766f746520706f77657220626c6f636b206e6f7420696e697469616c697a6564604482015263081e595d60e21b6064820152608401610e51565b919050565b612ca5613869565b612caf84826147ca565b610ecf84612cbb6111b7565b612cc36111b7565b848787600161489c565b81612d125760405162461bcd60e51b8152602060048201526015602482015274757074696d6520766f74652068617368207a65726f60581b6044820152606401610e51565b612d1b836144e8565b62ffffff831660009081526003602081905260408220908101549091600160801b9091046001600160401b03169003612d965760405162461bcd60e51b815260206004820181905260248201527f7369676e20757074696d6520766f7465206e6f742073746172746564207965746044820152606401610e51565b62ffffff841660009081526004602052604090205415612df85760405162461bcd60e51b815260206004820152601f60248201527f757074696d6520766f7465206861736820616c7265616479207369676e6564006044820152606401610e51565b6040805162ffffff861660208201529081018490526000906060016040516020818303038152906040528051906020012090506000806000612e3b888588613935565b60008a8152600a8901602090815260408083206001600160a01b03861684526001019091529020549295509093509150612e7d906001600160401b0316613a5a565b6040518060400160405280612e9142613aa8565b6001600160401b03168152602001612ea843613aa8565b6001600160401b039081169091526000898152600a8801602081815260408084206001600160a01b038916855260018101835290842086518154978401518716600160401b026001600160801b03199098169616959095179590951790935560058901548b83529252915461ffff600160601b909204821691612f2d9185911661579b565b61ffff161190508015612fd157612f4342613aa8565b60028701805467ffffffffffffffff19166001600160401b0392909216919091179055612f6f43613aa8565b6002870180546001600160401b0392909216600160401b0267ffffffffffffffff60401b1990921691909117905562ffffff891660009081526004602090815260408083208b90558a8352600a89019091529020805461ffff19169055613010565b6000888152600a8701602052604081208054849290612ff590849061ffff1661579b565b92506101000a81548161ffff021916908361ffff1602179055505b826001600160a01b0316846001600160a01b03168a62ffffff167f5506337d1266599f8b64675a1c8321701657ca2f2f70be0e0c58302b6c22e7978b61305542613aa8565b604080519283526001600160401b0390911660208301528615159082015260600160405180910390a4505050505050505050565b60008054600160a01b900460ff16801561310c5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c9190615a94565b92915050565b6000818152600360205260408120600501546001600160401b0316810361317b5760405162461bcd60e51b815260206004820152601860248201527f73656564206e6f7420696e697469616c697a65642079657400000000000000006044820152606401610e51565b5060009081526003602052604090206004015490565b600061319b613ae2565b50600090565b60006131ab613567565b62ffffff16905090565b600054600160a01b900460ff16156132065760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610e51565b6001600160a01b03821661325c5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610e51565b6001600160a01b0381166132a55760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610e51565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b613323613869565b600054600160a81b900460ff161561337d5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610e51565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff1615613411573330146134025761340261582f565b6000805460ff60b01b19169055565b613419613869565b565b613423613869565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa15801561346f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613493919061596e565b905060006134a182426156c3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b0319861681526002602090815260409091208351815590830151909150600182019061351f9082615aff565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516135589493929190615bbe565b60405180910390a15050505050565b60006110b860017f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f0000000000000000000000000000000000000000000000000000000000000000600a60079054906101000a90046001600160401b03166135d991906157b6565b6001600160401b03166135ec9190615c1a565b6135f69190615c2e565b614a67565b8054600090600160801b90046001600160401b0316158015906137085750600954825461363b916001600160401b0390811691600160801b90041661580f565b6001600160401b03164211158061368357506009548254613676916001600160401b03600160401b909104811691600160c01b90041661580f565b6001600160401b03164311155b806137085750600a54600b54604051630da7a50d60e21b815260048101869052630100000090920461ffff16916001600160a01b039091169063369e943490602401602060405180830381865afa1580156136e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613706919061596e565b105b9392505050565b60006110b87f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426137739190615c2e565b61377d9190615c1a565b614a97565b62ffffff81166000908152600460205260409020546110ab5760405162461bcd60e51b815260206004820152601f60248201527f757074696d6520766f74652068617368206e6f74207369676e656420796574006044820152606401610e51565b6000818152600360205260408120600101546001600160401b031690036110ab5760405162461bcd60e51b815260206004820181905260248201527f7265776172642065706f6368206e6f7420696e697469616c697a6564207965746044820152606401610e51565b3d604051818101604052816000823e8215613865578181f35b8181fd5b6138716111b7565b6001600160a01b0316336001600160a01b0316146134195760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610e51565b600d54604051630c85bf0760e01b815262ffffff831660048201526000916001600160a01b031690630c85bf0790602401602060405180830381865afa158015613911573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c919061596e565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c812081908190613988906139796020870187615c41565b86602001358760400135614ac8565b600b5460405163118c8ae560e31b815262ffffff891660048201526001600160a01b038084166024830152929550911690638c645728906044016040805180830381865afa1580156139de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a029190615c67565b90925090506001600160a01b038216613a515760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c99481a5b9d985b1a59607a1b6044820152606401610e51565b93509350939050565b6001600160401b038116156110ab5760405162461bcd60e51b81526020600482015260146024820152731d9bdd195c88185b1c9958591e481cda59db995960621b6044820152606401610e51565b60006001600160401b03821115613ade57604080516306dfcc6560e41b8152600481019190915260248101839052604401610e51565b5090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146134195760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610e51565b600080600381613b5f60018761577f565b62ffffff9081168252602080830193909352604091820160009081205491881681526003909352908220546001600160401b03600160401b92839004811694509190041690828103613bf657613bef613bea836001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316614af6565b613aa8565b9050613c03565b613c0083836157b6565b90505b6000613c186001600160401b03831687615c96565b9050613c2381613aa8565b613c2d90846157b6565b979650505050505050565b601054604051637b83fb0960e11b815262ffffff831660048201526001600160a01b039091169063f707f61290602401600060405180830381600087803b158015613c8257600080fd5b505af1925050508015613c93575060015b6110ab5760405162ffffff821681527f449d255b9c487823db86822a857f218d40682abada12acee2483788dc2fa975a906020015b60405180910390a150565b62ffffff81166000818152600360209081526040808320815160c0810183529283018490529082018390526060808301939093526080820183905260a082019290925291825290613d22614b0c565b63ffffffff166020820152600b5460405163c452e47f60e01b815262ffffff851660048201526000916001600160a01b03169063c452e47f906024016000604051808303816000875af1158015613d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da59190810190615caa565b60a08501919091526080840191909152600a5461ffff9091169150613ddd90613dd890839062ffffff16620f4240614be4565b614c24565b61ffff16604080840182905260048086015460608601526020850151600587018054600160601b90950261ffff60601b1963ffffffff909316600160401b02929092166dffffffffffff0000000000000000199095169490941717909255600d549051638353412560e01b81526001600160a01b0390911691638353412591613e6891869101615d74565b6020604051808303816000875af1158015613e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eab919061596e565b5050505050565b600a54600090600160381b90046001600160401b03164210801590613ee057506000613edd836138c3565b14155b801561310c575062ffffff8216600090815260036020526040902060050154600160401b900463ffffffff16613f1461370f565b63ffffffff16101592915050565b600854600090613f3f90600160e01b900463ffffffff1642615c2e565b90505b600a5462ffffff808416600160981b90920416108015613fa45750600a548190600390600090613f7f90600160981b900462ffffff1660016156ef565b62ffffff1681526020810191909152604001600020600301546001600160401b031611155b15610ee057600e54600a54604051636b60edf760e11b8152600160981b90910462ffffff1660048201526001600160a01b039091169063d6c1dbee90602401600060405180830381600087803b158015613ffd57600080fd5b505af192505050801561400e575060015b61405857600a54604051600160981b90910462ffffff1681527fc0cded1f60001401da804c8a7703c1e8dc60521fca0f0f9853e2f1984b5410ba9060200160405180910390a15050565b600a8054600160981b900462ffffff1690601361407483615987565b91906101000a81548162ffffff021916908362ffffff16021790555050613f42565b600a54600160981b900462ffffff166000908152600360205260409081902060050154600f54915163cbc31cf760e01b81526001600160401b0390911660048201819052916001600160a01b03169063cbc31cf790602401600060405180830381600087803b15801561410857600080fd5b505af1925050508015614119575060015b6110ab576040516001600160401b03821681527fe9a7be2e41a6b0b36d253d56488c6844e611be2bffd8dd4b69b89a078f41fecc90602001613cc8565b60005b6011548110156115f6576011818154811061417657614176615697565b6000918252602090912001546040516391f2567960e01b815262ffffff851660048201526001600160401b0380851660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526001600160a01b03909116906391f2567990606401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050508080614223906156d6565b915050614159565b620f424081610100015162ffffff16111561427d5760405162461bcd60e51b81526020600482015260126024820152710e8d0e4cae6d0ded8c840e8dede40d0d2ced60731b6044820152606401610e51565b600081610120015161ffff161180156143285750600b546001600160a01b03161580614328575080610120015161ffff16600b60009054906101000a90046001600160a01b03166001600160a01b031663d5e50a636040518163ffffffff1660e01b8152600401602060405180830381865afa158015614301573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614325919061596e565b10155b6143745760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e756d626572206f6620766f7465727300000000000000006044820152606401610e51565b4281610140015163ffffffff1611156143c15760405162461bcd60e51b815260206004820152600f60248201526e65787069727920746f6f206c6f6e6760881b6044820152606401610e51565b80516008805460208401516040850151606086015161014087015161ffff9687166001600160801b031995861617938716600160401b908102949094176bffffffffffffffffffffffff60801b1916928716600160801b90810263ffffffff60c01b19169390931760ff909216600160c01b908102929092176001600160e01b0316600160e01b63ffffffff909216919091021790945560808601516009805460a089015160c08a015160e08b0151948a169290971691909117908816909402939093176fffffffffffffffffffffffffffffffff169386169091026001600160c01b031692909217918416909202179055610100820151600a80546101209094015162ffffff90921664ffffffffff199094169390931763010000009190921602179055565b6144f0613567565b62ffffff168162ffffff16106110ab5760405162461bcd60e51b8152602060048201526013602482015272195c1bd8da081b9bdd08195b991959081e595d606a1b6044820152606401610e51565b600080826040516020016145529190615684565b6040516020818303038152906040528051906020012090506000805b86518110156145ca5786818151811061458957614589615697565b602002602001015183036145b8578581815181106145a9576145a9615697565b602002602001015191506145ca565b806145c2816156d6565b91505061456e565b506001600160a01b0381166146105760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610e51565b95945050505050565b61464982826040518060400160405280600d81526020016c566f746572526567697374727960981b81525061453e565b600b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061469c82826040518060400160405280600a81526020016929bab136b4b9b9b4b7b760b11b81525061453e565b600c60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506146ea82826040518060400160405280600581526020016452656c617960d81b81525061453e565b600d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061474082826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b81525061453e565b600e60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506147a682826040518060400160405280601981526020017f436c65616e7570426c6f636b4e756d6265724d616e616765720000000000000081525061453e565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b8061480b5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610e51565b614814826144e8565b600360006148238460016156ef565b62ffffff1681526020810191909152604001600090812060010154600160801b90046001600160401b03169003610ee05760405162461bcd60e51b815260206004820152601d60248201527f7369676e696e6720706f6c696379206e6f74207369676e6564207965740000006044820152606401610e51565b80156149fd5762ffffff871660009081526005602090815260409182902086905590516148cd918591859101615a80565b60408051601f19818403018152918152815160209283012062ffffff8a1660009081526007909352908220555b828110156149fb57600084848381811061491657614916615697565b604002919091013591505081158061495257508484614936600185615c2e565b81811061494557614945615697565b9050604002016000013581115b61499e5760405162461bcd60e51b815260206004820181905260248201527f726577617264206d616e61676572206964206e6f7420696e6372656173696e676044820152606401610e51565b8484838181106149b0576149b0615697565b90506040020160200135600660008b62ffffff1681526020019081526020016000206000838152602001908152602001600020819055505080806149f3906156d6565b9150506148fa565b505b846001600160a01b0316866001600160a01b03168862ffffff167f81b5504045130d3b82498ff414ad58271e85bbde420cc85aa66d91eff9af30fb878787614a4442613aa8565b88604051614a56959493929190615e1a565b60405180910390a450505050505050565b600062ffffff821115613ade576040516306dfcc6560e41b81526018600482015260248101839052604401610e51565b600063ffffffff821115613ade576040516306dfcc6560e41b81526020600482015260248101839052604401610e51565b600080600080614ada88888888614c53565b925092509250614aea8282614d22565b50909695505050505050565b6000818310614b055781613708565b5090919050565b600a546000908190614b4f907f000000000000000000000000000000000000000000000000000000000000000090600160381b90046001600160401b03166157b6565b6001600160401b03169050614b927f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168261377d9190615c1a565b600854909250600090600160c01b900463ffffffff16614bb061370f565b614bba9190615e56565b614bc5906001615e56565b90508063ffffffff168363ffffffff161015614bdf578092505b505090565b600080614bf2858585614ddb565b905060008380614c0457614c04615c04565b85870990508015614c185781600101614c1a565b815b9695505050505050565b600061ffff821115613ade576040516306dfcc6560e41b81526010600482015260248101839052604401610e51565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614c8e5750600091506003905082614d18565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614ce2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614d0e57506000925060019150829050614d18565b9250600091508190505b9450945094915050565b6000826003811115614d3657614d36615e73565b03614d3f575050565b6001826003811115614d5357614d53615e73565b03614d715760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614d8557614d85615e73565b03614da65760405163fce698f760e01b815260048101829052602401610e51565b6003826003811115614dba57614dba615e73565b03610ee0576040516335e2f38360e21b815260048101829052602401610e51565b6000808211614e1f5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610e51565b83600003614e2f57506000613708565b83830283858281614e4257614e42615c04565b0403614e6057828181614e5757614e57615c04565b04915050613708565b506000614e6d8386615c1a565b90506000614e7b8487615c96565b90506000614e898587615c1a565b90506000614e978688615c96565b905085614ea48285615e89565b614eae9190615c1a565b614eb88385615e89565b614ec28387615e89565b88614ecd8689615e89565b614ed79190615e89565b614ee191906156c3565b614eeb91906156c3565b614ef591906156c3565b98975050505050505050565b50805460008255906000526020600020908101906110ab9190614f55565b508054614f2b9061572f565b6000825580601f10614f3b575050565b601f0160209004906000526020600020908101906110ab91905b5b80821115613ade5760008155600101614f56565b803562ffffff81168114612c9857600080fd5b600060208284031215614f8f57600080fd5b61370882614f6a565b60008083601f840112614faa57600080fd5b5081356001600160401b03811115614fc157600080fd5b6020830191508360208260051b8501011115614fdc57600080fd5b9250929050565b60008060208385031215614ff657600080fd5b82356001600160401b0381111561500c57600080fd5b61501885828601614f98565b90969095509350505050565b60006020828403121561503657600080fd5b5035919050565b6001600160a01b03811681146110ab57600080fd5b6000806040838503121561506557600080fd5b61506e83614f6a565b9150602083013561507e8161503d565b809150509250929050565b60006020828403121561509b57600080fd5b81356137088161503d565b6020808252825182820181905260009190848201906040850190845b81811015614aea5783516001600160a01b0316835292840192918401916001016150c2565b6000602082840312156150f957600080fd5b81356001600160e01b03198116811461370857600080fd5b80151581146110ab57600080fd5b60006020828403121561513157600080fd5b813561370881615111565b60006060828403121561114f57600080fd5b600080600060a0848603121561516357600080fd5b61516c84614f6a565b925060208401359150615182856040860161513c565b90509250925092565b60005b838110156151a657818101518382015260200161518e565b50506000910152565b600081518084526151c781602086016020860161518b565b601f01601f19169290920160200192915050565b8281526040602082015260006151f460408301846151af565b949350505050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715615235576152356151fc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615263576152636151fc565b604052919050565b61ffff811681146110ab57600080fd5b8035612c988161526b565b803560ff81168114612c9857600080fd5b803563ffffffff81168114612c9857600080fd5b600061016082840312156152be57600080fd5b6152c6615212565b6152cf8361527b565b81526152dd6020840161527b565b60208201526152ee6040840161527b565b60408201526152ff60608401615286565b60608201526153106080840161527b565b608082015261532160a0840161527b565b60a082015261533260c0840161527b565b60c082015261534360e0840161527b565b60e0820152610100615356818501614f6a565b9082015261012061536884820161527b565b9082015261014061537a848201615297565b908201529392505050565b60008060008060a0858703121561539b57600080fd5b6153a485614f6a565b935060208501356001600160401b038111156153bf57600080fd5b6153cb87828801614f98565b90945092506153df9050866040870161513c565b905092959194509250565b60006001600160401b03821115615403576154036151fc565b5060051b60200190565b600082601f83011261541e57600080fd5b8135602061543361542e836153ea565b61523b565b82815260059290921b8401810191818101908684111561545257600080fd5b8286015b848110156154765780356154698161503d565b8352918301918301615456565b509695505050505050565b6000806040838503121561549457600080fd5b82356001600160401b03808211156154ab57600080fd5b818501915085601f8301126154bf57600080fd5b813560206154cf61542e836153ea565b82815260059290921b840181019181810190898411156154ee57600080fd5b948201945b8386101561550c578535825294820194908201906154f3565b9650508601359250508082111561552257600080fd5b5061552f8582860161540d565b9150509250929050565b60008083601f84011261554b57600080fd5b5081356001600160401b0381111561556257600080fd5b6020830191508360208260061b8501011115614fdc57600080fd5b600080600080600060c0868803121561559557600080fd5b61559e86614f6a565b945060208601356001600160401b038111156155b957600080fd5b6155c588828901615539565b909550935050604086013591506155df876060880161513c565b90509295509295909350565b600080604083850312156155fe57600080fd5b50508035926020909101359150565b6000806000806060858703121561562357600080fd5b61562c85614f6a565b935060208501356001600160401b0381111561564757600080fd5b61565387828801615539565b9598909750949560400135949350505050565b6000806040838503121561567957600080fd5b823561506e8161503d565b60208152600061370860208301846151af565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561310c5761310c6156ad565b6000600182016156e8576156e86156ad565b5060010190565b62ffffff81811683821601908082111561570b5761570b6156ad565b5092915050565b60006020828403121561572457600080fd5b81516137088161503d565b600181811c9082168061574357607f821691505b60208210810361114f57634e487b7160e01b600052602260045260246000fd5b6000825161577581846020870161518b565b9190910192915050565b62ffffff82811682821603908082111561570b5761570b6156ad565b61ffff81811683821601908082111561570b5761570b6156ad565b6001600160401b0382811682821603908082111561570b5761570b6156ad565b6000806000606084860312156157eb57600080fd5b8351925060208401516157fd81615111565b80925050604084015190509250925092565b6001600160401b0381811683821601908082111561570b5761570b6156ad565b634e487b7160e01b600052600160045260246000fd5b600082601f83011261585657600080fd5b8151602061586661542e836153ea565b82815260059290921b8401810191818101908684111561588557600080fd5b8286015b8481101561547657805161589c8161503d565b8352918301918301615889565b6000602082840312156158bb57600080fd5b81516001600160401b038111156158d157600080fd5b6151f484828501615845565b600081518084526020808501945080840160005b838110156159165781516001600160a01b0316875295820195908201906001016158f1565b509495945050505050565b60808152600061593460808301876158dd565b828103602084015261594681876158dd565b9050828103604084015261595a81866158dd565b90508281036060840152613c2d81856158dd565b60006020828403121561598057600080fd5b5051919050565b600062ffffff80831681810361599f5761599f6156ad565b6001019392505050565b818352600060208085019450826000805b868110156159f25782356bffffffffffffffffffffffff1981168082146159df578384fd5b89525096830196918301916001016159ba565b50959695505050505050565b62ffffff841681526040602082015260006146106040830184866159a9565b604081526000615a316040830185876159a9565b90506001600160401b0383166020830152949350505050565b8183526000602080850194508260005b858110156159165781358752828201358388015260409687019690910190600101615a5a565b6020815260006151f4602083018486615a4a565b600060208284031215615aa657600080fd5b815161370881615111565b601f8211156115f657600081815260208120601f850160051c81016020861015615ad85750805b601f850160051c820191505b81811015615af757828155600101615ae4565b505050505050565b81516001600160401b03811115615b1857615b186151fc565b615b2c81615b26845461572f565b84615ab1565b602080601f831160018114615b615760008415615b495750858301515b600019600386901b1c1916600185901b178555615af7565b600085815260208120601f198616915b82811015615b9057888601518255948401946001909101908401615b71565b5085821015615bae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052601260045260246000fd5b600082615c2957615c29615c04565b500490565b8181038181111561310c5761310c6156ad565b600060208284031215615c5357600080fd5b61370882615286565b8051612c988161526b565b60008060408385031215615c7a57600080fd5b8251615c858161503d565b602084015190925061507e8161526b565b600082615ca557615ca5615c04565b500690565b600080600060608486031215615cbf57600080fd5b83516001600160401b0380821115615cd657600080fd5b615ce287838801615845565b9450602091508186015181811115615cf957600080fd5b86019050601f81018713615d0c57600080fd5b8051615d1a61542e826153ea565b81815260059190911b82018301908381019089831115615d3957600080fd5b928401925b82841015615d60578351615d518161526b565b82529284019290840190615d3e565b809650505050505061518260408501615c5c565b6000602080835262ffffff8451168184015263ffffffff81850151166040840152604084015161ffff8082166060860152606086015160808601526080860151915060c060a0860152615dca60e08601836158dd565b60a0870151868203601f190160c0880152805180835290850193506000918501905b80831015615e0e57845184168252938501936001929092019190850190615dec565b50979650505050505050565b858152608060208201526000615e34608083018688615a4a565b6001600160401b03949094166040830152509015156060909101529392505050565b63ffffffff81811683821601908082111561570b5761570b6156ad565b634e487b7160e01b600052602160045260246000fd5b808202811582820484141761310c5761310c6156ad56fea2646970667358221220ca1f77d9e14203cb1a3dcf3e173b01f3df88d1904977e26ba08e9c7a1586636764736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/contracts/staking/implementation/AddressBinder.sol/AddressBinder.json b/artifacts/contracts/staking/implementation/AddressBinder.sol/AddressBinder.json index a47d367..0ef93b0 100644 --- a/artifacts/contracts/staking/implementation/AddressBinder.sol/AddressBinder.json +++ b/artifacts/contracts/staking/implementation/AddressBinder.sol/AddressBinder.json @@ -114,8 +114,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610b8b806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063373e6999146100515780635b75d79c14610094578063856235941461011f578063e82199ad146101bb575b600080fd5b6100786004803603602081101561006757600080fd5b50356001600160601b0319166101fe565b604080516001600160a01b039092168252519081900360200190f35b61011d600480360360608110156100aa57600080fd5b8101906020810181356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460018302840111640100000000831117156100f957600080fd5b919350915080356001600160601b03191690602001356001600160a01b0316610219565b005b61018f6004803603602081101561013557600080fd5b81019060208101813564010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b50909250905061038b565b604080516001600160601b031990931683526001600160a01b0390911660208301528051918290030190f35b6101e1600480360360208110156101d157600080fd5b50356001600160a01b031661046d565b604080516001600160601b03199092168252519081900360200190f35b6000602081905290815260409020546001600160a01b031681565b6102238484610482565b6001600160601b031983811691161461026d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610b2e6028913960400191505060405180910390fd5b6102778484610636565b6001600160a01b0316816001600160a01b0316146102c65760405162461bcd60e51b8152600401808060200182810382526028815260200180610b066028913960400191505060405180910390fd5b6001600160601b0319821660008181526020818152604080832080546001600160a01b0387166001600160a01b0319918216811790925581855260018452938290208054606089811c9190961617905581519283019490945281019290925280825281018490527f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b6000806103988484610482565b91506103a48484610636565b6001600160601b0319831660008181526020818152604080832080546001600160a01b0387166001600160a01b031991821681179092558185526001845293829020805460608a811c9190961617905581519283019490945281019290925280825281018590529091507f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a19250929050565b60016020526000908152604090205460601b81565b600080600061049185856106c2565b9150915060006104a18383610968565b905060006002826040516020018082805190602001908083835b602083106104da5780518252601f1990920191602091820191016104bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061053d5780518252601f19909201916020918201910161051e565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561057c573d6000803e3d6000fd5b5050506040513d602081101561059157600080fd5b505160408051602081810184905282518083038201815291830192839052815193945060039391929182918401908083835b602083106105e25780518252601f1990920191602091820191016105c3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610621573d6000803e3d6000fd5b50506040515160601b98975050505050505050565b600080600061064585856106c2565b91509150600060405180604001604052808481526020018381525090506000816040516020018082600260200280838360005b83811015610690578181015183820152602001610678565b505050509050019150506040516020818303038152906040528051906020012090508060001c94505050505092915050565b6000806000848460008181106106d457fe5b909101356001600160f81b031916915050604084141561077a5761072d85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506109a2915050565b604080516020601f880181900481028201810190925286815261076d918890889081908401838280828437600092019190915250602092506109a2915050565b60001c9250925050610961565b60418414801561079757506001600160f81b03198116600160fa1b145b1561081e576107de85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506109a2915050565b604080516020601f880181900481028201810190925286815261076d918890889081908401838280828437600092019190915250602192506109a2915050565b602184141561091457600061086b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506109a2915050565b905060006108996401000003d01980848509840960070163400000f4600160fe1b036401000003d0196109fe565b90506001600160f81b03198316600160f91b14156108d7578160028206156108c957816401000003d019036108cb565b815b94509450505050610961565b6001600160f81b03198316600360f81b1415610911578160028206156108fd57816108cb565b94506401000003d019039250610961915050565b50505b6040805162461bcd60e51b815260206004820152601a60248201527f77726f6e6720666f726d6174206f66207075626c6963206b6579000000000000604482015290519081900360640190fd5b9250929050565b606061099b61097a6002840615610a44565b60408051602080820188905282518083039091018152908201909152610a88565b9392505050565b600081602001835110156109f5576040805162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b604482015290519081900360640190fd5b50016020015190565b600060015b8315610a3c578360011660011415610a23578280610a1d57fe5b85820990505b8280610a2b57fe5b8586099450600184901c9350610a03565b949350505050565b606081610a5557600360f81b610a5b565b600160f91b5b604080516001600160f81b0319909216602083015280518083036001018152602190920190529050919050565b6060806040519050835180825260208201818101602087015b81831015610ab9578051835260209283019201610aa1565b50855184518101855292509050808201602086015b81831015610ae6578051835260209283019201610ace565b508651929092011591909101601f01601f19166040525090509291505056fe6320636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b65797020636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b6579a264697066735822122086e55a9656ed935a0cd3f6c09b953d55fd4f60be466965a52d056c34f6f70d4364736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063373e6999146100515780635b75d79c14610094578063856235941461011f578063e82199ad146101bb575b600080fd5b6100786004803603602081101561006757600080fd5b50356001600160601b0319166101fe565b604080516001600160a01b039092168252519081900360200190f35b61011d600480360360608110156100aa57600080fd5b8101906020810181356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460018302840111640100000000831117156100f957600080fd5b919350915080356001600160601b03191690602001356001600160a01b0316610219565b005b61018f6004803603602081101561013557600080fd5b81019060208101813564010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b50909250905061038b565b604080516001600160601b031990931683526001600160a01b0390911660208301528051918290030190f35b6101e1600480360360208110156101d157600080fd5b50356001600160a01b031661046d565b604080516001600160601b03199092168252519081900360200190f35b6000602081905290815260409020546001600160a01b031681565b6102238484610482565b6001600160601b031983811691161461026d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610b2e6028913960400191505060405180910390fd5b6102778484610636565b6001600160a01b0316816001600160a01b0316146102c65760405162461bcd60e51b8152600401808060200182810382526028815260200180610b066028913960400191505060405180910390fd5b6001600160601b0319821660008181526020818152604080832080546001600160a01b0387166001600160a01b0319918216811790925581855260018452938290208054606089811c9190961617905581519283019490945281019290925280825281018490527f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b6000806103988484610482565b91506103a48484610636565b6001600160601b0319831660008181526020818152604080832080546001600160a01b0387166001600160a01b031991821681179092558185526001845293829020805460608a811c9190961617905581519283019490945281019290925280825281018590529091507f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a19250929050565b60016020526000908152604090205460601b81565b600080600061049185856106c2565b9150915060006104a18383610968565b905060006002826040516020018082805190602001908083835b602083106104da5780518252601f1990920191602091820191016104bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061053d5780518252601f19909201916020918201910161051e565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561057c573d6000803e3d6000fd5b5050506040513d602081101561059157600080fd5b505160408051602081810184905282518083038201815291830192839052815193945060039391929182918401908083835b602083106105e25780518252601f1990920191602091820191016105c3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610621573d6000803e3d6000fd5b50506040515160601b98975050505050505050565b600080600061064585856106c2565b91509150600060405180604001604052808481526020018381525090506000816040516020018082600260200280838360005b83811015610690578181015183820152602001610678565b505050509050019150506040516020818303038152906040528051906020012090508060001c94505050505092915050565b6000806000848460008181106106d457fe5b909101356001600160f81b031916915050604084141561077a5761072d85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506109a2915050565b604080516020601f880181900481028201810190925286815261076d918890889081908401838280828437600092019190915250602092506109a2915050565b60001c9250925050610961565b60418414801561079757506001600160f81b03198116600160fa1b145b1561081e576107de85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506109a2915050565b604080516020601f880181900481028201810190925286815261076d918890889081908401838280828437600092019190915250602192506109a2915050565b602184141561091457600061086b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506109a2915050565b905060006108996401000003d01980848509840960070163400000f4600160fe1b036401000003d0196109fe565b90506001600160f81b03198316600160f91b14156108d7578160028206156108c957816401000003d019036108cb565b815b94509450505050610961565b6001600160f81b03198316600360f81b1415610911578160028206156108fd57816108cb565b94506401000003d019039250610961915050565b50505b6040805162461bcd60e51b815260206004820152601a60248201527f77726f6e6720666f726d6174206f66207075626c6963206b6579000000000000604482015290519081900360640190fd5b9250929050565b606061099b61097a6002840615610a44565b60408051602080820188905282518083039091018152908201909152610a88565b9392505050565b600081602001835110156109f5576040805162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b604482015290519081900360640190fd5b50016020015190565b600060015b8315610a3c578360011660011415610a23578280610a1d57fe5b85820990505b8280610a2b57fe5b8586099450600184901c9350610a03565b949350505050565b606081610a5557600360f81b610a5b565b600160f91b5b604080516001600160f81b0319909216602083015280518083036001018152602190920190529050919050565b6060806040519050835180825260208201818101602087015b81831015610ab9578051835260209283019201610aa1565b50855184518101855292509050808201602086015b81831015610ae6578051835260209283019201610ace565b508651929092011591909101601f01601f19166040525090509291505056fe6320636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b65797020636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b6579a264697066735822122086e55a9656ed935a0cd3f6c09b953d55fd4f60be466965a52d056c34f6f70d4364736f6c63430007060033", + "bytecode": "0x608060405234801561001057600080fd5b50610cdb806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063373e6999146100515780635b75d79c14610094578063856235941461011f578063e82199ad146101bb575b600080fd5b6100786004803603602081101561006757600080fd5b50356001600160601b0319166101fe565b604080516001600160a01b039092168252519081900360200190f35b61011d600480360360608110156100aa57600080fd5b8101906020810181356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460018302840111640100000000831117156100f957600080fd5b919350915080356001600160601b03191690602001356001600160a01b0316610219565b005b61018f6004803603602081101561013557600080fd5b81019060208101813564010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b50909250905061038b565b604080516001600160601b031990931683526001600160a01b0390911660208301528051918290030190f35b6101e1600480360360208110156101d157600080fd5b50356001600160a01b031661046d565b604080516001600160601b03199092168252519081900360200190f35b6000602081905290815260409020546001600160a01b031681565b6102238484610482565b6001600160601b031983811691161461026d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c7e6028913960400191505060405180910390fd5b6102778484610636565b6001600160a01b0316816001600160a01b0316146102c65760405162461bcd60e51b8152600401808060200182810382526028815260200180610c566028913960400191505060405180910390fd5b6001600160601b0319821660008181526020818152604080832080546001600160a01b0387166001600160a01b0319918216811790925581855260018452938290208054606089811c9190961617905581519283019490945281019290925280825281018490527f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b6000806103988484610482565b91506103a48484610636565b6001600160601b0319831660008181526020818152604080832080546001600160a01b0387166001600160a01b031991821681179092558185526001845293829020805460608a811c9190961617905581519283019490945281019290925280825281018590529091507f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a19250929050565b60016020526000908152604090205460601b81565b600080600061049185856106c2565b9150915060006104a18383610a02565b905060006002826040516020018082805190602001908083835b602083106104da5780518252601f1990920191602091820191016104bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061053d5780518252601f19909201916020918201910161051e565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561057c573d6000803e3d6000fd5b5050506040513d602081101561059157600080fd5b505160408051602081810184905282518083038201815291830192839052815193945060039391929182918401908083835b602083106105e25780518252601f1990920191602091820191016105c3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610621573d6000803e3d6000fd5b50506040515160601b98975050505050505050565b600080600061064585856106c2565b91509150600060405180604001604052808481526020018381525090506000816040516020018082600260200280838360005b83811015610690578181015183820152602001610678565b505050509050019150506040516020818303038152906040528051906020012090508060001c94505050505092915050565b6000806000848460008181106106d457fe5b909101356001600160f81b031916915050604084141561079057600061072f86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610a3c915050565b60001c9050600061077887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060209250610a3c915050565b90506107848282610a98565b90935091506109fb9050565b6041841480156107ad57506001600160f81b03198116600160fa1b145b1561083f5760006107f686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610a3c915050565b60001c9050600061077887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060219250610a3c915050565b60218414156109ae57600061088c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610a3c915050565b905060006401000003d01980838409830960070190506401000003d019821080156108b75750600082115b80156108d657506108d28160026401000003d1195b04610b44565b6001145b61091c576040805162461bcd60e51b8152602060048201526012602482015271696e76616c6964207075626c6963206b657960701b604482015290519081900360640190fd5b60006109308260046401000003cf196108cc565b90506001600160f81b03198416600160f91b141561096f5782600282061561096057816401000003d01903610962565b815b95509550505050506109fb565b6001600160f81b03198416600360f81b14156109aa578260028206156109955781610962565b95506401000003d0190393506109fb92505050565b5050505b6040805162461bcd60e51b815260206004820152601a60248201527f77726f6e6720666f726d6174206f66207075626c6963206b6579000000000000604482015290519081900360640190fd5b9250929050565b6060610a35610a146002840615610b94565b60408051602080820188905282518083039091018152908201909152610bd8565b9392505050565b60008160200183511015610a8f576040805162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b604482015290519081900360640190fd5b50016020015190565b6401000003d01982108015610aad5750600082115b8015610abe57506401000003d01981105b8015610aca5750600081115b8015610afa57506401000003d01960076401000003d019846401000003d01986870909086401000003d019828309145b610b40576040805162461bcd60e51b8152602060048201526012602482015271696e76616c6964207075626c6963206b657960701b604482015290519081900360640190fd5b5050565b60006040516020810160208152602080820152602060408201528460608201528360808201526401000003d01960a082015260208260c0836005600019fa610b8b57600080fd5b50519392505050565b606081610ba557600360f81b610bab565b600160f91b5b604080516001600160f81b0319909216602083015280518083036001018152602190920190529050919050565b6060806040519050835180825260208201818101602087015b81831015610c09578051835260209283019201610bf1565b50855184518101855292509050808201602086015b81831015610c36578051835260209283019201610c1e565b508651929092011591909101601f01601f19166040525090509291505056fe6320636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b65797020636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b6579a26469706673582212202ddd22f79ed9ba188da406fc764f3e6caff5993fbd26a055deb052ef2fddd49b64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063373e6999146100515780635b75d79c14610094578063856235941461011f578063e82199ad146101bb575b600080fd5b6100786004803603602081101561006757600080fd5b50356001600160601b0319166101fe565b604080516001600160a01b039092168252519081900360200190f35b61011d600480360360608110156100aa57600080fd5b8101906020810181356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460018302840111640100000000831117156100f957600080fd5b919350915080356001600160601b03191690602001356001600160a01b0316610219565b005b61018f6004803603602081101561013557600080fd5b81019060208101813564010000000081111561015057600080fd5b82018360208201111561016257600080fd5b8035906020019184600183028401116401000000008311171561018457600080fd5b50909250905061038b565b604080516001600160601b031990931683526001600160a01b0390911660208301528051918290030190f35b6101e1600480360360208110156101d157600080fd5b50356001600160a01b031661046d565b604080516001600160601b03199092168252519081900360200190f35b6000602081905290815260409020546001600160a01b031681565b6102238484610482565b6001600160601b031983811691161461026d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c7e6028913960400191505060405180910390fd5b6102778484610636565b6001600160a01b0316816001600160a01b0316146102c65760405162461bcd60e51b8152600401808060200182810382526028815260200180610c566028913960400191505060405180910390fd5b6001600160601b0319821660008181526020818152604080832080546001600160a01b0387166001600160a01b0319918216811790925581855260018452938290208054606089811c9190961617905581519283019490945281019290925280825281018490527f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b6000806103988484610482565b91506103a48484610636565b6001600160601b0319831660008181526020818152604080832080546001600160a01b0387166001600160a01b031991821681179092558185526001845293829020805460608a811c9190961617905581519283019490945281019290925280825281018590529091507f5438d74d11fdde1d4f54295fb3e6c454489914c68bb311c255399c3328ae30829085908590859085908060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a19250929050565b60016020526000908152604090205460601b81565b600080600061049185856106c2565b9150915060006104a18383610a02565b905060006002826040516020018082805190602001908083835b602083106104da5780518252601f1990920191602091820191016104bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061053d5780518252601f19909201916020918201910161051e565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561057c573d6000803e3d6000fd5b5050506040513d602081101561059157600080fd5b505160408051602081810184905282518083038201815291830192839052815193945060039391929182918401908083835b602083106105e25780518252601f1990920191602091820191016105c3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610621573d6000803e3d6000fd5b50506040515160601b98975050505050505050565b600080600061064585856106c2565b91509150600060405180604001604052808481526020018381525090506000816040516020018082600260200280838360005b83811015610690578181015183820152602001610678565b505050509050019150506040516020818303038152906040528051906020012090508060001c94505050505092915050565b6000806000848460008181106106d457fe5b909101356001600160f81b031916915050604084141561079057600061072f86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610a3c915050565b60001c9050600061077887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060209250610a3c915050565b90506107848282610a98565b90935091506109fb9050565b6041841480156107ad57506001600160f81b03198116600160fa1b145b1561083f5760006107f686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610a3c915050565b60001c9050600061077887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060219250610a3c915050565b60218414156109ae57600061088c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610a3c915050565b905060006401000003d01980838409830960070190506401000003d019821080156108b75750600082115b80156108d657506108d28160026401000003d1195b04610b44565b6001145b61091c576040805162461bcd60e51b8152602060048201526012602482015271696e76616c6964207075626c6963206b657960701b604482015290519081900360640190fd5b60006109308260046401000003cf196108cc565b90506001600160f81b03198416600160f91b141561096f5782600282061561096057816401000003d01903610962565b815b95509550505050506109fb565b6001600160f81b03198416600360f81b14156109aa578260028206156109955781610962565b95506401000003d0190393506109fb92505050565b5050505b6040805162461bcd60e51b815260206004820152601a60248201527f77726f6e6720666f726d6174206f66207075626c6963206b6579000000000000604482015290519081900360640190fd5b9250929050565b6060610a35610a146002840615610b94565b60408051602080820188905282518083039091018152908201909152610bd8565b9392505050565b60008160200183511015610a8f576040805162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b604482015290519081900360640190fd5b50016020015190565b6401000003d01982108015610aad5750600082115b8015610abe57506401000003d01981105b8015610aca5750600081115b8015610afa57506401000003d01960076401000003d019846401000003d01986870909086401000003d019828309145b610b40576040805162461bcd60e51b8152602060048201526012602482015271696e76616c6964207075626c6963206b657960701b604482015290519081900360640190fd5b5050565b60006040516020810160208152602080820152602060408201528460608201528360808201526401000003d01960a082015260208260c0836005600019fa610b8b57600080fd5b50519392505050565b606081610ba557600360f81b610bab565b600160f91b5b604080516001600160f81b0319909216602083015280518083036001018152602190920190529050919050565b6060806040519050835180825260208201818101602087015b81831015610c09578051835260209283019201610bf1565b50855184518101855292509050808201602086015b81831015610c36578051835260209283019201610c1e565b508651929092011591909101601f01601f19166040525090509291505056fe6320636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b65797020636861696e206164647265737320646f65736e2774206d61746368207075626c6963206b6579a26469706673582212202ddd22f79ed9ba188da406fc764f3e6caff5993fbd26a055deb052ef2fddd49b64736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/tokenPools/implementation/FtsoRewardManager.sol/FtsoRewardManager.json b/artifacts/contracts/tokenPools/implementation/FtsoRewardManager.sol/FtsoRewardManager.json deleted file mode 100644 index e9977e6..0000000 --- a/artifacts/contracts/tokenPools/implementation/FtsoRewardManager.sol/FtsoRewardManager.json +++ /dev/null @@ -1,1425 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "FtsoRewardManager", - "sourceName": "contracts/tokenPools/implementation/FtsoRewardManager.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governance", - "type": "address" - }, - { - "internalType": "address", - "name": "_addressUpdater", - "type": "address" - }, - { - "internalType": "address", - "name": "_oldFtsoRewardManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feePercentageUpdateOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_defaultFeePercentage", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "authorizedAmountWei", - "type": "uint256" - } - ], - "name": "DailyAuthorizedInflationSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dataProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "validFromEpoch", - "type": "uint256" - } - ], - "name": "FeePercentageChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "ftsoRewardManager", - "type": "address" - } - ], - "name": "FtsoRewardManagerActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "ftsoRewardManager", - "type": "address" - } - ], - "name": "FtsoRewardManagerDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "allowedAfterTimestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedCall", - "type": "bytes" - } - ], - "name": "GovernanceCallTimelocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "initialGovernance", - "type": "address" - } - ], - "name": "GovernanceInitialised", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "governanceSettings", - "type": "address" - } - ], - "name": "GovernedProductionModeEntered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedWei", - "type": "uint256" - } - ], - "name": "InflationReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dataProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "whoClaimed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sentTo", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "RewardClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpochId", - "type": "uint256" - } - ], - "name": "RewardClaimsEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "rewardEpochId", - "type": "uint256" - } - ], - "name": "RewardClaimsExpired", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amountBurnedWei", - "type": "uint256" - } - ], - "name": "RewardsBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "ftso", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "addresses", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "rewards", - "type": "uint256[]" - } - ], - "name": "RewardsDistributed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "TimelockedGovernanceCallCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "TimelockedGovernanceCallExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "epochId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "name": "UnearnedRewardsAccrued", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epochId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochEndTime", - "type": "uint256" - } - ], - "name": "accrueUnearnedRewards", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "active", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_rewardOwners", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "autoClaim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "cancelGovernanceCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rewardOwner", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_wrap", - "type": "bool" - } - ], - "name": "claim", - "outputs": [ - { - "internalType": "uint256", - "name": "_rewardAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rewardOwner", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "_rewardEpochs", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "_dataProviders", - "type": "address[]" - }, - { - "internalType": "bool", - "name": "_wrap", - "type": "bool" - } - ], - "name": "claimFromDataProviders", - "outputs": [ - { - "internalType": "uint256", - "name": "_rewardAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "_rewardEpochs", - "type": "uint256[]" - } - ], - "name": "claimReward", - "outputs": [ - { - "internalType": "uint256", - "name": "_rewardAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "_rewardEpochs", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "_dataProviders", - "type": "address[]" - } - ], - "name": "claimRewardFromDataProviders", - "outputs": [ - { - "internalType": "uint256", - "name": "_rewardAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimSetupManager", - "outputs": [ - { - "internalType": "contract IIClaimSetupManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "closeExpiredRewardEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deactivate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "defaultFeePercentage", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_addresses", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_weights", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_totalWeight", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_epochId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_ftso", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_priceEpochDurationSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_currentRewardEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priceEpochEndTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_votePowerBlock", - "type": "uint256" - } - ], - "name": "distributeRewards", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "enableClaims", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "executeGovernanceCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feePercentageUpdateOffset", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "firstClaimableRewardEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ftsoManager", - "outputs": [ - { - "internalType": "contract IIFtsoManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAddressUpdater", - "outputs": [ - { - "internalType": "address", - "name": "_addressUpdater", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "_claimer", - "type": "address" - } - ], - "name": "getClaimedReward", - "outputs": [ - { - "internalType": "bool", - "name": "_claimed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentRewardEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - } - ], - "name": "getDataProviderCurrentFeePercentage", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "getDataProviderFeePercentage", - "outputs": [ - { - "internalType": "uint256", - "name": "_feePercentageBIPS", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - } - ], - "name": "getDataProviderPerformanceInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "_rewardAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_votePowerIgnoringRevocation", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - } - ], - "name": "getDataProviderScheduledFeePercentageChanges", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_feePercentageBIPS", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_validFromEpoch", - "type": "uint256[]" - }, - { - "internalType": "bool[]", - "name": "_fixed", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "getEpochReward", - "outputs": [ - { - "internalType": "uint256", - "name": "_totalReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_claimedReward", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getEpochsWithClaimableRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "_startEpochId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endEpochId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beneficiary", - "type": "address" - } - ], - "name": "getEpochsWithUnclaimedRewards", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_epochIds", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getExpectedBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getInflationAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getInitialRewardEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "_initialRewardEpoch", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRewardEpochToExpireNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "getRewardEpochVotePowerBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - } - ], - "name": "getStateOfRewards", - "outputs": [ - { - "internalType": "address[]", - "name": "_dataProviders", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_rewardAmounts", - "type": "uint256[]" - }, - { - "internalType": "bool[]", - "name": "_claimed", - "type": "bool[]" - }, - { - "internalType": "bool", - "name": "_claimable", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_dataProviders", - "type": "address[]" - } - ], - "name": "getStateOfRewardsFromDataProviders", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_rewardAmounts", - "type": "uint256[]" - }, - { - "internalType": "bool[]", - "name": "_claimed", - "type": "bool[]" - }, - { - "internalType": "bool", - "name": "_claimable", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTokenPoolSupplyData", - "outputs": [ - { - "internalType": "uint256", - "name": "_lockedFundsWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalInflationAuthorizedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalClaimedWei", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotals", - "outputs": [ - { - "internalType": "uint256", - "name": "_totalAwardedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalClaimedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalExpiredWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalUnearnedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalBurnedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalInflationAuthorizedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_totalInflationReceivedWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lastInflationAuthorizationReceivedTs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_dailyAuthorizedInflation", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rewardEpoch", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_dataProvider", - "type": "address" - } - ], - "name": "getUnclaimedReward", - "outputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_weight", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governance", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governanceSettings", - "outputs": [ - { - "internalType": "contract IGovernanceSettings", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initialGovernance", - "type": "address" - } - ], - "name": "initialise", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "newFtsoRewardManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rewardOwner", - "type": "address" - } - ], - "name": "nextClaimableRewardEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oldFtsoRewardManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "productionMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "receiveInflation", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_toAuthorizeWei", - "type": "uint256" - } - ], - "name": "setDailyAuthorizedInflation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_feePercentageBIPS", - "type": "uint256" - } - ], - "name": "setDataProviderFeePercentage", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setInitialRewardData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newFtsoRewardManager", - "type": "address" - } - ], - "name": "setNewFtsoRewardManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "switchToProductionMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "timelockedCalls", - "outputs": [ - { - "internalType": "uint256", - "name": "allowedAfterTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "encodedCall", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_contractNameHashes", - "type": "bytes32[]" - }, - { - "internalType": "address[]", - "name": "_contractAddresses", - "type": "address[]" - } - ], - "name": "updateContractAddresses", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "wNat", - "outputs": [ - { - "internalType": "contract WNat", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162005c8538038062005c85833981810160405260a08110156200003757600080fd5b508051602082015160408301516060840151608090940151929391929091908385806001600160a01b0381161562000074576200007481620000fd565b506001600160a01b038116620000c4576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b506001600255620000d581620001c0565b5060609290921b6001600160601b031916608052600f556010555050600019600455620001e4565b600054600160a01b900460ff16156200015d576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b60805160601c615a6f62000216600039806114e852806117145280611840528061333752806133785250615a6f6000f3fe60806040526004361061036b5760003560e01c806385b4c538116101c6578063cfbcd25f116100f7578063e7c830d411610095578063ed39d3f81161006f578063ed39d3f814611383578063f2edab5a14611398578063f5a98383146113c2578063f5f5ba72146113d75761036b565b8063e7c830d414611320578063ea28edad14611335578063eb82dd7f1461134a5761036b565b8063d6c1dbee116100d1578063d6c1dbee14611185578063e17f212e146111af578063e2739563146111c4578063e416b7e1146111ee5761036b565b8063cfbcd25f1461104d578063d20bb54214611080578063d418634a1461115b5761036b565b8063af04cd3b11610164578063b2c121921161013e578063b2c1219214610f55578063b482403414610fa0578063b4a2043d14610fb5578063c4db9619146110385761036b565b8063af04cd3b14610d85578063b00c0b7614610d9a578063b2af870a14610eca5761036b565b80639d6a890f116101a05780639d6a890f14610ac05780639edbf00714610af3578063a4472c1014610b08578063a9b79e1714610c285761036b565b806385b4c538146109b05780638dc305fa14610a0c578063961c00ed14610a875761036b565b80633e7ff857116102a057806367dcac531161023e57806374e6310e1161021857806374e6310e146108595780637b6b2c0a1461090c57806382a2b9051461092157806384e10a90146109545761036b565b806367dcac53146107bc57806367fc4029146107f257806369b91b59146108265761036b565b80635aa6e6751161027a5780635aa6e675146107255780635ff270791461073a57806362354e031461076e578063657d9695146107835761036b565b80633e7ff857146106e657806351b42b00146106fb5780635267a15d146107105761036b565b806316e693281161030d57806321bb25af116102e757806321bb25af146104a75780632dafdbbf1461058d5780633123b7d8146105c057806333b7971e146105d55761036b565b806316e693281461044157806316fe49c71461047d5780631de56098146104925761036b565b80630cb72344116103495780630cb72344146103d15780630f15f4c01461040257806311a7aaaa1461041757806312f97ac01461042c5761036b565b806302fb0c5e146103705780630441218e1461039957806306201f1d146103c7575b600080fd5b34801561037c57600080fd5b50610385611461565b604080519115158252519081900360200190f35b3480156103a557600080fd5b506103ae61146a565b6040805192835260208301919091528051918290030190f35b6103cf61147e565b005b3480156103dd57600080fd5b506103e66114e6565b604080516001600160a01b039092168252519081900360200190f35b34801561040e57600080fd5b506103cf61150a565b34801561042357600080fd5b506103e66115d3565b34801561043857600080fd5b506103e66115e2565b34801561044d57600080fd5b5061046b6004803603602081101561046457600080fd5b50356115f1565b60408051918252519081900360200190f35b34801561048957600080fd5b5061046b6116cf565b34801561049e57600080fd5b506103cf6116d5565b3480156104b357600080fd5b5061046b600480360360a08110156104ca57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156104fd57600080fd5b82018360208201111561050f57600080fd5b803590602001918460208302840111600160201b8311171561053057600080fd5b919390929091602081019035600160201b81111561054d57600080fd5b82018360208201111561055f57600080fd5b803590602001918460208302840111600160201b8311171561058057600080fd5b91935091503515156118c5565b34801561059957600080fd5b506105a2611951565b60408051938452602084019290925282820152519081900360600190f35b3480156105cc57600080fd5b5061046b61197c565b3480156105e157600080fd5b50610608600480360360208110156105f857600080fd5b50356001600160a01b031661198b565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610650578181015183820152602001610638565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561068f578181015183820152602001610677565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106ce5781810151838201526020016106b6565b50505050905001965050505050505060405180910390f35b3480156106f257600080fd5b5061046b611bdf565b34801561070757600080fd5b506103cf611be5565b34801561071c57600080fd5b506103e6611c2c565b34801561073157600080fd5b506103e6611c51565b34801561074657600080fd5b506103cf6004803603602081101561075d57600080fd5b50356001600160e01b031916611ce5565b34801561077a57600080fd5b506103e661203a565b34801561078f57600080fd5b506103ae600480360360408110156107a657600080fd5b50803590602001356001600160a01b0316612045565b3480156107c857600080fd5b506103cf600480360360608110156107df57600080fd5b5080359060208101359060400135612081565b3480156107fe57600080fd5b506103cf6004803603602081101561081557600080fd5b50356001600160e01b0319166120e9565b34801561083257600080fd5b5061046b6004803603602081101561084957600080fd5b50356001600160a01b03166121d1565b34801561086557600080fd5b5061088d6004803603602081101561087c57600080fd5b50356001600160e01b0319166121ea565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108d05781810151838201526020016108b8565b50505050905090810190601f1680156108fd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561091857600080fd5b5061046b612290565b34801561092d57600080fd5b506103cf6004803603602081101561094457600080fd5b50356001600160a01b0316612296565b34801561096057600080fd5b50610969612389565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156109bc57600080fd5b506109f1600480360360608110156109d357600080fd5b508035906001600160a01b03602082013581169160400135166123af565b60408051921515835260208301919091528051918290030190f35b348015610a1857600080fd5b506103cf60048036036040811015610a2f57600080fd5b810190602081018135600160201b811115610a4957600080fd5b820183602082011115610a5b57600080fd5b803590602001918460208302840111600160201b83111715610a7c57600080fd5b919350915035612403565b348015610a9357600080fd5b5061046b60048036036040811015610aaa57600080fd5b506001600160a01b0381351690602001356127b1565b348015610acc57600080fd5b506103cf60048036036020811015610ae357600080fd5b50356001600160a01b0316612833565b348015610aff57600080fd5b506103e66128ec565b348015610b1457600080fd5b50610b4160048036036040811015610b2b57600080fd5b506001600160a01b0381351690602001356128fb565b604051808060200180602001806020018515158152602001848103845288818151815260200191508051906020019060200280838360005b83811015610b91578181015183820152602001610b79565b50505050905001848103835287818151815260200191508051906020019060200280838360005b83811015610bd0578181015183820152602001610bb8565b50505050905001848103825286818151815260200191508051906020019060200280838360005b83811015610c0f578181015183820152602001610bf7565b5050505090500197505050505050505060405180910390f35b348015610c3457600080fd5b506103cf6004803603610120811015610c4c57600080fd5b810190602081018135600160201b811115610c6657600080fd5b820183602082011115610c7857600080fd5b803590602001918460208302840111600160201b83111715610c9957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ce857600080fd5b820183602082011115610cfa57600080fd5b803590602001918460208302840111600160201b83111715610d1b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550508235935050506020810135906001600160a01b036040820135169060608101359060808101359060a08101359060c00135612965565b348015610d9157600080fd5b5061046b612e2c565b348015610da657600080fd5b506103cf60048036036040811015610dbd57600080fd5b810190602081018135600160201b811115610dd757600080fd5b820183602082011115610de957600080fd5b803590602001918460208302840111600160201b83111715610e0a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e5957600080fd5b820183602082011115610e6b57600080fd5b803590602001918460208302840111600160201b83111715610e8c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612e36945050505050565b348015610ed657600080fd5b5061046b60048036036040811015610eed57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610f1757600080fd5b820183602082011115610f2957600080fd5b803590602001918460208302840111600160201b83111715610f4a57600080fd5b509092509050612ee1565b348015610f6157600080fd5b5061046b60048036036080811015610f7857600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515612f97565b348015610fac57600080fd5b5061046b61301d565b348015610fc157600080fd5b50610fe860048036036020811015610fd857600080fd5b50356001600160a01b0316613023565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561102457818101518382015260200161100c565b505050509050019250505060405180910390f35b34801561104457600080fd5b506103e66131ca565b34801561105957600080fd5b5061046b6004803603602081101561107057600080fd5b50356001600160a01b03166131d9565b34801561108c57600080fd5b5061046b600480360360608110156110a357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156110cd57600080fd5b8201836020820111156110df57600080fd5b803590602001918460208302840111600160201b8311171561110057600080fd5b919390929091602081019035600160201b81111561111d57600080fd5b82018360208201111561112f57600080fd5b803590602001918460208302840111600160201b8311171561115057600080fd5b5090925090506131f0565b34801561116757600080fd5b506103ae6004803603602081101561117e57600080fd5b503561326b565b34801561119157600080fd5b506103cf600480360360208110156111a857600080fd5b503561328a565b3480156111bb57600080fd5b50610385613460565b3480156111d057600080fd5b506103cf600480360360208110156111e757600080fd5b5035613470565b3480156111fa57600080fd5b5061127e6004803603606081101561121157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561124057600080fd5b82018360208201111561125257600080fd5b803590602001918460208302840111600160201b8311171561127357600080fd5b5090925090506134c7565b6040518080602001806020018415158152602001838103835286818151815260200191508051906020019060200280838360005b838110156112ca5781810151838201526020016112b2565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156113095781810151838201526020016112f1565b505050509050019550505050505060405180910390f35b34801561132c57600080fd5b5061046b61352d565b34801561134157600080fd5b506103cf613537565b34801561135657600080fd5b506103ae6004803603604081101561136d57600080fd5b50803590602001356001600160a01b03166135ca565b34801561138f57600080fd5b506103e6613606565b3480156113a457600080fd5b5061046b600480360360208110156113bb57600080fd5b5035613615565b3480156113ce57600080fd5b506103cf613620565b3480156113e357600080fd5b506113ec6136da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561142657818101518382015260200161140e565b50505050905090810190601f1680156114535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60035460ff1681565b600080611475613705565b90939092509050565b611486613775565b61148e6137c5565b601b5560185461149e903461382c565b6018556114a9613886565b6040805134815290517f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379181900360200190a16114e4613966565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6115126139b2565b601e546001600160a01b0316158015906115365750601c546001600160a01b031615155b801561154c5750601f546001600160a01b031615155b611591576040805162461bcd60e51b81526020600482015260116024820152701859191c995cdcd95cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b6003805460ff191660011790556040805130815290517f2d9c100169d5e24ef79d07ec273fcbbd5ce996a849ef0223f37c49f6418df84d9181900360200190a1565b601c546001600160a01b031681565b6020546001600160a01b031681565b60008073__$b9040dea2fd9c47e6b7e0e916053de4d6b$__63e937a562600f85611619613a11565b6040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561165b57600080fd5b505af415801561166f573d6000803e3d6000fd5b505050506040513d602081101561168557600080fd5b50516040805185815260208101839052815192935033927fd89f05622c2dcb0b4fcaa19e62fc2a2b0923955685fb7b0c641467f764244abc929181900390910190a290505b919050565b600f5490565b600054600160b01b900460ff16806116f75750600054600160a81b900460ff16155b156118ba57611704613a56565b60035460ff1615801561173f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b801561174b5750600654155b80156117575750600554155b61179c576040805162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b604482015290519081900360640190fd5b6117af60016117a9613a11565b9061382c565b600655601c5460408051633e7ff85760e01b815290516001600160a01b0390921691633e7ff85791600480820192602092909190829003018186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d602081101561182157600080fd5b505160055560408051633db5960560e11b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691637b6b2c0a916004808301926020929190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50516004556114e4565b6114e4600036613a8b565b60006118cf613c0e565b600280541415611914576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b6002805587876119248282613c65565b6119338a8a8a8a8a8a8a613cf2565b6001600255925061194691506139669050565b979650505050505050565b60008060008060175461197160165460135461382c90919063ffffffff16565b925092509250909192565b6000611986613eaf565b905090565b6060808073__$b9040dea2fd9c47e6b7e0e916053de4d6b$__6325459925600f866119b4613a11565b6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03168152602001828152602001935050505060006040518083038186803b1580156119ff57600080fd5b505af4158015611a13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526060811015611a3c57600080fd5b8101908080516040519392919084600160201b821115611a5b57600080fd5b908301906020820185811115611a7057600080fd5b82518660208202830111600160201b82111715611a8c57600080fd5b82525081516020918201928201910280838360005b83811015611ab9578181015183820152602001611aa1565b5050505090500160405260200180516040519392919084600160201b821115611ae157600080fd5b908301906020820185811115611af657600080fd5b82518660208202830111600160201b82111715611b1257600080fd5b82525081516020918201928201910280838360005b83811015611b3f578181015183820152602001611b27565b5050505090500160405260200180516040519392919084600160201b821115611b6757600080fd5b908301906020820185811115611b7c57600080fd5b82518660208202830111600160201b82111715611b9857600080fd5b82525081516020918201928201910280838360005b83811015611bc5578181015183820152602001611bad565b505050509050016040525050509250925092509193909250565b60055490565b611bed6139b2565b6003805460ff191690556040805130815290517fa391f4e911c33688045cc1f43dc17c05924f79ad72a8cf5a58cf00c3acc9090e9181900360200190a1565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b60008054600160a81b900460ff16611c74576000546001600160a01b0316611986565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb457600080fd5b505afa158015611cc8573d6000803e3d6000fd5b505050506040513d6020811015611cde57600080fd5b5051905090565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b158015611d2957600080fd5b505afa158015611d3d573d6000803e3d6000fd5b505050506040513d6020811015611d5357600080fd5b5051611d96576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054611e02576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b8054421015611e58576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ef25780601f10611ec757610100808354040283529160200191611ef2565b820191906000526020600020905b815481529060010190602001808311611ed557829003601f168201915b5050506001600160e01b0319861660009081526001602081905260408220828155949550909250611f2691508301826158b1565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b60208310611f6e5780518252601f199092019160209182019101611f4f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611fd0576040519150601f19603f3d011682016040523d82523d6000602084013e611fd5565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a161203481613ec0565b50505050565b60076001609c1b0181565b60009182526007602090815260408084206001600160a01b0390931684529190529020546001600160801b0380821692600160801b9092041690565b612089613edd565b60006120958383613f30565b6015549091506120a5908261382c565b601555604080518581526020810183905281517f754fa5a3ace0438b80ec651f7d61e44f761a808ebd17d7ce70da619399611a08929181900390910190a150505050565b6120f16139b2565b6001600160e01b0319811660009081526001602052604090205461215c576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b031981166000908152600160208190526040822082815591906121cc908301826158b1565b505050565b60006121e4826121df613f4d565b613f6d565b92915050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f810185900485028601850190965285855290949193929091908301828280156122865780601f1061225b57610100808354040283529160200191612286565b820191906000526020600020905b81548152906001019060200180831161226957829003601f168201915b5050505050905082565b60045481565b600054600160b01b900460ff16806122b85750600054600160a81b900460ff16155b1561237b576122c5613a56565b6020546001600160a01b031615612311576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b03811661235b576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b602080546001600160a01b0319166001600160a01b038316179055612386565b612386600036613a8b565b50565b601254601354601454601554601654601754601854601954601a54909192939495969798565b6000806123bd858585613f90565b6000958652600a602090815260408088206001600160a01b039788168952825280882095909616875293909352505091205490916101009091046001600160801b031690565b61240b613c0e565b600280541415612450576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b6002805561245c6137c5565b5060005b828110156124945761248c84848381811061247757fe5b905060200201356001600160a01b0316613fd2565b600101612460565b50600061249f613a11565b90506124ab828261401e565b6124ec576040805162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b604482015290519081900360640190fd5b601d546040805163712441d960e11b81523360048201818152602483019384526044830188905260009485946001600160a01b039091169363e24883b293928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561257057600080fd5b505afa158015612584573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156125ad57600080fd5b8101908080516040519392919084600160201b8211156125cc57600080fd5b9083019060208201858111156125e157600080fd5b82518660208202830111600160201b821117156125fd57600080fd5b82525081516020918201928201910280838360005b8381101561262a578181015183820152602001612612565b505050509190910160405250602001519294509192506000915061264e9050613f4d565b905060005b8681101561278957600088888381811061266957fe5b905060200201356001600160a01b03169050600085838151811061268957fe5b6020026020010151905060006126a183838b88614040565b9050816001600160a01b0316836001600160a01b0316146126ca576126c882838b88614040565b015b60408051808201909152601881527f636c61696d656420616d6f756e7420746f6f20736d616c6c0000000000000000602082015261270b90829088906140e4565b9050801561277e57601f546040805163b760faf960e01b81526001600160a01b0385811660048301529151919092169163b760faf991849160248082019260009290919082900301818588803b15801561276457600080fd5b505af1158015612778573d6000803e3d6000fd5b50505050505b505050600101612653565b5061279f33612798848961417b565b60006141d4565b50506001600255506121cc9050613966565b6000816127bc613eaf565b111580156127d85750600f546127d4906117a9613a11565b8211155b612820576040805162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840e4caeec2e4c840cae0dec6d60631b604482015290519081900360640190fd5b61282c600f84846142ef565b9392505050565b600054600160a01b900460ff1615612889576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b601f546001600160a01b031681565b606080606060008061290b613a11565b9050612917868261401e565b915081806129315750808614801561293157506004548610155b1561295b57600061294488886000614382565b805160408201516060909201519097509095509350505b5092959194509250565b61296d613edd565b861580159061297c5750885115155b61298257fe5b6000838152600c6020526040812082905561299d8584613f30565b905060008a5167ffffffffffffffff811180156129b957600080fd5b506040519080825280602002602001820160405280156129e3578160200160208202803683370190505b50905081816000815181106129f457fe5b602002602001018181525050888a600081518110612a0e57fe5b60209081029190910101528a51600019015b60008c8281518110612a2e57fe5b60200260200101519050612a888c8381518110612a4757fe5b60200260200101518d600081518110612a5c57fe5b602002602001015185600081518110612a7157fe5b60200260200101516149459092919063ffffffff16565b838381518110612a9457fe5b60209081029190910181019190915260008881526007825260408082206001600160a01b0385168352909252208351612ae090859085908110612ad357fe5b6020026020010151614a45565b81546001600160801b031981166001600160801b039182169290920116178155601f5460408051631257fcdb60e31b81526001600160a01b038581166004830152602482018a90529151612b9693612b9193612710939116916392bfe6d891604480820192602092909190829003018186803b158015612b5f57600080fd5b505afa158015612b73573d6000803e3d6000fd5b505050506040513d6020811015612b8957600080fd5b50519061417b565b614a45565b81546001600160801b03918216600160801b0291161781558351849084908110612bbc57fe5b60209081029190910181015160008a81526009835260408082206001600160a01b03871680845290855281832080549094019093558b82526008845280822092825291909252902054612cad57601f54604080516304bb4e4360e01b81526001600160a01b038581166004830152602482018a9052915191909216916304bb4e43916044808301926020929190829003018186803b158015612c5d57600080fd5b505afa158015612c71573d6000803e3d6000fd5b505050506040513d6020811015612c8757600080fd5b505160008981526008602090815260408083206001600160a01b03871684529091529020555b82612cb9575050612d2a565b838381518110612cc557fe5b602002602001015184600081518110612cda57fe5b6020026020010181815103915081815250508c8381518110612cf857fe5b60200260200101518d600081518110612d0d57fe5b602090810291909101018051919091039052505060001901612a20565b6000868152600d60205260409020805484019055601254612d4b908461382c565b601281905550876001600160a01b03167f8b2bc56c62594afde5b520e83e1ca19ebd071798db21382e328014f47b31ce578a8e85604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612dc9578181015183820152602001612db1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612e08578181015183820152602001612df0565b505050509050019550505050505060405180910390a2505050505050505050505050565b6000611986614a89565b612e3e611c2c565b6001600160a01b0316336001600160a01b031614612e9a576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b612ed3612ece83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250614aa8565b614bcc565b612edd8282614bf0565b5050565b6000612eeb613c0e565b600280541415612f30576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280556000805b83811015612f7857848482818110612f4c57fe5b90506020020135821015612f7057848482818110612f6657fe5b9050602002013591505b600101612f38565b50612f863386836000614d3b565b6001600255915061282c9050613966565b6000612fa1613c0e565b600280541415612fe6576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280558484612ff68282613c65565b61300287878787614d3b565b6001600255925061301591506139669050565b949350505050565b60105490565b6060600080613030613705565b909250905060018282030160008167ffffffffffffffff8111801561305457600080fd5b5060405190808252806020026020018201604052801561307e578160200160208202803683370190505b5090506000805b8381101561312b57600061309d898389016001614382565b905060005b81606001515181101561312157816060015181815181106130bf57fe5b60200260200101511580156130eb57506000826040015182815181106130e157fe5b6020026020010151115b156131195760018584815181106130fe57fe5b91151560209283029190910190910152600190930192613121565b6001016130a2565b5050600101613085565b508067ffffffffffffffff8111801561314357600080fd5b5060405190808252806020026020018201604052801561316d578160200160208202803683370190505b5095506000805b848110156131be5783818151811061318857fe5b6020026020010151156131b6578087018883815181106131a457fe5b60209081029190910101526001909101905b600101613174565b50505050505050919050565b601d546001600160a01b031681565b60006121e4826131e7613a11565b600f91906142ef565b60006131fa613c0e565b60028054141561323f576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280556132533387878787876000613cf2565b60016002559050613262613966565b95945050505050565b6000908152600d6020908152604080832054600e909252909120549091565b601c546001600160a01b03163314806132ad57506020546001600160a01b031633145b6132ee576040805162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b604482015290519081900360640190fd5b8060055414613335576040805162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590613371575060065460320181105b156133f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6c1dbee826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050505b6000818152600e6020908152604080832054600d9092529091205460145491900390613421908261382c565b6014556040805183815290517f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa589181900360200190a150600101600555565b600054600160a81b900460ff1681565b613478613775565b601a81905560175461348a908261382c565b601755426019556040805182815290517f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959181900360200190a150565b6060806000806134d5613a11565b90506134e1878261401e565b915081806134fb575080871480156134fb57506004548710155b15613522576000613510898989896000614db8565b90508060400151945080606001519350505b509450945094915050565b6000611986613a11565b61353f6139b2565b60001960045414613589576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015290519081900360640190fd5b613591613a11565b600481905560408051918252517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a089181900360200190a1565b60008281526009602090815260408083206001600160a01b03909416808452938252808320549483526008825280832093835292905220549091565b601e546001600160a01b031690565b60006121e482615194565b6136286139b2565b600054600160a81b900460ff1615613687576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b604080518082019091526011815270233a39b7a932bbb0b93226b0b730b3b2b960791b602082015290565b600554600080613713613a11565b90506000811161376a576040805162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c65207265776172647300604482015290519081900360640190fd5b600181039150509091565b601e546001600160a01b031633146114e4576040805162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b604482015290519081900360640190fd5b601b546000906137d5903461382c565b9050478181111561381e5761dead6108fc6137f08385615226565b6040518115909202916000818181858888f19350505050158015613818573d6000803e3d6000fd5b50613828565b8181101561382857fe5b5090565b60008282018381101561282c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006138ab6016546138a560145460155461382c90919063ffffffff16565b90615226565b905080156123865760006138c24760146064614945565b90506000818311156138d55750806138d8565b50815b80156121cc576016546138eb908261382c565b601655601b546138fb9082615226565b601b5560405161dead9082156108fc029083906000818181858888f1935050505015801561392d573d6000803e3d6000fd5b506040805182815290517f44d5cd18c37b86a3423952287006d9550ab3cff404d6e899d5499d9ef87100b59181900360200190a1505050565b61396e614a89565b47146114e4576040805162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b604482015290519081900360640190fd5b6139ba611c51565b6001600160a01b0316336001600160a01b0316146114e4576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b601c54604080516339f20c3560e21b815290516000926001600160a01b03169163e7c830d4916004808301926020929190829003018186803b158015611cb457600080fd5b600054600160b01b900460ff1615613a8357333014613a7157fe5b6000805460ff60b01b191690556114e4565b6114e46139b2565b613a936139b2565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613adb57600080fd5b505afa158015613aef573d6000803e3d6000fd5b505050506040513d6020811015613b0557600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450613b89939285019201906158f5565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b60035460ff166114e4576040805162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e61676572206465616374697661746564000000000000604482015290519081900360640190fd5b336001600160a01b0383161415613c7b57612edd565b601d546040805163ce2caa5760e01b81523360048201526001600160a01b03858116602483015284811660448301529151919092169163ce2caa57916064808301926000929190829003018186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050505050565b6000613cfd87613fd2565b613d056137c5565b506002601f546040805163f683776760e01b81526001600160a01b038c811660048301529151919092169163f6837767916024808301926020929190829003018186803b158015613d5557600080fd5b505afa158015613d69573d6000803e3d6000fd5b505050506040513d6020811015613d7f57600080fd5b505114613dd3576040805162461bcd60e51b815260206004820152601860248201527f6578706c696369742064656c65676174696f6e206f6e6c790000000000000000604482015290519081900360640190fd5b6000613ddd613a11565b905060005b86811015613e9757613e06888883818110613df957fe5b905060200201358361401e565b613e0f57613e8f565b6000613e318b8a8a85818110613e2157fe5b9050602002013589896001614db8565b90506000613e558c8c8c8c87818110613e4657fe5b90506020020135856001615283565b905080600e60008c8c87818110613e6857fe5b60209081029290920135835250810191909152604001600020805490910190559390930192505b600101613de2565b50613ea38883856141d4565b50979650505050505050565b6006546000906121e49060016154fb565b3d604051818101604052816000823e8215613ed9578181f35b8181fd5b601c546001600160a01b031633146114e4576040805162461bcd60e51b81526020600482015260116024820152706674736f206d616e61676572206f6e6c7960781b604482015290519081900360640190fd5b600061282c613f3f8385615521565b613f476155a0565b906155bf565b6000611986600454613f68613f60613eaf565b600554615626565b615626565b6001600160a01b0382166000908152600b602052604081205461282c9083615626565b6000838152600a602090815260408083206001600160a01b038087168552908352818420908516845290915281205460ff16806130155750613015848361563d565b6001600160a01b038116612386576040805162461bcd60e51b815260206004820152600e60248201526d726563697069656e74207a65726f60901b604482015290519081900360640190fd5b6000600454831015801561403457506005548310155b801561282c5750501190565b60008061404d8684613f6d565b90505b83811161409a57600061406587836001614382565b90506000614077888885856000615283565b6000848152600e6020526040902080548201905593909301925050600101614050565b506001600160a01b0385166000908152600b6020526040902054600184011115613015576001600160a01b0385166000908152600b60205260409020600184019055949350505050565b600081848411156141735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614138578181015183820152602001614120565b50505050905090810190601f1680156141655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008261418a575060006121e4565b8282028284828161419757fe5b041461282c5760405162461bcd60e51b8152600401808060200182810382526021815260200180615a196021913960400191505060405180910390fd5b81156142e657801561424f57601f546040805163b760faf960e01b81526001600160a01b0386811660048301529151919092169163b760faf991859160248082019260009290919082900301818588803b15801561423157600080fd5b505af1158015614245573d6000803e3d6000fd5b50505050506142e6565b6040516000906001600160a01b0385169084908381818185875af1925050503d806000811461429a576040519150601f19603f3d011682016040523d82523d6000602084013e61429f565b606091505b50509050806142e4576040805162461bcd60e51b815260206004820152600c60248201526b18db185a5b4819985a5b195960a21b604482015290519081900360640190fd5b505b505047601b5550565b6001600160a01b0382166000908152600284016020526040812080545b80156143735781546000199091019082908290811061432757fe5b6000918252602090912001546201000090046001600160f01b0316841061436e5781818154811061435457fe5b60009182526020909120015461ffff16925061282c915050565b61430c565b50505060018301549392505050565b61438a61597d565b600061439584615194565b90506000806143a26159a5565b6143ac878961563d565b156143ba575050505061282c565b60008781526009602090815260408083206001600160a01b038c1684529091529020541515806143e8575085155b1561441a576143f8888886615659565b91506144058789846157cf565b6001600160801b031660208201819052151592505b601f546040805163ed475a7960e01b81526001600160a01b038b811660048301526024820188905291516060938493169163ed475a79916044808301926000929190829003018186803b15801561447057600080fd5b505afa158015614484573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260808110156144ad57600080fd5b8101908080516040519392919084600160201b8211156144cc57600080fd5b9083019060208201858111156144e157600080fd5b82518660208202830111600160201b821117156144fd57600080fd5b82525081516020918201928201910280838360005b8381101561452a578181015183820152602001614512565b5050505090500160405260200180516040519392919084600160201b82111561455257600080fd5b90830190602082018581111561456757600080fd5b82518660208202830111600160201b8211171561458357600080fd5b82525081516020918201928201910280838360005b838110156145b0578181015183820152602001614598565b5050505091909101604052505083519395509193508791506145d590505760006145d8565b60015b60ff160167ffffffffffffffff811180156145f257600080fd5b5060405190808252806020026020018201604052801561461c578160200160208202803683370190505b508088525167ffffffffffffffff8111801561463757600080fd5b50604051908082528060200260200182016040528015614661578160200160208202803683370190505b50602088015286515167ffffffffffffffff8111801561468057600080fd5b506040519080825280602002602001820160405280156146aa578160200160208202803683370190505b50604088015286515167ffffffffffffffff811180156146c957600080fd5b506040519080825280602002602001820160405280156146f3578160200160208202803683370190505b506060880152841561477b5789876000015160008151811061471157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083876020015160008151811061474357fe5b60200260200101818152505082602001516001600160801b0316876040015160008151811061476e57fe5b6020026020010181815250505b81511561493857601f546040805163277166bf60e11b81526001600160a01b038d81166004830152602482018a905291516000939290921691634ee2cd7e91604480820192602092909190829003018186803b1580156147da57600080fd5b505afa1580156147ee573d6000803e3d6000fd5b505050506040513d602081101561480457600080fd5b5051905060005b83518110156149355760008188614823576000614826565b60015b60ff1601905084828151811061483857fe5b60200260200101518a60000151828151811061485057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506148b785838151811061487f57fe5b60200260200101516148b186858151811061489657fe5b6020026020010151612710876149459092919063ffffffff16565b8e61586c565b8a6020015182815181106148c757fe5b6020026020010181815250506149088c8684815181106148e357fe5b60200260200101518c6020015184815181106148fb57fe5b60200260200101516157cf565b6001600160801b03168a60400151828151811061492157fe5b60209081029190910101525060010161480b565b50505b5050505050509392505050565b600080821161498e576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8361499b5750600061282c565b838302838582816149a857fe5b0414156149c1578281816149b857fe5b0491505061282c565b60008386816149cc57fe5b04905060008487816149da57fe5b06905060008587816149e857fe5b04905060008688816149f657fe5b069050614a38614a0a88613f47868561417b565b6117a9614a17868661417b565b6117a9614a24898761417b565b6117a98d614a328c8b61417b565b9061417b565b9998505050505050505050565b6000600160801b82106138285760405162461bcd60e51b81526004018080602001828103825260278152602001806159f26027913960400191505060405180910390fd5b60006119866016546138a560135460185461522690919063ffffffff16565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015614aec578181015183820152602001614ad4565b50505050905090810190601f168015614b195780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015614b8157868181518110614b4f57fe5b6020026020010151831415614b7957858181518110614b6a57fe5b60200260200101519150614b81565b600101614b3a565b506001600160a01b038116613262576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b614c1c82826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250614aa8565b601e60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614c7082826040518060400160405280600b81526020016a233a39b7a6b0b730b3b2b960a91b815250614aa8565b601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614cbd82826040518060400160405280600481526020016315d3985d60e21b815250614aa8565b601f60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614d1782826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b815250614aa8565b601d80546001600160a01b0319166001600160a01b03929092169190911790555050565b6000614d4684613fd2565b614d4e6137c5565b506000614d59613a11565b9050808410158015614d6b5750600081115b15614d77576001810393505b614d81848261401e565b614d8f576000915050613015565b614da2868686614d9d613f4d565b614040565b9150614daf8583856141d4565b50949350505050565b614dc061597d565b6000614dcb86615194565b6040805160208088028281018201909352878252929350869290918891849182918501908490808284376000920191909152505050908452508067ffffffffffffffff81118015614e1b57600080fd5b50604051908082528060200260200182016040528015614e45578160200160208202803683370190505b5060208401528067ffffffffffffffff81118015614e6257600080fd5b50604051908082528060200260200182016040528015614e8c578160200160208202803683370190505b5060408401528067ffffffffffffffff81118015614ea957600080fd5b50604051908082528060200260200182016040528015614ed3578160200160208202803683370190505b50606084015260005b8181101561518857614f0a88888884818110614ef457fe5b905060200201356001600160a01b03168b613f90565b84606001518281518110614f1a57fe5b60200260200101901515908115158152505083606001518181518110614f3c57fe5b602002602001015115614fd15784614fcc576000888152600a6020526040812090888884818110614f6957fe5b602090810292909201356001600160a01b039081168452838301949094525060409182016000908120938d16815292905290819020549085015180516101009092046001600160801b03169183908110614fbf57fe5b6020026020010181815250505b615180565b886001600160a01b0316878783818110614fe757fe5b905060200201356001600160a01b03166001600160a01b0316141561503257615011898985615659565b8460200151828151811061502157fe5b60200260200101818152505061512a565b601f546000906001600160a01b031663e64767aa8b8a8a8681811061505357fe5b905060200201356001600160a01b0316876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060206040518083038186803b1580156150b857600080fd5b505afa1580156150cc573d6000803e3d6000fd5b505050506040513d60208110156150e257600080fd5b5051905061510c8888848181106150f557fe5b905060200201356001600160a01b0316828b61586c565b8560200151838151811061511c57fe5b602002602001018181525050505b61515a8888888481811061513a57fe5b905060200201356001600160a01b0316866020015184815181106148fb57fe5b6001600160801b03168460400151828151811061517357fe5b6020026020010181815250505b600101614edc565b50505095945050505050565b6000818152600c6020526040902054806116ca57601c5460408051637976d5ad60e11b81526004810185905290516001600160a01b039092169163f2edab5a91602480820192602092909190829003018186803b1580156151f457600080fd5b505afa158015615208573d6000803e3d6000fd5b505050506040513d602081101561521e57600080fd5b505192915050565b60008282111561527d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080805b8451518110156154f057846060015181815181106152a257fe5b6020026020010151156152b4576154e8565b6000856000015182815181106152c657fe5b60209081029190910181015160008981526007835260408082206001600160a01b038416835284528120928901518051929450909161530a919086908110612ad357fe5b90506001600160801b0381161561533b5781546001600160801b03600160801b808304821684900382160291161782555b600061535089604001518681518110612ad357fe5b90506001600160801b038116156153935782546001600160801b031981166001600160801b03918216839003821617845560138054918316918201905595909501945b871561547d576000600a60008c81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002090508060000160009054906101000a900460ff161561544c576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b8054600160ff199091161770ffffffffffffffffffffffffffffffff0019166101006001600160801b038416021790555b8a6001600160a01b03168c6001600160a01b0316856001600160a01b03167f6ec685171a9028d19dc155a48e7824e3c68b03bc8995410e006abe3cbbeb3e2d8d8560405180838152602001826001600160801b031681526020019250505060405180910390a4505050505b600101615288565b509695505050505050565b600080838311156155115750600090508061551a565b50600190508183035b9250929050565b60008061553c6201517f60195461382c90919063ffffffff16565b905080841115615587576040805162461bcd60e51b81526020600482015260116024820152706166746572206461696c79206379636c6560781b604482015290519081900360640190fd5b61559583613f478387615226565b600101949350505050565b60006119866015546138a560125460175461522690919063ffffffff16565b6000808211615615576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161561e57fe5b049392505050565b600081831015615636578161282c565b5090919050565b6001600160a01b03166000908152600b60205260409020541190565b601f5460408051634181ad4160e11b81526001600160a01b038681166004830152602482018590529151600093849316916383035a82916044808301926020929190829003018186803b1580156156af57600080fd5b505afa1580156156c3573d6000803e3d6000fd5b505050506040513d60208110156156d957600080fd5b5051601f5460408051631257fcdb60e31b81526001600160a01b03898116600483015260248201889052915193945060009391909216916392bfe6d8916044808301926020929190829003018186803b15801561573557600080fd5b505afa158015615749573d6000803e3d6000fd5b505050506040513d602081101561575f57600080fd5b5051905081811415615780576157778161271061417b565b9250505061282c565b81811161578957fe5b6000821561579f5761579d8361271061417b565b015b60006157ad600f89896142ef565b905080156154f0576157c18484038261417b565b909101979650505050505050565b6000816157de5750600061282c565b60008481526007602090815260408083206001600160a01b0387168452909152902080546001600160801b03168061581b5760009250505061282c565b8154600160801b90046001600160801b03168481141561583f5750915061282c9050565b806001600160801b0316851061585157fe5b611946612b916001600160801b038481169088908516614945565b60008261587b5750600061282c565b60008061588a600f87866142ef565b9050612710811015614daf576158a58561271083900361417b565b90910195945050505050565b50805460018160011615610100020316600290046000825580601f106158d75750612386565b601f01602090049060005260206000209081019061238691906159bc565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261592b5760008555615971565b82601f1061594457805160ff1916838001178555615971565b82800160010185558215615971579182015b82811115615971578251825591602001919060010190615956565b506138289291506159bc565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604080518082019091526000808252602082015290565b5b8082111561382857600081556001016159bd56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c0053616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a3b07391711460178c762943da70711db7fb79ae3193a9e92538eb21f787848364736f6c63430007060033", - "deployedBytecode": "0x60806040526004361061036b5760003560e01c806385b4c538116101c6578063cfbcd25f116100f7578063e7c830d411610095578063ed39d3f81161006f578063ed39d3f814611383578063f2edab5a14611398578063f5a98383146113c2578063f5f5ba72146113d75761036b565b8063e7c830d414611320578063ea28edad14611335578063eb82dd7f1461134a5761036b565b8063d6c1dbee116100d1578063d6c1dbee14611185578063e17f212e146111af578063e2739563146111c4578063e416b7e1146111ee5761036b565b8063cfbcd25f1461104d578063d20bb54214611080578063d418634a1461115b5761036b565b8063af04cd3b11610164578063b2c121921161013e578063b2c1219214610f55578063b482403414610fa0578063b4a2043d14610fb5578063c4db9619146110385761036b565b8063af04cd3b14610d85578063b00c0b7614610d9a578063b2af870a14610eca5761036b565b80639d6a890f116101a05780639d6a890f14610ac05780639edbf00714610af3578063a4472c1014610b08578063a9b79e1714610c285761036b565b806385b4c538146109b05780638dc305fa14610a0c578063961c00ed14610a875761036b565b80633e7ff857116102a057806367dcac531161023e57806374e6310e1161021857806374e6310e146108595780637b6b2c0a1461090c57806382a2b9051461092157806384e10a90146109545761036b565b806367dcac53146107bc57806367fc4029146107f257806369b91b59146108265761036b565b80635aa6e6751161027a5780635aa6e675146107255780635ff270791461073a57806362354e031461076e578063657d9695146107835761036b565b80633e7ff857146106e657806351b42b00146106fb5780635267a15d146107105761036b565b806316e693281161030d57806321bb25af116102e757806321bb25af146104a75780632dafdbbf1461058d5780633123b7d8146105c057806333b7971e146105d55761036b565b806316e693281461044157806316fe49c71461047d5780631de56098146104925761036b565b80630cb72344116103495780630cb72344146103d15780630f15f4c01461040257806311a7aaaa1461041757806312f97ac01461042c5761036b565b806302fb0c5e146103705780630441218e1461039957806306201f1d146103c7575b600080fd5b34801561037c57600080fd5b50610385611461565b604080519115158252519081900360200190f35b3480156103a557600080fd5b506103ae61146a565b6040805192835260208301919091528051918290030190f35b6103cf61147e565b005b3480156103dd57600080fd5b506103e66114e6565b604080516001600160a01b039092168252519081900360200190f35b34801561040e57600080fd5b506103cf61150a565b34801561042357600080fd5b506103e66115d3565b34801561043857600080fd5b506103e66115e2565b34801561044d57600080fd5b5061046b6004803603602081101561046457600080fd5b50356115f1565b60408051918252519081900360200190f35b34801561048957600080fd5b5061046b6116cf565b34801561049e57600080fd5b506103cf6116d5565b3480156104b357600080fd5b5061046b600480360360a08110156104ca57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156104fd57600080fd5b82018360208201111561050f57600080fd5b803590602001918460208302840111600160201b8311171561053057600080fd5b919390929091602081019035600160201b81111561054d57600080fd5b82018360208201111561055f57600080fd5b803590602001918460208302840111600160201b8311171561058057600080fd5b91935091503515156118c5565b34801561059957600080fd5b506105a2611951565b60408051938452602084019290925282820152519081900360600190f35b3480156105cc57600080fd5b5061046b61197c565b3480156105e157600080fd5b50610608600480360360208110156105f857600080fd5b50356001600160a01b031661198b565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610650578181015183820152602001610638565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561068f578181015183820152602001610677565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106ce5781810151838201526020016106b6565b50505050905001965050505050505060405180910390f35b3480156106f257600080fd5b5061046b611bdf565b34801561070757600080fd5b506103cf611be5565b34801561071c57600080fd5b506103e6611c2c565b34801561073157600080fd5b506103e6611c51565b34801561074657600080fd5b506103cf6004803603602081101561075d57600080fd5b50356001600160e01b031916611ce5565b34801561077a57600080fd5b506103e661203a565b34801561078f57600080fd5b506103ae600480360360408110156107a657600080fd5b50803590602001356001600160a01b0316612045565b3480156107c857600080fd5b506103cf600480360360608110156107df57600080fd5b5080359060208101359060400135612081565b3480156107fe57600080fd5b506103cf6004803603602081101561081557600080fd5b50356001600160e01b0319166120e9565b34801561083257600080fd5b5061046b6004803603602081101561084957600080fd5b50356001600160a01b03166121d1565b34801561086557600080fd5b5061088d6004803603602081101561087c57600080fd5b50356001600160e01b0319166121ea565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108d05781810151838201526020016108b8565b50505050905090810190601f1680156108fd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561091857600080fd5b5061046b612290565b34801561092d57600080fd5b506103cf6004803603602081101561094457600080fd5b50356001600160a01b0316612296565b34801561096057600080fd5b50610969612389565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156109bc57600080fd5b506109f1600480360360608110156109d357600080fd5b508035906001600160a01b03602082013581169160400135166123af565b60408051921515835260208301919091528051918290030190f35b348015610a1857600080fd5b506103cf60048036036040811015610a2f57600080fd5b810190602081018135600160201b811115610a4957600080fd5b820183602082011115610a5b57600080fd5b803590602001918460208302840111600160201b83111715610a7c57600080fd5b919350915035612403565b348015610a9357600080fd5b5061046b60048036036040811015610aaa57600080fd5b506001600160a01b0381351690602001356127b1565b348015610acc57600080fd5b506103cf60048036036020811015610ae357600080fd5b50356001600160a01b0316612833565b348015610aff57600080fd5b506103e66128ec565b348015610b1457600080fd5b50610b4160048036036040811015610b2b57600080fd5b506001600160a01b0381351690602001356128fb565b604051808060200180602001806020018515158152602001848103845288818151815260200191508051906020019060200280838360005b83811015610b91578181015183820152602001610b79565b50505050905001848103835287818151815260200191508051906020019060200280838360005b83811015610bd0578181015183820152602001610bb8565b50505050905001848103825286818151815260200191508051906020019060200280838360005b83811015610c0f578181015183820152602001610bf7565b5050505090500197505050505050505060405180910390f35b348015610c3457600080fd5b506103cf6004803603610120811015610c4c57600080fd5b810190602081018135600160201b811115610c6657600080fd5b820183602082011115610c7857600080fd5b803590602001918460208302840111600160201b83111715610c9957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ce857600080fd5b820183602082011115610cfa57600080fd5b803590602001918460208302840111600160201b83111715610d1b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550508235935050506020810135906001600160a01b036040820135169060608101359060808101359060a08101359060c00135612965565b348015610d9157600080fd5b5061046b612e2c565b348015610da657600080fd5b506103cf60048036036040811015610dbd57600080fd5b810190602081018135600160201b811115610dd757600080fd5b820183602082011115610de957600080fd5b803590602001918460208302840111600160201b83111715610e0a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e5957600080fd5b820183602082011115610e6b57600080fd5b803590602001918460208302840111600160201b83111715610e8c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612e36945050505050565b348015610ed657600080fd5b5061046b60048036036040811015610eed57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610f1757600080fd5b820183602082011115610f2957600080fd5b803590602001918460208302840111600160201b83111715610f4a57600080fd5b509092509050612ee1565b348015610f6157600080fd5b5061046b60048036036080811015610f7857600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515612f97565b348015610fac57600080fd5b5061046b61301d565b348015610fc157600080fd5b50610fe860048036036020811015610fd857600080fd5b50356001600160a01b0316613023565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561102457818101518382015260200161100c565b505050509050019250505060405180910390f35b34801561104457600080fd5b506103e66131ca565b34801561105957600080fd5b5061046b6004803603602081101561107057600080fd5b50356001600160a01b03166131d9565b34801561108c57600080fd5b5061046b600480360360608110156110a357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156110cd57600080fd5b8201836020820111156110df57600080fd5b803590602001918460208302840111600160201b8311171561110057600080fd5b919390929091602081019035600160201b81111561111d57600080fd5b82018360208201111561112f57600080fd5b803590602001918460208302840111600160201b8311171561115057600080fd5b5090925090506131f0565b34801561116757600080fd5b506103ae6004803603602081101561117e57600080fd5b503561326b565b34801561119157600080fd5b506103cf600480360360208110156111a857600080fd5b503561328a565b3480156111bb57600080fd5b50610385613460565b3480156111d057600080fd5b506103cf600480360360208110156111e757600080fd5b5035613470565b3480156111fa57600080fd5b5061127e6004803603606081101561121157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561124057600080fd5b82018360208201111561125257600080fd5b803590602001918460208302840111600160201b8311171561127357600080fd5b5090925090506134c7565b6040518080602001806020018415158152602001838103835286818151815260200191508051906020019060200280838360005b838110156112ca5781810151838201526020016112b2565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156113095781810151838201526020016112f1565b505050509050019550505050505060405180910390f35b34801561132c57600080fd5b5061046b61352d565b34801561134157600080fd5b506103cf613537565b34801561135657600080fd5b506103ae6004803603604081101561136d57600080fd5b50803590602001356001600160a01b03166135ca565b34801561138f57600080fd5b506103e6613606565b3480156113a457600080fd5b5061046b600480360360208110156113bb57600080fd5b5035613615565b3480156113ce57600080fd5b506103cf613620565b3480156113e357600080fd5b506113ec6136da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561142657818101518382015260200161140e565b50505050905090810190601f1680156114535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60035460ff1681565b600080611475613705565b90939092509050565b611486613775565b61148e6137c5565b601b5560185461149e903461382c565b6018556114a9613886565b6040805134815290517f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379181900360200190a16114e4613966565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6115126139b2565b601e546001600160a01b0316158015906115365750601c546001600160a01b031615155b801561154c5750601f546001600160a01b031615155b611591576040805162461bcd60e51b81526020600482015260116024820152701859191c995cdcd95cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b6003805460ff191660011790556040805130815290517f2d9c100169d5e24ef79d07ec273fcbbd5ce996a849ef0223f37c49f6418df84d9181900360200190a1565b601c546001600160a01b031681565b6020546001600160a01b031681565b60008073__$b9040dea2fd9c47e6b7e0e916053de4d6b$__63e937a562600f85611619613a11565b6040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561165b57600080fd5b505af415801561166f573d6000803e3d6000fd5b505050506040513d602081101561168557600080fd5b50516040805185815260208101839052815192935033927fd89f05622c2dcb0b4fcaa19e62fc2a2b0923955685fb7b0c641467f764244abc929181900390910190a290505b919050565b600f5490565b600054600160b01b900460ff16806116f75750600054600160a81b900460ff16155b156118ba57611704613a56565b60035460ff1615801561173f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b801561174b5750600654155b80156117575750600554155b61179c576040805162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b604482015290519081900360640190fd5b6117af60016117a9613a11565b9061382c565b600655601c5460408051633e7ff85760e01b815290516001600160a01b0390921691633e7ff85791600480820192602092909190829003018186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d602081101561182157600080fd5b505160055560408051633db5960560e11b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691637b6b2c0a916004808301926020929190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50516004556114e4565b6114e4600036613a8b565b60006118cf613c0e565b600280541415611914576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b6002805587876119248282613c65565b6119338a8a8a8a8a8a8a613cf2565b6001600255925061194691506139669050565b979650505050505050565b60008060008060175461197160165460135461382c90919063ffffffff16565b925092509250909192565b6000611986613eaf565b905090565b6060808073__$b9040dea2fd9c47e6b7e0e916053de4d6b$__6325459925600f866119b4613a11565b6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03168152602001828152602001935050505060006040518083038186803b1580156119ff57600080fd5b505af4158015611a13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526060811015611a3c57600080fd5b8101908080516040519392919084600160201b821115611a5b57600080fd5b908301906020820185811115611a7057600080fd5b82518660208202830111600160201b82111715611a8c57600080fd5b82525081516020918201928201910280838360005b83811015611ab9578181015183820152602001611aa1565b5050505090500160405260200180516040519392919084600160201b821115611ae157600080fd5b908301906020820185811115611af657600080fd5b82518660208202830111600160201b82111715611b1257600080fd5b82525081516020918201928201910280838360005b83811015611b3f578181015183820152602001611b27565b5050505090500160405260200180516040519392919084600160201b821115611b6757600080fd5b908301906020820185811115611b7c57600080fd5b82518660208202830111600160201b82111715611b9857600080fd5b82525081516020918201928201910280838360005b83811015611bc5578181015183820152602001611bad565b505050509050016040525050509250925092509193909250565b60055490565b611bed6139b2565b6003805460ff191690556040805130815290517fa391f4e911c33688045cc1f43dc17c05924f79ad72a8cf5a58cf00c3acc9090e9181900360200190a1565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b60008054600160a81b900460ff16611c74576000546001600160a01b0316611986565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb457600080fd5b505afa158015611cc8573d6000803e3d6000fd5b505050506040513d6020811015611cde57600080fd5b5051905090565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b158015611d2957600080fd5b505afa158015611d3d573d6000803e3d6000fd5b505050506040513d6020811015611d5357600080fd5b5051611d96576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054611e02576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b8054421015611e58576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ef25780601f10611ec757610100808354040283529160200191611ef2565b820191906000526020600020905b815481529060010190602001808311611ed557829003601f168201915b5050506001600160e01b0319861660009081526001602081905260408220828155949550909250611f2691508301826158b1565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b60208310611f6e5780518252601f199092019160209182019101611f4f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611fd0576040519150601f19603f3d011682016040523d82523d6000602084013e611fd5565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a161203481613ec0565b50505050565b60076001609c1b0181565b60009182526007602090815260408084206001600160a01b0390931684529190529020546001600160801b0380821692600160801b9092041690565b612089613edd565b60006120958383613f30565b6015549091506120a5908261382c565b601555604080518581526020810183905281517f754fa5a3ace0438b80ec651f7d61e44f761a808ebd17d7ce70da619399611a08929181900390910190a150505050565b6120f16139b2565b6001600160e01b0319811660009081526001602052604090205461215c576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b031981166000908152600160208190526040822082815591906121cc908301826158b1565b505050565b60006121e4826121df613f4d565b613f6d565b92915050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f810185900485028601850190965285855290949193929091908301828280156122865780601f1061225b57610100808354040283529160200191612286565b820191906000526020600020905b81548152906001019060200180831161226957829003601f168201915b5050505050905082565b60045481565b600054600160b01b900460ff16806122b85750600054600160a81b900460ff16155b1561237b576122c5613a56565b6020546001600160a01b031615612311576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b03811661235b576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b602080546001600160a01b0319166001600160a01b038316179055612386565b612386600036613a8b565b50565b601254601354601454601554601654601754601854601954601a54909192939495969798565b6000806123bd858585613f90565b6000958652600a602090815260408088206001600160a01b039788168952825280882095909616875293909352505091205490916101009091046001600160801b031690565b61240b613c0e565b600280541415612450576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b6002805561245c6137c5565b5060005b828110156124945761248c84848381811061247757fe5b905060200201356001600160a01b0316613fd2565b600101612460565b50600061249f613a11565b90506124ab828261401e565b6124ec576040805162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b604482015290519081900360640190fd5b601d546040805163712441d960e11b81523360048201818152602483019384526044830188905260009485946001600160a01b039091169363e24883b293928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561257057600080fd5b505afa158015612584573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156125ad57600080fd5b8101908080516040519392919084600160201b8211156125cc57600080fd5b9083019060208201858111156125e157600080fd5b82518660208202830111600160201b821117156125fd57600080fd5b82525081516020918201928201910280838360005b8381101561262a578181015183820152602001612612565b505050509190910160405250602001519294509192506000915061264e9050613f4d565b905060005b8681101561278957600088888381811061266957fe5b905060200201356001600160a01b03169050600085838151811061268957fe5b6020026020010151905060006126a183838b88614040565b9050816001600160a01b0316836001600160a01b0316146126ca576126c882838b88614040565b015b60408051808201909152601881527f636c61696d656420616d6f756e7420746f6f20736d616c6c0000000000000000602082015261270b90829088906140e4565b9050801561277e57601f546040805163b760faf960e01b81526001600160a01b0385811660048301529151919092169163b760faf991849160248082019260009290919082900301818588803b15801561276457600080fd5b505af1158015612778573d6000803e3d6000fd5b50505050505b505050600101612653565b5061279f33612798848961417b565b60006141d4565b50506001600255506121cc9050613966565b6000816127bc613eaf565b111580156127d85750600f546127d4906117a9613a11565b8211155b612820576040805162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840e4caeec2e4c840cae0dec6d60631b604482015290519081900360640190fd5b61282c600f84846142ef565b9392505050565b600054600160a01b900460ff1615612889576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b601f546001600160a01b031681565b606080606060008061290b613a11565b9050612917868261401e565b915081806129315750808614801561293157506004548610155b1561295b57600061294488886000614382565b805160408201516060909201519097509095509350505b5092959194509250565b61296d613edd565b861580159061297c5750885115155b61298257fe5b6000838152600c6020526040812082905561299d8584613f30565b905060008a5167ffffffffffffffff811180156129b957600080fd5b506040519080825280602002602001820160405280156129e3578160200160208202803683370190505b50905081816000815181106129f457fe5b602002602001018181525050888a600081518110612a0e57fe5b60209081029190910101528a51600019015b60008c8281518110612a2e57fe5b60200260200101519050612a888c8381518110612a4757fe5b60200260200101518d600081518110612a5c57fe5b602002602001015185600081518110612a7157fe5b60200260200101516149459092919063ffffffff16565b838381518110612a9457fe5b60209081029190910181019190915260008881526007825260408082206001600160a01b0385168352909252208351612ae090859085908110612ad357fe5b6020026020010151614a45565b81546001600160801b031981166001600160801b039182169290920116178155601f5460408051631257fcdb60e31b81526001600160a01b038581166004830152602482018a90529151612b9693612b9193612710939116916392bfe6d891604480820192602092909190829003018186803b158015612b5f57600080fd5b505afa158015612b73573d6000803e3d6000fd5b505050506040513d6020811015612b8957600080fd5b50519061417b565b614a45565b81546001600160801b03918216600160801b0291161781558351849084908110612bbc57fe5b60209081029190910181015160008a81526009835260408082206001600160a01b03871680845290855281832080549094019093558b82526008845280822092825291909252902054612cad57601f54604080516304bb4e4360e01b81526001600160a01b038581166004830152602482018a9052915191909216916304bb4e43916044808301926020929190829003018186803b158015612c5d57600080fd5b505afa158015612c71573d6000803e3d6000fd5b505050506040513d6020811015612c8757600080fd5b505160008981526008602090815260408083206001600160a01b03871684529091529020555b82612cb9575050612d2a565b838381518110612cc557fe5b602002602001015184600081518110612cda57fe5b6020026020010181815103915081815250508c8381518110612cf857fe5b60200260200101518d600081518110612d0d57fe5b602090810291909101018051919091039052505060001901612a20565b6000868152600d60205260409020805484019055601254612d4b908461382c565b601281905550876001600160a01b03167f8b2bc56c62594afde5b520e83e1ca19ebd071798db21382e328014f47b31ce578a8e85604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612dc9578181015183820152602001612db1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612e08578181015183820152602001612df0565b505050509050019550505050505060405180910390a2505050505050505050505050565b6000611986614a89565b612e3e611c2c565b6001600160a01b0316336001600160a01b031614612e9a576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b612ed3612ece83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250614aa8565b614bcc565b612edd8282614bf0565b5050565b6000612eeb613c0e565b600280541415612f30576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280556000805b83811015612f7857848482818110612f4c57fe5b90506020020135821015612f7057848482818110612f6657fe5b9050602002013591505b600101612f38565b50612f863386836000614d3b565b6001600255915061282c9050613966565b6000612fa1613c0e565b600280541415612fe6576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280558484612ff68282613c65565b61300287878787614d3b565b6001600255925061301591506139669050565b949350505050565b60105490565b6060600080613030613705565b909250905060018282030160008167ffffffffffffffff8111801561305457600080fd5b5060405190808252806020026020018201604052801561307e578160200160208202803683370190505b5090506000805b8381101561312b57600061309d898389016001614382565b905060005b81606001515181101561312157816060015181815181106130bf57fe5b60200260200101511580156130eb57506000826040015182815181106130e157fe5b6020026020010151115b156131195760018584815181106130fe57fe5b91151560209283029190910190910152600190930192613121565b6001016130a2565b5050600101613085565b508067ffffffffffffffff8111801561314357600080fd5b5060405190808252806020026020018201604052801561316d578160200160208202803683370190505b5095506000805b848110156131be5783818151811061318857fe5b6020026020010151156131b6578087018883815181106131a457fe5b60209081029190910101526001909101905b600101613174565b50505050505050919050565b601d546001600160a01b031681565b60006121e4826131e7613a11565b600f91906142ef565b60006131fa613c0e565b60028054141561323f576040805162461bcd60e51b815260206004820152601f60248201526000805160206159d2833981519152604482015290519081900360640190fd5b600280556132533387878787876000613cf2565b60016002559050613262613966565b95945050505050565b6000908152600d6020908152604080832054600e909252909120549091565b601c546001600160a01b03163314806132ad57506020546001600160a01b031633145b6132ee576040805162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b604482015290519081900360640190fd5b8060055414613335576040805162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590613371575060065460320181105b156133f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6c1dbee826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050505b6000818152600e6020908152604080832054600d9092529091205460145491900390613421908261382c565b6014556040805183815290517f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa589181900360200190a150600101600555565b600054600160a81b900460ff1681565b613478613775565b601a81905560175461348a908261382c565b601755426019556040805182815290517f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959181900360200190a150565b6060806000806134d5613a11565b90506134e1878261401e565b915081806134fb575080871480156134fb57506004548710155b15613522576000613510898989896000614db8565b90508060400151945080606001519350505b509450945094915050565b6000611986613a11565b61353f6139b2565b60001960045414613589576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015290519081900360640190fd5b613591613a11565b600481905560408051918252517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a089181900360200190a1565b60008281526009602090815260408083206001600160a01b03909416808452938252808320549483526008825280832093835292905220549091565b601e546001600160a01b031690565b60006121e482615194565b6136286139b2565b600054600160a81b900460ff1615613687576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b604080518082019091526011815270233a39b7a932bbb0b93226b0b730b3b2b960791b602082015290565b600554600080613713613a11565b90506000811161376a576040805162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c65207265776172647300604482015290519081900360640190fd5b600181039150509091565b601e546001600160a01b031633146114e4576040805162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b604482015290519081900360640190fd5b601b546000906137d5903461382c565b9050478181111561381e5761dead6108fc6137f08385615226565b6040518115909202916000818181858888f19350505050158015613818573d6000803e3d6000fd5b50613828565b8181101561382857fe5b5090565b60008282018381101561282c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006138ab6016546138a560145460155461382c90919063ffffffff16565b90615226565b905080156123865760006138c24760146064614945565b90506000818311156138d55750806138d8565b50815b80156121cc576016546138eb908261382c565b601655601b546138fb9082615226565b601b5560405161dead9082156108fc029083906000818181858888f1935050505015801561392d573d6000803e3d6000fd5b506040805182815290517f44d5cd18c37b86a3423952287006d9550ab3cff404d6e899d5499d9ef87100b59181900360200190a1505050565b61396e614a89565b47146114e4576040805162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b604482015290519081900360640190fd5b6139ba611c51565b6001600160a01b0316336001600160a01b0316146114e4576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b601c54604080516339f20c3560e21b815290516000926001600160a01b03169163e7c830d4916004808301926020929190829003018186803b158015611cb457600080fd5b600054600160b01b900460ff1615613a8357333014613a7157fe5b6000805460ff60b01b191690556114e4565b6114e46139b2565b613a936139b2565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613adb57600080fd5b505afa158015613aef573d6000803e3d6000fd5b505050506040513d6020811015613b0557600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450613b89939285019201906158f5565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b60035460ff166114e4576040805162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e61676572206465616374697661746564000000000000604482015290519081900360640190fd5b336001600160a01b0383161415613c7b57612edd565b601d546040805163ce2caa5760e01b81523360048201526001600160a01b03858116602483015284811660448301529151919092169163ce2caa57916064808301926000929190829003018186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050505050565b6000613cfd87613fd2565b613d056137c5565b506002601f546040805163f683776760e01b81526001600160a01b038c811660048301529151919092169163f6837767916024808301926020929190829003018186803b158015613d5557600080fd5b505afa158015613d69573d6000803e3d6000fd5b505050506040513d6020811015613d7f57600080fd5b505114613dd3576040805162461bcd60e51b815260206004820152601860248201527f6578706c696369742064656c65676174696f6e206f6e6c790000000000000000604482015290519081900360640190fd5b6000613ddd613a11565b905060005b86811015613e9757613e06888883818110613df957fe5b905060200201358361401e565b613e0f57613e8f565b6000613e318b8a8a85818110613e2157fe5b9050602002013589896001614db8565b90506000613e558c8c8c8c87818110613e4657fe5b90506020020135856001615283565b905080600e60008c8c87818110613e6857fe5b60209081029290920135835250810191909152604001600020805490910190559390930192505b600101613de2565b50613ea38883856141d4565b50979650505050505050565b6006546000906121e49060016154fb565b3d604051818101604052816000823e8215613ed9578181f35b8181fd5b601c546001600160a01b031633146114e4576040805162461bcd60e51b81526020600482015260116024820152706674736f206d616e61676572206f6e6c7960781b604482015290519081900360640190fd5b600061282c613f3f8385615521565b613f476155a0565b906155bf565b6000611986600454613f68613f60613eaf565b600554615626565b615626565b6001600160a01b0382166000908152600b602052604081205461282c9083615626565b6000838152600a602090815260408083206001600160a01b038087168552908352818420908516845290915281205460ff16806130155750613015848361563d565b6001600160a01b038116612386576040805162461bcd60e51b815260206004820152600e60248201526d726563697069656e74207a65726f60901b604482015290519081900360640190fd5b6000600454831015801561403457506005548310155b801561282c5750501190565b60008061404d8684613f6d565b90505b83811161409a57600061406587836001614382565b90506000614077888885856000615283565b6000848152600e6020526040902080548201905593909301925050600101614050565b506001600160a01b0385166000908152600b6020526040902054600184011115613015576001600160a01b0385166000908152600b60205260409020600184019055949350505050565b600081848411156141735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614138578181015183820152602001614120565b50505050905090810190601f1680156141655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008261418a575060006121e4565b8282028284828161419757fe5b041461282c5760405162461bcd60e51b8152600401808060200182810382526021815260200180615a196021913960400191505060405180910390fd5b81156142e657801561424f57601f546040805163b760faf960e01b81526001600160a01b0386811660048301529151919092169163b760faf991859160248082019260009290919082900301818588803b15801561423157600080fd5b505af1158015614245573d6000803e3d6000fd5b50505050506142e6565b6040516000906001600160a01b0385169084908381818185875af1925050503d806000811461429a576040519150601f19603f3d011682016040523d82523d6000602084013e61429f565b606091505b50509050806142e4576040805162461bcd60e51b815260206004820152600c60248201526b18db185a5b4819985a5b195960a21b604482015290519081900360640190fd5b505b505047601b5550565b6001600160a01b0382166000908152600284016020526040812080545b80156143735781546000199091019082908290811061432757fe5b6000918252602090912001546201000090046001600160f01b0316841061436e5781818154811061435457fe5b60009182526020909120015461ffff16925061282c915050565b61430c565b50505060018301549392505050565b61438a61597d565b600061439584615194565b90506000806143a26159a5565b6143ac878961563d565b156143ba575050505061282c565b60008781526009602090815260408083206001600160a01b038c1684529091529020541515806143e8575085155b1561441a576143f8888886615659565b91506144058789846157cf565b6001600160801b031660208201819052151592505b601f546040805163ed475a7960e01b81526001600160a01b038b811660048301526024820188905291516060938493169163ed475a79916044808301926000929190829003018186803b15801561447057600080fd5b505afa158015614484573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260808110156144ad57600080fd5b8101908080516040519392919084600160201b8211156144cc57600080fd5b9083019060208201858111156144e157600080fd5b82518660208202830111600160201b821117156144fd57600080fd5b82525081516020918201928201910280838360005b8381101561452a578181015183820152602001614512565b5050505090500160405260200180516040519392919084600160201b82111561455257600080fd5b90830190602082018581111561456757600080fd5b82518660208202830111600160201b8211171561458357600080fd5b82525081516020918201928201910280838360005b838110156145b0578181015183820152602001614598565b5050505091909101604052505083519395509193508791506145d590505760006145d8565b60015b60ff160167ffffffffffffffff811180156145f257600080fd5b5060405190808252806020026020018201604052801561461c578160200160208202803683370190505b508088525167ffffffffffffffff8111801561463757600080fd5b50604051908082528060200260200182016040528015614661578160200160208202803683370190505b50602088015286515167ffffffffffffffff8111801561468057600080fd5b506040519080825280602002602001820160405280156146aa578160200160208202803683370190505b50604088015286515167ffffffffffffffff811180156146c957600080fd5b506040519080825280602002602001820160405280156146f3578160200160208202803683370190505b506060880152841561477b5789876000015160008151811061471157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083876020015160008151811061474357fe5b60200260200101818152505082602001516001600160801b0316876040015160008151811061476e57fe5b6020026020010181815250505b81511561493857601f546040805163277166bf60e11b81526001600160a01b038d81166004830152602482018a905291516000939290921691634ee2cd7e91604480820192602092909190829003018186803b1580156147da57600080fd5b505afa1580156147ee573d6000803e3d6000fd5b505050506040513d602081101561480457600080fd5b5051905060005b83518110156149355760008188614823576000614826565b60015b60ff1601905084828151811061483857fe5b60200260200101518a60000151828151811061485057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506148b785838151811061487f57fe5b60200260200101516148b186858151811061489657fe5b6020026020010151612710876149459092919063ffffffff16565b8e61586c565b8a6020015182815181106148c757fe5b6020026020010181815250506149088c8684815181106148e357fe5b60200260200101518c6020015184815181106148fb57fe5b60200260200101516157cf565b6001600160801b03168a60400151828151811061492157fe5b60209081029190910101525060010161480b565b50505b5050505050509392505050565b600080821161498e576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8361499b5750600061282c565b838302838582816149a857fe5b0414156149c1578281816149b857fe5b0491505061282c565b60008386816149cc57fe5b04905060008487816149da57fe5b06905060008587816149e857fe5b04905060008688816149f657fe5b069050614a38614a0a88613f47868561417b565b6117a9614a17868661417b565b6117a9614a24898761417b565b6117a98d614a328c8b61417b565b9061417b565b9998505050505050505050565b6000600160801b82106138285760405162461bcd60e51b81526004018080602001828103825260278152602001806159f26027913960400191505060405180910390fd5b60006119866016546138a560135460185461522690919063ffffffff16565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015614aec578181015183820152602001614ad4565b50505050905090810190601f168015614b195780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015614b8157868181518110614b4f57fe5b6020026020010151831415614b7957858181518110614b6a57fe5b60200260200101519150614b81565b600101614b3a565b506001600160a01b038116613262576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b614c1c82826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250614aa8565b601e60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614c7082826040518060400160405280600b81526020016a233a39b7a6b0b730b3b2b960a91b815250614aa8565b601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614cbd82826040518060400160405280600481526020016315d3985d60e21b815250614aa8565b601f60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614d1782826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b815250614aa8565b601d80546001600160a01b0319166001600160a01b03929092169190911790555050565b6000614d4684613fd2565b614d4e6137c5565b506000614d59613a11565b9050808410158015614d6b5750600081115b15614d77576001810393505b614d81848261401e565b614d8f576000915050613015565b614da2868686614d9d613f4d565b614040565b9150614daf8583856141d4565b50949350505050565b614dc061597d565b6000614dcb86615194565b6040805160208088028281018201909352878252929350869290918891849182918501908490808284376000920191909152505050908452508067ffffffffffffffff81118015614e1b57600080fd5b50604051908082528060200260200182016040528015614e45578160200160208202803683370190505b5060208401528067ffffffffffffffff81118015614e6257600080fd5b50604051908082528060200260200182016040528015614e8c578160200160208202803683370190505b5060408401528067ffffffffffffffff81118015614ea957600080fd5b50604051908082528060200260200182016040528015614ed3578160200160208202803683370190505b50606084015260005b8181101561518857614f0a88888884818110614ef457fe5b905060200201356001600160a01b03168b613f90565b84606001518281518110614f1a57fe5b60200260200101901515908115158152505083606001518181518110614f3c57fe5b602002602001015115614fd15784614fcc576000888152600a6020526040812090888884818110614f6957fe5b602090810292909201356001600160a01b039081168452838301949094525060409182016000908120938d16815292905290819020549085015180516101009092046001600160801b03169183908110614fbf57fe5b6020026020010181815250505b615180565b886001600160a01b0316878783818110614fe757fe5b905060200201356001600160a01b03166001600160a01b0316141561503257615011898985615659565b8460200151828151811061502157fe5b60200260200101818152505061512a565b601f546000906001600160a01b031663e64767aa8b8a8a8681811061505357fe5b905060200201356001600160a01b0316876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060206040518083038186803b1580156150b857600080fd5b505afa1580156150cc573d6000803e3d6000fd5b505050506040513d60208110156150e257600080fd5b5051905061510c8888848181106150f557fe5b905060200201356001600160a01b0316828b61586c565b8560200151838151811061511c57fe5b602002602001018181525050505b61515a8888888481811061513a57fe5b905060200201356001600160a01b0316866020015184815181106148fb57fe5b6001600160801b03168460400151828151811061517357fe5b6020026020010181815250505b600101614edc565b50505095945050505050565b6000818152600c6020526040902054806116ca57601c5460408051637976d5ad60e11b81526004810185905290516001600160a01b039092169163f2edab5a91602480820192602092909190829003018186803b1580156151f457600080fd5b505afa158015615208573d6000803e3d6000fd5b505050506040513d602081101561521e57600080fd5b505192915050565b60008282111561527d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080805b8451518110156154f057846060015181815181106152a257fe5b6020026020010151156152b4576154e8565b6000856000015182815181106152c657fe5b60209081029190910181015160008981526007835260408082206001600160a01b038416835284528120928901518051929450909161530a919086908110612ad357fe5b90506001600160801b0381161561533b5781546001600160801b03600160801b808304821684900382160291161782555b600061535089604001518681518110612ad357fe5b90506001600160801b038116156153935782546001600160801b031981166001600160801b03918216839003821617845560138054918316918201905595909501945b871561547d576000600a60008c81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002090508060000160009054906101000a900460ff161561544c576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b8054600160ff199091161770ffffffffffffffffffffffffffffffff0019166101006001600160801b038416021790555b8a6001600160a01b03168c6001600160a01b0316856001600160a01b03167f6ec685171a9028d19dc155a48e7824e3c68b03bc8995410e006abe3cbbeb3e2d8d8560405180838152602001826001600160801b031681526020019250505060405180910390a4505050505b600101615288565b509695505050505050565b600080838311156155115750600090508061551a565b50600190508183035b9250929050565b60008061553c6201517f60195461382c90919063ffffffff16565b905080841115615587576040805162461bcd60e51b81526020600482015260116024820152706166746572206461696c79206379636c6560781b604482015290519081900360640190fd5b61559583613f478387615226565b600101949350505050565b60006119866015546138a560125460175461522690919063ffffffff16565b6000808211615615576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161561e57fe5b049392505050565b600081831015615636578161282c565b5090919050565b6001600160a01b03166000908152600b60205260409020541190565b601f5460408051634181ad4160e11b81526001600160a01b038681166004830152602482018590529151600093849316916383035a82916044808301926020929190829003018186803b1580156156af57600080fd5b505afa1580156156c3573d6000803e3d6000fd5b505050506040513d60208110156156d957600080fd5b5051601f5460408051631257fcdb60e31b81526001600160a01b03898116600483015260248201889052915193945060009391909216916392bfe6d8916044808301926020929190829003018186803b15801561573557600080fd5b505afa158015615749573d6000803e3d6000fd5b505050506040513d602081101561575f57600080fd5b5051905081811415615780576157778161271061417b565b9250505061282c565b81811161578957fe5b6000821561579f5761579d8361271061417b565b015b60006157ad600f89896142ef565b905080156154f0576157c18484038261417b565b909101979650505050505050565b6000816157de5750600061282c565b60008481526007602090815260408083206001600160a01b0387168452909152902080546001600160801b03168061581b5760009250505061282c565b8154600160801b90046001600160801b03168481141561583f5750915061282c9050565b806001600160801b0316851061585157fe5b611946612b916001600160801b038481169088908516614945565b60008261587b5750600061282c565b60008061588a600f87866142ef565b9050612710811015614daf576158a58561271083900361417b565b90910195945050505050565b50805460018160011615610100020316600290046000825580601f106158d75750612386565b601f01602090049060005260206000209081019061238691906159bc565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261592b5760008555615971565b82601f1061594457805160ff1916838001178555615971565b82800160010185558215615971579182015b82811115615971578251825591602001919060010190615956565b506138289291506159bc565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b604080518082019091526000808252602082015290565b5b8082111561382857600081556001016159bd56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c0053616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a3b07391711460178c762943da70711db7fb79ae3193a9e92538eb21f787848364736f6c63430007060033", - "linkReferences": { - "contracts/tokenPools/lib/DataProviderFee.sol": { - "DataProviderFee": [ - { - "length": 20, - "start": 6156 - }, - { - "length": 20, - "start": 7079 - } - ] - } - }, - "deployedLinkReferences": { - "contracts/tokenPools/lib/DataProviderFee.sol": { - "DataProviderFee": [ - { - "length": 20, - "start": 5622 - }, - { - "length": 20, - "start": 6545 - } - ] - } - } -} diff --git a/deploys/flare.json b/deploys/flare.json index 4903d85..5c1a75d 100644 --- a/deploys/flare.json +++ b/deploys/flare.json @@ -1,14 +1,4 @@ [ - { - "name": "FtsoRewardManager", - "contractName": "FtsoRewardManager.sol", - "address": "0x85627d71921AE25769f5370E482AdA5E1e418d37" - }, - { - "name": "FtsoManager", - "contractName": "FtsoManager.sol", - "address": "0x2E99a4543F9ea708Cf8CCaC447515e61706D9DE9" - }, { "name": "PChainStakeMirrorMultiSigVoting", "contractName": "PChainStakeMirrorMultiSigVoting.sol", @@ -23,5 +13,10 @@ "name": "AddressBinder", "contractName": "AddressBinder.sol", "address": "0x57c5149c6cdC7bA379aFAe28e6497Ae26c252738" + }, + { + "name": "FlareSystemsManager", + "contractName": "FlareSystemsManager.sol", + "address": "0x89e50DC0380e597ecE79c8494bAAFD84537AD0D4" } ] diff --git a/ftso-address.csv b/ftso-address.csv index acb0f37..b7c8f7b 100644 --- a/ftso-address.csv +++ b/ftso-address.csv @@ -108,4 +108,5 @@ Encode Club,0x1c2bb2ca14914a462ab7268de4a48ef6445116c2,NodeID-9fsCXCFJ7hzgsGK4FV FlareFi,0x184DbC7F2D96aBDfDe5CDa8c56F3F13DbF138cdF,NodeID-8aGBxZssVWRvEr57YGRsWjZTHbnoWrfcc,235 Bifrost Wallet 2,0x9A46864A3b0a7805B266C445289C3fAD1E48f18e,NodeID-GZEWkCpn852hwKhbGNJgZvbjtvEfU6Ktg,238 Oracle Daemon,0xfe532cB6Fb3C47940aeA7BeAd4d61C5e041D950e,NodeID-GEC63GVfeYLG5UUBPSgiiN4YMvT71jdP,241 -Oracle Daemon,0xfe532cB6Fb3C47940aeA7BeAd4d61C5e041D950e,NodeID-2miZhA7JAnyf9s5rYzDeNciwg4448LKsP,241 \ No newline at end of file +Oracle Daemon,0xfe532cB6Fb3C47940aeA7BeAd4d61C5e041D950e,NodeID-2miZhA7JAnyf9s5rYzDeNciwg4448LKsP,241 +Poseidon FTSO,0xD3b3Bd5207687d43c9cCBBbca830dfe2A13EE5b7,NodeID-CtSfUZd8nvr4RDaQnKRiP9cae15Nrb1bX,244 \ No newline at end of file diff --git a/src/scripts/sync-artifacts.ts b/src/scripts/sync-artifacts.ts index fba7ca0..c409ed1 100644 --- a/src/scripts/sync-artifacts.ts +++ b/src/scripts/sync-artifacts.ts @@ -1,6 +1,6 @@ import { refreshArtifacts } from '../utils/artifact-utils'; -const contractToSync = ['FtsoManager', 'FtsoRewardManager', 'PChainStakeMirrorMultiSigVoting', 'AddressBinder', 'ValidatorRewardManager']; +const contractToSync = ['FlareSystemsManager', 'PChainStakeMirrorMultiSigVoting', 'AddressBinder', 'ValidatorRewardManager']; refreshArtifacts(contractToSync) .then(() => process.exit(0)) diff --git a/src/services/CalculatingRewardsService.ts b/src/services/CalculatingRewardsService.ts index 3742c5a..477aeba 100644 --- a/src/services/CalculatingRewardsService.ts +++ b/src/services/CalculatingRewardsService.ts @@ -1,18 +1,16 @@ import { Factory, Inject, Singleton } from 'typescript-ioc'; import { AttLogger } from '../logger/logger'; -import { DelegationData, DelegatorData, ActiveNode, Entity, FtsoData, NodeData, PAddressData, RewardsData, UptimeVote, RewardingPeriodData, DataValidatorRewardManager } from '../utils/interfaces'; +import { DelegationData, DelegatorData, ActiveNode, Entity, FtsoData, NodeData, PAddressData, RewardsData, UptimeVote, RewardingPeriodData, DataValidatorRewardManager, ClaimType, IRewardClaimWithProof } from '../utils/interfaces'; import { nodeIdToBytes20, pAddressToBytes20, sleepms } from '../utils/utils'; import { ConfigurationService } from './ConfigurationService'; import { ContractService } from './ContractService'; import { LoggerService } from './LoggerService'; import * as fs from 'fs'; -import { parse } from 'json2csv'; import axios from 'axios'; -import { FtsoRewardManager } from '../../typechain-web3-v1/FtsoRewardManager'; import { EventProcessorService } from './EventProcessorService'; import { AddressBinder } from '../../typechain-web3-v1/AddressBinder'; import { ValidatorRewardManager } from '../../typechain-web3-v1/ValidatorRewardManager'; -import { FtsoManager } from '../../typechain-web3-v1/FtsoManager'; +import { FlareSystemsManager } from '../../typechain-web3-v1/FlareSystemsManager'; // import { parse } from 'csv-parse'; const parseCsv = require('csv-parse/lib/sync'); const VALIDATORS_API = 'validators/list'; @@ -45,8 +43,7 @@ export class CalculatingRewardsService { this.logger.info(`waiting for network connection...`); // contracts - let ftsoManager = await this.contractService.ftsoManager(); - let ftsoRewardManager = await this.contractService.ftsoRewardManager(); + const flareSystemsManager = await this.contractService.flareSystemsManager(); let validatorRewardManager = await this.contractService.validatorRewardManager(); let pChainStakeMirrorMultiSigVoting = await this.contractService.pChainStakeMirrorMultiSigVoting(); let addressBinder = await this.contractService.addressBinder(); @@ -68,7 +65,7 @@ export class CalculatingRewardsService { if (rewardEpoch === undefined) { await sleepms(1000 / rps); - rewardEpoch = parseInt(await ftsoRewardManager.methods.getCurrentRewardEpoch().call()) - 1; + rewardEpoch = parseInt(await flareSystemsManager.methods.getCurrentRewardEpoch().call()) - 1; } const generatedFilesPath = `generated-files/reward-epoch-${rewardEpoch}` @@ -77,24 +74,23 @@ export class CalculatingRewardsService { let rewardAmount: bigint; await sleepms(1000 / rps); - let nextRewardEpochData = await ftsoManager.methods.getRewardEpochData((rewardEpoch + 1).toString()).call(); - let ftsoVpBlock = parseInt(nextRewardEpochData[0]); - let nextRewardEpochStartBlock = parseInt(nextRewardEpochData[1]); - let nextRewardEpochStartTs = parseInt(nextRewardEpochData[2]); // rewardEpochEndTs - let stakingVpBlock = nextRewardEpochStartBlock - 2 * (nextRewardEpochStartBlock - ftsoVpBlock); + const nextRewardEpochData = await flareSystemsManager.methods.getRewardEpochStartInfo(rewardEpoch + 1).call(); + const nextRewardEpochStartBlock = parseInt(nextRewardEpochData[1]); + const nextRewardEpochStartTs = parseInt(nextRewardEpochData[0]); // rewardEpochEndTs + const stakingVpBlock = Number(await flareSystemsManager.methods.getVotePowerBlock(rewardEpoch + 1).call()); //// get list of nodes with sufficient uptime await this.contractService.resetUptimeArray(); await this.eventProcessorService.processEvents(nextRewardEpochStartBlock, rps, batchSize, uptimeVotingPeriodLengthSeconds, nextRewardEpochStartTs, rewardEpoch); - let uptimeVotingData = await this.contractService.getUptimeVotingData(); - let eligibleNodesUptime = await this.getUptimeEligibleNodes(uptimeVotingData, uptimeVotingThreshold); + const uptimeVotingData = await this.contractService.getUptimeVotingData(); + const eligibleNodesUptime = await this.getUptimeEligibleNodes(uptimeVotingData, uptimeVotingThreshold); // get active nodes at staking vote power block - let activeNodes = await this.getActiveStakes(stakingVpBlock, apiPath, VALIDATORS_API) as NodeData[]; + const activeNodes = await this.getActiveStakes(stakingVpBlock, apiPath, VALIDATORS_API) as NodeData[]; activeNodes.sort((a, b) => a.startTime - b.startTime || a.nodeID.toLowerCase().localeCompare(b.nodeID.toLowerCase())); // get delegations active at staking vp block - let delegations = await this.getActiveStakes(stakingVpBlock, apiPath, DELEGATORS_API) as DelegationData[]; + const delegations = await this.getActiveStakes(stakingVpBlock, apiPath, DELEGATORS_API) as DelegationData[]; delegations.sort((a, b) => a.startTime - b.startTime || a.txID.toLowerCase().localeCompare(b.txID.toLowerCase())); // total stake (self-bonds + delegations) of the network at staking VP block @@ -106,8 +102,14 @@ export class CalculatingRewardsService { //// for each node check if it is eligible for rewarding, get its delegations, decide to which entity it belongs and calculate boost, total stake amount, ... this.logger.info(`^Rprocessing nodes data started`); + // get ftso v2 performance data + let res = await axios.get(`https://raw.githubusercontent.com/flare-foundation/fsp-rewards/refs/heads/main/flare/${rewardEpoch}/reward-distribution-data.json`); + let data = res.data.rewardClaims.filter( + claimWithProof => + claimWithProof.body.claimType == ClaimType.WNAT + ); for (const activeNode of activeNodes) { - let [eligible, ftsoAddress, nonEligibilityReason, ftsoName] = await this.isEligibleForReward(activeNode, eligibleNodesUptime, ftsoAddresses, ftsoRewardManager, rewardEpoch, ftsoPerformanceForRewardWei, rps); + let [eligible, ftsoAddress, nonEligibilityReason, ftsoName] = await this.isEligibleForReward(activeNode, eligibleNodesUptime, ftsoAddresses, rewardEpoch, ftsoPerformanceForRewardWei, data); // decide to which group node belongs let node = await this.nodeGroup(activeNode, ftsoAddress, boostingAddresses, pChainAddresses); @@ -201,7 +203,7 @@ export class CalculatingRewardsService { // reward amount available for distribution if (rewardAmountEpochWei === undefined) { - rewardAmount = await this.getRewardAmount(validatorRewardManager, ftsoManager); + rewardAmount = await this.getRewardAmount(validatorRewardManager, flareSystemsManager); } else { rewardAmount = BigInt(rewardAmountEpochWei); } @@ -339,11 +341,11 @@ export class CalculatingRewardsService { } // check if node is eligible (high enough ftso performance and uptime) for rewards - public async isEligibleForReward(node: NodeData, eligibleNodesUptime: string[], ftsoAddresses: FtsoData[], ftsoRewardManager: FtsoRewardManager, epochNum: number, ftsoPerformanceForReward: string, rps: number): Promise<[boolean, string, string, string]> { + public async isEligibleForReward(node: NodeData, eligibleNodesUptime: string[], ftsoAddresses: FtsoData[], epochNum: number, ftsoPerformanceForReward: string, ftsoPerformanceData: any): Promise<[boolean, string, string, string]> { let nonEligibilityReason: string; // find node's entity/ftso address - let ftsoObj = ftsoAddresses.find(obj => { + const ftsoObj = ftsoAddresses.find(obj => { return obj.nodeId == node.nodeID; }) if (ftsoObj === undefined || ftsoObj.firstEpoch > epochNum) { @@ -354,14 +356,18 @@ export class CalculatingRewardsService { // uptime if (!eligibleNodesUptime.includes(nodeIdToBytes20(node.nodeID))) { nonEligibilityReason = "not high enough uptime"; + this.logger.info(`${node.nodeID}: not high enough uptime`); return [false, ftsoObj.ftsoAddress, nonEligibilityReason, ftsoObj.ftsoName]; } // ftso rewards - await sleepms(1000 / rps); - let ftsoPerformance = await ftsoRewardManager.methods.getDataProviderPerformanceInfo(epochNum.toString(), ftsoObj.ftsoAddress).call(); - if (BigInt(ftsoPerformance[0]) <= BigInt(ftsoPerformanceForReward)) { + const rewardClaim: IRewardClaimWithProof = ftsoPerformanceData.find((claimWithProof: IRewardClaimWithProof) => { + return claimWithProof.body.beneficiary.toLowerCase() == ftsoObj.ftsoAddress.toLowerCase(); + }); + // data provider has reward amount 0 or lower than ftsoPerformanceForReward + if (rewardClaim == undefined || BigInt(rewardClaim.body.amount) <= BigInt(ftsoPerformanceForReward)) { nonEligibilityReason = "not high enough FTSO performance"; + this.logger.info(`${node.nodeID}: not high enough FTSO performance`); return [false, ftsoObj.ftsoAddress, nonEligibilityReason, ftsoObj.ftsoName]; } return [true, ftsoObj.ftsoAddress, nonEligibilityReason, ftsoObj.ftsoName]; @@ -420,9 +426,9 @@ export class CalculatingRewardsService { return [activeNodes, totalCappedWeightEligible, entities]; } - public async getRewardAmount(validatorRewardManager: ValidatorRewardManager, ftsoManager: FtsoManager): Promise { + public async getRewardAmount(validatorRewardManager: ValidatorRewardManager, flareSystemsManager: FlareSystemsManager): Promise { let totals = await validatorRewardManager.methods.getTotals().call(); - let epochDurationSeconds = await ftsoManager.methods.rewardEpochDurationSeconds().call(); + let epochDurationSeconds = await flareSystemsManager.methods.rewardEpochDurationSeconds().call(); return BigInt(totals[5]) * BigInt(epochDurationSeconds) / BigInt(DAY_SECONDS); } diff --git a/src/services/ContractService.ts b/src/services/ContractService.ts index 1b78f71..ebef6d6 100644 --- a/src/services/ContractService.ts +++ b/src/services/ContractService.ts @@ -11,6 +11,7 @@ import { FtsoRewardManager } from '../../typechain-web3-v1/FtsoRewardManager'; import { PChainStakeMirrorMultiSigVoting } from '../../typechain-web3-v1/PChainStakeMirrorMultiSigVoting'; import { AddressBinder } from '../../typechain-web3-v1/AddressBinder'; import { ValidatorRewardManager } from '../../typechain-web3-v1/ValidatorRewardManager'; +import { FlareSystemsManager } from '../../typechain-web3-v1/FlareSystemsManager'; @Singleton @Factory(() => new ContractService()) @@ -92,12 +93,8 @@ export class ContractService { } /// Specific contracts - add them manually here - public async ftsoManager(): Promise { - return (await this.getContract('FtsoManager')) as FtsoManager; - } - - public async ftsoRewardManager(): Promise { - return (await this.getContract('FtsoRewardManager')) as FtsoRewardManager; + public async flareSystemsManager(): Promise { + return (await this.getContract('FlareSystemsManager')) as FlareSystemsManager; } public async validatorRewardManager(): Promise { diff --git a/src/utils/interfaces.ts b/src/utils/interfaces.ts index 40d1674..c53c1df 100644 --- a/src/utils/interfaces.ts +++ b/src/utils/interfaces.ts @@ -118,6 +118,24 @@ export interface UptimeVote { nodeIds: string[]; } +export enum ClaimType { + DIRECT, + FEE, + WNAT, + MIRROR, + CCHAIN, + } +export interface IRewardClaim { + beneficiary: string; + amount: bigint; + claimType: ClaimType; + rewardEpochId: number; + } + export interface IRewardClaimWithProof { + merkleProof: string[]; + body: IRewardClaim; + } + // Config file exports export interface INetworkConfigJson { NETWORK: string; diff --git a/typechain-web3-v1/AddressBinder.d.ts b/typechain-web3-v1/AddressBinder.d.ts index 0de7b46..c6fbdad 100644 --- a/typechain-web3-v1/AddressBinder.d.ts +++ b/typechain-web3-v1/AddressBinder.d.ts @@ -49,6 +49,15 @@ export interface AddressBinder extends BaseContract { _pAddress: string | number[], _cAddress: string ): NonPayableTransactionObject; + + registerPublicKey( + _publicKey: string | number[] + ): NonPayableTransactionObject<{ + _pAddress: string; + _cAddress: string; + 0: string; + 1: string; + }>; }; events: { AddressesRegistered(cb?: Callback): EventEmitter; diff --git a/typechain-web3-v1/FlareSystemsManager.d.ts b/typechain-web3-v1/FlareSystemsManager.d.ts new file mode 100644 index 0000000..e8f17ae --- /dev/null +++ b/typechain-web3-v1/FlareSystemsManager.d.ts @@ -0,0 +1,728 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import BN from "bn.js"; +import { ContractOptions } from "web3-eth-contract"; +import { EventLog } from "web3-core"; +import { EventEmitter } from "events"; +import { + Callback, + PayableTransactionObject, + NonPayableTransactionObject, + BlockType, + ContractEventLog, + BaseContract, +} from "./types"; + +interface EventOptions { + filter?: object; + fromBlock?: BlockType; + topics?: string[]; +} + +export type ClosingExpiredRewardEpochFailed = ContractEventLog<{ + rewardEpochId: string; + 0: string; +}>; +export type GovernanceCallTimelocked = ContractEventLog<{ + selector: string; + allowedAfterTimestamp: string; + encodedCall: string; + 0: string; + 1: string; + 2: string; +}>; +export type GovernanceInitialised = ContractEventLog<{ + initialGovernance: string; + 0: string; +}>; +export type GovernedProductionModeEntered = ContractEventLog<{ + governanceSettings: string; + 0: string; +}>; +export type RandomAcquisitionStarted = ContractEventLog<{ + rewardEpochId: string; + timestamp: string; + 0: string; + 1: string; +}>; +export type RewardEpochStarted = ContractEventLog<{ + rewardEpochId: string; + startVotingRoundId: string; + timestamp: string; + 0: string; + 1: string; + 2: string; +}>; +export type RewardsSigned = ContractEventLog<{ + rewardEpochId: string; + signingPolicyAddress: string; + voter: string; + rewardsHash: string; + noOfWeightBasedClaims: [string, string][]; + timestamp: string; + thresholdReached: boolean; + 0: string; + 1: string; + 2: string; + 3: string; + 4: [string, string][]; + 5: string; + 6: boolean; +}>; +export type SettingCleanUpBlockNumberFailed = ContractEventLog<{ + blockNumber: string; + 0: string; +}>; +export type SignUptimeVoteEnabled = ContractEventLog<{ + rewardEpochId: string; + timestamp: string; + 0: string; + 1: string; +}>; +export type SigningPolicySigned = ContractEventLog<{ + rewardEpochId: string; + signingPolicyAddress: string; + voter: string; + timestamp: string; + thresholdReached: boolean; + 0: string; + 1: string; + 2: string; + 3: string; + 4: boolean; +}>; +export type TimelockedGovernanceCallCanceled = ContractEventLog<{ + selector: string; + timestamp: string; + 0: string; + 1: string; +}>; +export type TimelockedGovernanceCallExecuted = ContractEventLog<{ + selector: string; + timestamp: string; + 0: string; + 1: string; +}>; +export type TriggeringVoterRegistrationFailed = ContractEventLog<{ + rewardEpochId: string; + 0: string; +}>; +export type UptimeVoteSigned = ContractEventLog<{ + rewardEpochId: string; + signingPolicyAddress: string; + voter: string; + uptimeVoteHash: string; + timestamp: string; + thresholdReached: boolean; + 0: string; + 1: string; + 2: string; + 3: string; + 4: string; + 5: boolean; +}>; +export type UptimeVoteSubmitted = ContractEventLog<{ + rewardEpochId: string; + signingPolicyAddress: string; + voter: string; + nodeIds: string[]; + timestamp: string; + 0: string; + 1: string; + 2: string; + 3: string[]; + 4: string; +}>; +export type VotePowerBlockSelected = ContractEventLog<{ + rewardEpochId: string; + votePowerBlock: string; + timestamp: string; + 0: string; + 1: string; + 2: string; +}>; + +export interface FlareSystemsManager extends BaseContract { + constructor( + jsonInterface: any[], + address?: string, + options?: ContractOptions + ): FlareSystemsManager; + clone(): FlareSystemsManager; + methods: { + cancelGovernanceCall( + _selector: string | number[] + ): NonPayableTransactionObject; + + cleanupBlockNumberManager(): NonPayableTransactionObject; + + currentRewardEpochExpectedEndTs(): NonPayableTransactionObject; + + daemonize(): NonPayableTransactionObject; + + executeGovernanceCall( + _selector: string | number[] + ): NonPayableTransactionObject; + + firstRewardEpochStartTs(): NonPayableTransactionObject; + + firstVotingRoundStartTs(): NonPayableTransactionObject; + + flareDaemon(): NonPayableTransactionObject; + + getAddressUpdater(): NonPayableTransactionObject; + + getContractName(): NonPayableTransactionObject; + + getCurrentRewardEpoch(): NonPayableTransactionObject; + + getCurrentRewardEpochId(): NonPayableTransactionObject; + + getCurrentVotingEpochId(): NonPayableTransactionObject; + + getRandomAcquisitionInfo( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _randomAcquisitionStartTs: string; + _randomAcquisitionStartBlock: string; + _randomAcquisitionEndTs: string; + _randomAcquisitionEndBlock: string; + 0: string; + 1: string; + 2: string; + 3: string; + }>; + + getRewardEpochStartInfo( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _rewardEpochStartTs: string; + _rewardEpochStartBlock: string; + 0: string; + 1: string; + }>; + + getRewardEpochSwitchoverTriggerContracts(): NonPayableTransactionObject< + string[] + >; + + getRewardsSignInfo( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _rewardsSignStartTs: string; + _rewardsSignStartBlock: string; + _rewardsSignEndTs: string; + _rewardsSignEndBlock: string; + 0: string; + 1: string; + 2: string; + 3: string; + }>; + + getSeed( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + getSigningPolicySignInfo( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _signingPolicySignStartTs: string; + _signingPolicySignStartBlock: string; + _signingPolicySignEndTs: string; + _signingPolicySignEndBlock: string; + 0: string; + 1: string; + 2: string; + 3: string; + }>; + + getStartVotingRoundId( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + getThreshold( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + getUptimeVoteSignStartInfo( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _uptimeVoteSignStartTs: string; + _uptimeVoteSignStartBlock: string; + 0: string; + 1: string; + }>; + + getVotePowerBlock( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + getVoterRegistrationData( + _rewardEpochId: number | string | BN + ): NonPayableTransactionObject<{ + _votePowerBlock: string; + _enabled: boolean; + 0: string; + 1: boolean; + }>; + + getVoterRewardsSignInfo( + _rewardEpochId: number | string | BN, + _voter: string + ): NonPayableTransactionObject<{ + _rewardsSignTs: string; + _rewardsSignBlock: string; + 0: string; + 1: string; + }>; + + getVoterSigningPolicySignInfo( + _rewardEpochId: number | string | BN, + _voter: string + ): NonPayableTransactionObject<{ + _signingPolicySignTs: string; + _signingPolicySignBlock: string; + 0: string; + 1: string; + }>; + + getVoterUptimeVoteSignInfo( + _rewardEpochId: number | string | BN, + _voter: string + ): NonPayableTransactionObject<{ + _uptimeVoteSignTs: string; + _uptimeVoteSignBlock: string; + 0: string; + 1: string; + }>; + + getVoterUptimeVoteSubmitInfo( + _rewardEpochId: number | string | BN, + _voter: string + ): NonPayableTransactionObject<{ + _uptimeVoteSubmitTs: string; + _uptimeVoteSubmitBlock: string; + 0: string; + 1: string; + }>; + + governance(): NonPayableTransactionObject; + + governanceSettings(): NonPayableTransactionObject; + + initialRandomVotePowerBlockSelectionSize(): NonPayableTransactionObject; + + initialise( + _governanceSettings: string, + _initialGovernance: string + ): NonPayableTransactionObject; + + isExecutor(_address: string): NonPayableTransactionObject; + + isVoterRegistrationEnabled(): NonPayableTransactionObject; + + lastInitializedVotingRoundId(): NonPayableTransactionObject; + + newSigningPolicyInitializationStartSeconds(): NonPayableTransactionObject; + + newSigningPolicyMinNumberOfVotingRoundsDelay(): NonPayableTransactionObject; + + noOfWeightBasedClaims( + rewardEpochId: number | string | BN, + rewardManagerId: number | string | BN + ): NonPayableTransactionObject; + + noOfWeightBasedClaimsHash( + rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + productionMode(): NonPayableTransactionObject; + + randomAcquisitionMaxDurationBlocks(): NonPayableTransactionObject; + + randomAcquisitionMaxDurationSeconds(): NonPayableTransactionObject; + + relay(): NonPayableTransactionObject; + + rewardEpochDurationSeconds(): NonPayableTransactionObject; + + rewardEpochIdToExpireNext(): NonPayableTransactionObject; + + rewardExpiryOffsetSeconds(): NonPayableTransactionObject; + + rewardManager(): NonPayableTransactionObject; + + rewardsHash( + rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + setRewardEpochSwitchoverTriggerContracts( + _contracts: string[] + ): NonPayableTransactionObject; + + setRewardsData( + _rewardEpochId: number | string | BN, + _noOfWeightBasedClaims: [number | string | BN, number | string | BN][], + _rewardsHash: string | number[] + ): NonPayableTransactionObject; + + setSubmit3Aligned( + _submit3Aligned: boolean + ): NonPayableTransactionObject; + + setTriggerExpirationAndCleanup( + _triggerExpirationAndCleanup: boolean + ): NonPayableTransactionObject; + + setVoterRegistrationTriggerContract( + _contract: string + ): NonPayableTransactionObject; + + signNewSigningPolicy( + _rewardEpochId: number | string | BN, + _newSigningPolicyHash: string | number[], + _signature: [number | string | BN, string | number[], string | number[]] + ): NonPayableTransactionObject; + + signRewards( + _rewardEpochId: number | string | BN, + _noOfWeightBasedClaims: [number | string | BN, number | string | BN][], + _rewardsHash: string | number[], + _signature: [number | string | BN, string | number[], string | number[]] + ): NonPayableTransactionObject; + + signUptimeVote( + _rewardEpochId: number | string | BN, + _uptimeVoteHash: string | number[], + _signature: [number | string | BN, string | number[], string | number[]] + ): NonPayableTransactionObject; + + signingPolicyMinNumberOfVoters(): NonPayableTransactionObject; + + signingPolicyThresholdPPM(): NonPayableTransactionObject; + + submission(): NonPayableTransactionObject; + + submit3Aligned(): NonPayableTransactionObject; + + submitUptimeVote( + _rewardEpochId: number | string | BN, + _nodeIds: (string | number[])[], + _signature: [number | string | BN, string | number[], string | number[]] + ): NonPayableTransactionObject; + + submitUptimeVoteMinDurationBlocks(): NonPayableTransactionObject; + + submitUptimeVoteMinDurationSeconds(): NonPayableTransactionObject; + + switchToFallbackMode(): NonPayableTransactionObject; + + switchToProductionMode(): NonPayableTransactionObject; + + timelockedCalls(selector: string | number[]): NonPayableTransactionObject<{ + allowedAfterTimestamp: string; + encodedCall: string; + 0: string; + 1: string; + }>; + + triggerExpirationAndCleanup(): NonPayableTransactionObject; + + updateContractAddresses( + _contractNameHashes: (string | number[])[], + _contractAddresses: string[] + ): NonPayableTransactionObject; + + updateSettings( + _settings: [ + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN, + number | string | BN + ] + ): NonPayableTransactionObject; + + uptimeVoteHash( + rewardEpochId: number | string | BN + ): NonPayableTransactionObject; + + voterRegistrationMinDurationBlocks(): NonPayableTransactionObject; + + voterRegistrationMinDurationSeconds(): NonPayableTransactionObject; + + voterRegistrationTriggerContract(): NonPayableTransactionObject; + + voterRegistry(): NonPayableTransactionObject; + + votingEpochDurationSeconds(): NonPayableTransactionObject; + }; + events: { + ClosingExpiredRewardEpochFailed( + cb?: Callback + ): EventEmitter; + ClosingExpiredRewardEpochFailed( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + GovernanceCallTimelocked( + cb?: Callback + ): EventEmitter; + GovernanceCallTimelocked( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + GovernanceInitialised(cb?: Callback): EventEmitter; + GovernanceInitialised( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + GovernedProductionModeEntered( + cb?: Callback + ): EventEmitter; + GovernedProductionModeEntered( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + RandomAcquisitionStarted( + cb?: Callback + ): EventEmitter; + RandomAcquisitionStarted( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + RewardEpochStarted(cb?: Callback): EventEmitter; + RewardEpochStarted( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + RewardsSigned(cb?: Callback): EventEmitter; + RewardsSigned( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + SettingCleanUpBlockNumberFailed( + cb?: Callback + ): EventEmitter; + SettingCleanUpBlockNumberFailed( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + SignUptimeVoteEnabled(cb?: Callback): EventEmitter; + SignUptimeVoteEnabled( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + SigningPolicySigned(cb?: Callback): EventEmitter; + SigningPolicySigned( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + TimelockedGovernanceCallCanceled( + cb?: Callback + ): EventEmitter; + TimelockedGovernanceCallCanceled( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + TimelockedGovernanceCallExecuted( + cb?: Callback + ): EventEmitter; + TimelockedGovernanceCallExecuted( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + TriggeringVoterRegistrationFailed( + cb?: Callback + ): EventEmitter; + TriggeringVoterRegistrationFailed( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + UptimeVoteSigned(cb?: Callback): EventEmitter; + UptimeVoteSigned( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + UptimeVoteSubmitted(cb?: Callback): EventEmitter; + UptimeVoteSubmitted( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + VotePowerBlockSelected(cb?: Callback): EventEmitter; + VotePowerBlockSelected( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + + allEvents(options?: EventOptions, cb?: Callback): EventEmitter; + }; + + once( + event: "ClosingExpiredRewardEpochFailed", + cb: Callback + ): void; + once( + event: "ClosingExpiredRewardEpochFailed", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "GovernanceCallTimelocked", + cb: Callback + ): void; + once( + event: "GovernanceCallTimelocked", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "GovernanceInitialised", + cb: Callback + ): void; + once( + event: "GovernanceInitialised", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "GovernedProductionModeEntered", + cb: Callback + ): void; + once( + event: "GovernedProductionModeEntered", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "RandomAcquisitionStarted", + cb: Callback + ): void; + once( + event: "RandomAcquisitionStarted", + options: EventOptions, + cb: Callback + ): void; + + once(event: "RewardEpochStarted", cb: Callback): void; + once( + event: "RewardEpochStarted", + options: EventOptions, + cb: Callback + ): void; + + once(event: "RewardsSigned", cb: Callback): void; + once( + event: "RewardsSigned", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "SettingCleanUpBlockNumberFailed", + cb: Callback + ): void; + once( + event: "SettingCleanUpBlockNumberFailed", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "SignUptimeVoteEnabled", + cb: Callback + ): void; + once( + event: "SignUptimeVoteEnabled", + options: EventOptions, + cb: Callback + ): void; + + once(event: "SigningPolicySigned", cb: Callback): void; + once( + event: "SigningPolicySigned", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "TimelockedGovernanceCallCanceled", + cb: Callback + ): void; + once( + event: "TimelockedGovernanceCallCanceled", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "TimelockedGovernanceCallExecuted", + cb: Callback + ): void; + once( + event: "TimelockedGovernanceCallExecuted", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "TriggeringVoterRegistrationFailed", + cb: Callback + ): void; + once( + event: "TriggeringVoterRegistrationFailed", + options: EventOptions, + cb: Callback + ): void; + + once(event: "UptimeVoteSigned", cb: Callback): void; + once( + event: "UptimeVoteSigned", + options: EventOptions, + cb: Callback + ): void; + + once(event: "UptimeVoteSubmitted", cb: Callback): void; + once( + event: "UptimeVoteSubmitted", + options: EventOptions, + cb: Callback + ): void; + + once( + event: "VotePowerBlockSelected", + cb: Callback + ): void; + once( + event: "VotePowerBlockSelected", + options: EventOptions, + cb: Callback + ): void; +}