{
  "_format": "hh-sol-artifact-1",
  "contractName": "Keep3r",
  "sourceName": "solidity/contracts/Keep3r.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyAJob",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyAKeeper",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BondsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BondsUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Disputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DisputerExistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DisputerUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientFunds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientJobTokenCredits",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobAlreadyAdded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityInsufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityLessThanMin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobLiquidityUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationImpossible",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobMigrationUnavailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenCreditsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenInsufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobTokenUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobUnapproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "JobUnavailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairUnapproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinRewardPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoGovernanceZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotDisputed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyDisputer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyJobOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingJobOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlySlasher",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SlasherExistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SlasherUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenUnallowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnbondsLocked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnbondsUnexistent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Activation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_bondTime",
          "type": "uint256"
        }
      ],
      "name": "BondTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Bonding",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "Dispute",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "DisputerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "DisputerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "DustSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "FeeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_pendingGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "GovernanceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_inflationPeriod",
          "type": "uint256"
        }
      ],
      "name": "InflationPeriodChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOwner",
          "type": "address"
        }
      ],
      "name": "JobAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "JobMigrationRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "JobMigrationSuccessful",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "JobOwnershipAssent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_pendingOwner",
          "type": "address"
        }
      ],
      "name": "JobOwnershipChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "JobSlashLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "JobSlashToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        }
      ],
      "name": "Keep3rHelperChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        }
      ],
      "name": "Keep3rV1Change",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        }
      ],
      "name": "Keep3rV1ProxyChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "KeeperRevoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "KeeperSlash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_gasLeft",
          "type": "uint256"
        }
      ],
      "name": "KeeperValidation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_credit",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_gasLeft",
          "type": "uint256"
        }
      ],
      "name": "KeeperWork",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "name": "Kp3rWethPoolChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "LiquidityAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "LiquidityApproval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currentCredits",
          "type": "uint256"
        }
      ],
      "name": "LiquidityCreditsForced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_currentCredits",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "name": "LiquidityCreditsReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_liquidityMinimum",
          "type": "uint256"
        }
      ],
      "name": "LiquidityMinimumChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "LiquidityRevocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "LiquidityWithdrawal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "Resolve",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rewardPeriodTime",
          "type": "uint256"
        }
      ],
      "name": "RewardPeriodTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "SlasherAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "SlasherRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokenCreditAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokenCreditWithdrawal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_unbondTime",
          "type": "uint256"
        }
      ],
      "name": "UnbondTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeperOrJob",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_unbonding",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Unbonding",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawal",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BASE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ETH_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_REWARD_PERIOD_TIME",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "acceptJobMigration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "acceptJobOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        }
      ],
      "name": "activate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "addDisputer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "addJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addLiquidityToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "addSlasher",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addTokenCreditsToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "approveLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approvedLiquidities",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bondTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_payment",
          "type": "uint256"
        }
      ],
      "name": "bondedPayment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "bonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "canActivateAfter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "canWithdrawAfter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "changeJobOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "directTokenPayment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        }
      ],
      "name": "dispute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "disputers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "disputes",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "firstSeen",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "forceLiquidityCreditsToJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "hasBonded",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "inflationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bond",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minBond",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_earned",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_age",
          "type": "uint256"
        }
      ],
      "name": "isBondedKeeper",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isBondedKeeper",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "isKeeper",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isKeeper",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "jobLiquidityCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobPendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "jobPeriodCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobTokenCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "jobTokenCreditsAddedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "jobs",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rHelper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV1Proxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keepers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_list",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kp3rWethPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "liquidityAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidityMinimum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_fromJob",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_toJob",
          "type": "address"
        }
      ],
      "name": "migrateJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "observeLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int56",
              "name": "current",
              "type": "int56"
            },
            {
              "internalType": "int56",
              "name": "difference",
              "type": "int56"
            },
            {
              "internalType": "uint256",
              "name": "period",
              "type": "uint256"
            }
          ],
          "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
          "name": "_tickCache",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingBonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingJobMigrations",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingUnbonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "quoteLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_periodCredits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_disputer",
          "type": "address"
        }
      ],
      "name": "removeDisputer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_slasher",
          "type": "address"
        }
      ],
      "name": "removeSlasher",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_jobOrKeeper",
          "type": "address"
        }
      ],
      "name": "resolve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "revokeLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPeriodTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "sendDust",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bondTime",
          "type": "uint256"
        }
      ],
      "name": "setBondTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "setFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "setGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_inflationPeriod",
          "type": "uint256"
        }
      ],
      "name": "setInflationPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rHelper",
          "type": "address"
        }
      ],
      "name": "setKeep3rHelper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV1",
          "type": "address"
        }
      ],
      "name": "setKeep3rV1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV1Proxy",
          "type": "address"
        }
      ],
      "name": "setKeep3rV1Proxy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_kp3rWethPool",
          "type": "address"
        }
      ],
      "name": "setKp3rWethPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityMinimum",
          "type": "uint256"
        }
      ],
      "name": "setLiquidityMinimum",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rewardPeriodTime",
          "type": "uint256"
        }
      ],
      "name": "setRewardPeriodTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_unbondTime",
          "type": "uint256"
        }
      ],
      "name": "setUnbondTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bonded",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slashLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "slashTokenFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "slashers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        }
      ],
      "name": "totalJobCredits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_credits",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "unbond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "unbondLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unbondTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonding",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        }
      ],
      "name": "withdrawLiquidityFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_job",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        }
      ],
      "name": "withdrawTokenCreditsFromJob",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "workCompleted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "worked",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "workedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162006210380380620062108339810160408190526200006191620001ce565b60016000558383838388806001600160a01b038116620000935760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013e57600080fd5b505afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017991906200023e565b6001600160a01b03919091166000908152600f60205260409020805460ff191691151591909117905550620002699650505050505050565b80516001600160a01b0381168114620001c957600080fd5b919050565b600080600080600060a08688031215620001e757600080fd5b620001f286620001b1565b94506200020260208701620001b1565b93506200021260408701620001b1565b92506200022260608701620001b1565b91506200023260808701620001b1565b90509295509295909350565b6000602082840312156200025157600080fd5b815180151581146200026257600080fd5b9392505050565b615f9780620002796000396000f3fe608060405234801561001057600080fd5b50600436106104cd5760003560e01c806390a4684e11610283578063c7ae40d01161015c578063ec342ad0116100ce578063f25e311b11610092578063f25e311b14610c56578063f39c38a014610c69578063f75f9f7b14610c7c578063f9d46cf214610c8f578063fc253d2b14610ca2578063fe75bc4614610cab57600080fd5b8063ec342ad014610bde578063ec8ca64314610be7578063f0f346b914610c10578063f11a1d1a14610c23578063f136a09d14610c3657600080fd5b8063dd2080d611610120578063dd2080d614610b69578063ddca3f4314610b7c578063e326ac4314610b85578063e74f823914610ba5578063ebbb619414610bb8578063ec00cdfc14610bcb57600080fd5b8063c7ae40d014610af2578063cb4be2bb14610b05578063cb54694d14610b18578063cd22af1b14610b2b578063d55995fe14610b5657600080fd5b8063a7d2e784116101f5578063b2392233116101b9578063b239223314610a58578063b440027f14610a6b578063b600702a14610a96578063b7e7734014610aa9578063b87fcbff14610abc578063c5198abc14610adf57600080fd5b8063a7d2e784146109f3578063aac6aa9c146109fc578063ab033ea914610a0f578063af320e8114610a22578063b0103b1a14610a3557600080fd5b8063a214580911610247578063a214580914610954578063a39744b514610967578063a515366a14610992578063a5d059ca146109a5578063a676f9ff146109b8578063a734f06e146109d857600080fd5b806390a4684e146108ea578063951dc22c146108fd578063966abd001461090557806398e90a0f146109185780639d5c33d81461094157600080fd5b8063594a3a93116103b55780636cf262bc116103275780637b40c913116102eb5780637b40c9131461085d5780637c8fce2314610870578063878c723e146108785780638bb6dfa8146108a15780638cb22b76146108b45780638fe204dd146108d757600080fd5b80636cf262bc146108085780636e2a9ca61461081b57806372da828a1461082e57806374a8f10314610841578063768b5d901461085457600080fd5b8063633fb68f11610379578063633fb68f1461078857806364bb43ee1461079157806368a9f19c146107a4578063694798e6146107b757806369fe0e2d146107e25780636ba42aaa146107f557600080fd5b8063594a3a931461073357806359a2255e146107465780635aa6e675146107595780635ebe23f01461076c5780635feeb7941461077557600080fd5b80631b44555e1161044e578063274a8db411610412578063274a8db4146106aa578063461411bc146106dd57806351cff8d9146106e757806352a4de29146106fa57806355ea6c471461070d578063575288bf1461072057600080fd5b80631b44555e146106195780631c5a9d9c146106395780631ef94b911461064c57806321040b0114610677578063238efcbc146106a257600080fd5b806311466d721161049557806311466d721461056057806315006b8214610573578063160e1e311461059e578063165e62e7146105b1578063168f92e7146105ee57600080fd5b8063034d4c61146104d257806307b435c2146104f85780630c620bce146105235780630d6a1f87146105385780631101eb411461054b575b600080fd5b6104e56104e03660046159db565b610cbe565b6040519081526020015b60405180910390f35b6104e5610506366004615a15565b601260209081526000928352604080842090915290825290205481565b61052b610dc3565b6040516104ef9190615ce9565b6104e5610546366004615b7e565b610dd4565b61055e610559366004615a99565b610ee7565b005b61055e61056e366004615b7e565b611041565b6104e5610581366004615a15565b601060209081526000928352604080842090915290825290205481565b61055e6105ac3660046159db565b6111df565b6105c46105bf3660046159db565b61133c565b604080518251600690810b825260208085015190910b9082015291810151908201526060016104ef565b6104e56105fc366004615a15565b600960209081526000928352604080842090915290825290205481565b6104e56106273660046159db565b60056020526000908152604090205481565b61055e6106473660046159db565b611702565b601b5461065f906001600160a01b031681565b6040516001600160a01b0390911681526020016104ef565b6104e5610685366004615a15565b601360209081526000928352604080842090915290825290205481565b61055e6117c4565b6106cd6106b83660046159db565b601a6020526000908152604090205460ff1681565b60405190151581526020016104ef565b6104e56201518081565b61055e6106f53660046159db565b61184d565b61055e610708366004615a99565b611a3f565b61055e61071b3660046159db565b611c72565b61055e61072e366004615a99565b611d26565b61055e610741366004615a15565b611fe1565b61055e6107543660046159db565b612086565b60175461065f906001600160a01b031681565b6104e5601f5481565b61055e6107833660046159db565b612138565b6104e560215481565b61055e61079f3660046159db565b6123f4565b61055e6107b23660046159db565b612480565b6104e56107c5366004615a15565b602860209081526000928352604080842090915290825290205481565b61055e6107f0366004615c3f565b612539565b6106cd6108033660046159db565b612599565b6104e56108163660046159db565b6125ea565b61055e610829366004615a99565b612732565b61055e61083c3660046159db565b61287e565b61055e61084f3660046159db565b61291e565b6104e560225481565b601e5461065f906001600160a01b031681565b61052b612a05565b61065f6108863660046159db565b6001602052600090815260409020546001600160a01b031681565b6104e56108af3660046159db565b612a11565b6106cd6108c23660046159db565b60146020526000908152604090205460ff1681565b61055e6108e5366004615c3f565b612ae9565b61055e6108f8366004615a15565b612b47565b61052b612c31565b61055e610913366004615baa565b612c3d565b61065f6109263660046159db565b6002602052600090815260409020546001600160a01b031681565b61055e61094f3660046159db565b612d53565b61055e610962366004615a4e565b612e0c565b6104e5610975366004615a15565b600860209081526000928352604080842090915290825290205481565b61055e6109a0366004615b7e565b612fec565b61055e6109b3366004615b7e565b613243565b6104e56109c63660046159db565b60296020526000908152604090205481565b61065f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6104e560205481565b61055e610a0a3660046159db565b61331d565b61055e610a1d3660046159db565b6133d2565b61055e610a30366004615a15565b61344b565b6106cd610a433660046159db565b60076020526000908152604090205460ff1681565b61055e610a66366004615c3f565b6138c8565b6104e5610a79366004615a15565b602560209081526000928352604080842090915290825290205481565b61055e610aa43660046159db565b613928565b61055e610ab7366004615c3f565b613b48565b6106cd610aca3660046159db565b60196020526000908152604090205460ff1681565b61055e610aed3660046159db565b613ba8565b601c5461065f906001600160a01b031681565b61055e610b133660046159db565b613c6d565b61055e610b26366004615c3f565b613d0d565b6104e5610b39366004615a15565b601160209081526000928352604080842090915290825290205481565b61055e610b64366004615ada565b613d91565b61055e610b77366004615a99565b613fc8565b6104e560245481565b6104e5610b933660046159db565b60066020526000908152604090205481565b61055e610bb3366004615a99565b614150565b61055e610bc6366004615c3f565b614201565b61055e610bd93660046159db565b614261565b6104e561271081565b61065f610bf53660046159db565b602c602052600090815260409020546001600160a01b031681565b61055e610c1e3660046159db565b614301565b601d5461065f906001600160a01b031681565b6104e5610c443660046159db565b602a6020526000908152604090205481565b61055e610c64366004615a99565b6143b6565b60185461065f906001600160a01b031681565b61055e610c8a3660046159db565b6145fc565b6106cd610c9d366004615b2d565b6146b4565b6104e560235481565b61055e610cb9366004615b7e565b61478e565b600080610cca836125ea565b90506000610ce460225442610cdf9190615e3b565b61487e565b6001600160a01b0385166000908152602960205260409020541115610d88576022546001600160a01b038516600090815260296020526040902054610d299042615e3b565b10610d65576022546001600160a01b038516600090815260296020526040902054610d549190615da0565b610d5e9042615e3b565b9050610d9e565b6001600160a01b038416600090815260296020526040902054610d5e9042615e3b565b610d914261487e565b610d9b9042615e3b565b90505b610da88183614898565b610db185612a11565b610dbb9190615da0565b949350505050565b6060610dcf60266148c2565b905090565b6000610de16026846148d6565b15610ee1576000610df18461133c565b90508060400151600014610edf576001600160a01b0384166000908152600f602052604081205460ff16610e32578160200151610e2d90615ead565b610e38565b81602001515b601d5460225460405163a0d2710760e01b815260048101889052600684900b60248201526044810191909152919250610ed6916001600160a01b039091169063a0d27107906064015b60206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190615c58565b6148f8565b92505050610ee1565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610f2357604051636efb4f4160e11b815260040160405180910390fd5b602054610f309042615da0565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610f7f908490615da0565b90915550610f909050848484614909565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610fcf5750602154610fcd8286614b17565b105b15610fed57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de8560405161103291815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156110725760405163ad2fdf3b60e01b815260040160405180910390fd5b61107d6015826148d6565b6110995760405162941a5760e11b815260040160405180910390fd5b6110a281614c3f565b156110ff576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156111805761112881614e15565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b61118b818484614ea3565b601b546001600160a01b038085169183821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461120a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112315760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b031992831681179093556000838152600e60205260409081902080549093168417909255601d54915163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd9190615be1565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191694151594909417909355519081527f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa91015b60405180910390a150565b60408051606081018252600080825260208201819052918101919091526113624261487e565b6001600160a01b0383166000908152602b602052604090206001015414156113d857506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806113ec60225442610cdf9190615e3b565b6001600160a01b0385166000908152602b602052604090206001015490915081141561155057604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6114594261487e565b6114639042615e3b565b8260008151811061147657611476615f16565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926114d29291909116908690600401615c8d565b60606040518083038186803b1580156114ea57600080fd5b505afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115229190615bfc565b600692830b90920b80885291955061153c91839150615deb565b600690810b900b6020860152506116d99050565b6001600160a01b0384166000908152602b60205260409020600101548111156116d95760408051600280825260608201835260009260208301908036833701905050905061159d4261487e565b6115a79042615e3b565b816000815181106115ba576115ba615f16565b602002602001019063ffffffff16908163ffffffff16815250506022546115e04261487e565b6115ea9042615e3b565b6115f49190615da0565b8160018151811061160757611607615f16565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261165f9216908690600401615c8d565b60606040518083038186803b15801561167757600080fd5b505afa15801561168b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116af9190615bfc565b600692830b90920b80885291955091506116ca908290615deb565b600690810b900b602086015250505b81156116f2576116e84261487e565b60408401526116fa565b600060408401525b50505b919050565b3360009081526007602052604090205460ff1615611733576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461177457604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116117b757604051630fd0eeef60e11b815260040160405180910390fd5b6117c13382614f87565b50565b6018546001600160a01b031633146117ef57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69060200160405180910390a1565b600260005414156118795760405162461bcd60e51b815260040161187090615d69565b60405180910390fd5b600260009081553381526012602090815260408083206001600160a01b03851684529091529020546118be5760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611901576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611932576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b549092911614156119c557601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b03871680855292528220919091556119f69183615048565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a625760405162461bcd60e51b815260040161187090615d69565b6002600055611a726026836148d6565b611a8f5760405163e0b6aead60e01b815260040160405180910390fd5b611a9a6015846148d6565b611ab757604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611ad990836150b0565b50611ae3836150c5565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611b2190611b1b908490615da0565b84614b17565b1015611b4057604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a2611bac6001600160a01b038316333084615123565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611be3908490615da0565b90915550611bf69050610ed18284614b17565b6001600160a01b0384166000908152600b602052604081208054909190611c1e908490615da0565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611ca257604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611cdb576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611d495760405162461bcd60e51b815260040161187090615d69565b6002600055611d596015846148d6565b611d7657604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611da45760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611de657600080fd5b505afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e9190615c58565b9050611e356001600160a01b038416333085615123565b6040516370a0823160e01b815230600482015260009082906001600160a01b038616906370a082319060240160206040518083038186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb19190615c58565b611ebb9190615e3b565b9050600061271060245483611ed09190615dcc565b611eda9190615db8565b9050611ee68183615e3b565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611f1d908490615da0565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f5a921683615048565b6001600160a01b0386166000908152600c60205260409020611f7c90866150b0565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611fcc91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b03828116600090815260016020526040902054839116331461201d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120c25760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156121695760405163ad2fdf3b60e01b815260040160405180910390fd5b6121746015826148d6565b6121905760405162941a5760e11b815260040160405180910390fd5b61219981614c3f565b156121f6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b60005a601d546001600160a01b038581166000908152600860209081526040808320601b548516845290915280822054905163516c332360e01b815260048101919091529394509291169063516c33239060240160206040518083038186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229a9190615c58565b90506000612710826122c485602e546122b39190615e3b565b601e546001600160a01b0316614b17565b6122ce9190615dcc565b6122d89190615db8565b6001600160a01b0385166000908152600a602052604090205490915081111561235c5761230484614e15565b6001600160a01b038416600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b60005a602e5461236c9190615e3b565b905083602e5461237c9190615e3b565b6123868383615dcc565b6123909190615db8565b915061239d858784614ea3565b601b546001600160a01b038088169187821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050505050565b6017546001600160a01b0316331461241f576040516354348f0360e01b815260040160405180910390fd5b61242a602682615161565b61244757604051630a8d08b160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5690602001611331565b6017546001600160a01b031633146124ab576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156124e55760405163546da66560e11b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916600117905590519182527f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9101611331565b6017546001600160a01b03163314612564576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611331565b60005a602e556125aa6003836148d6565b156116fd577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061260f90615176565b81101561272c576001600160a01b0383166000908152600d602052604081206126389083615180565b90506126456026826148d6565b156127195760006126558261133c565b90508060400151600014612717576001600160a01b0382166000908152600f602052604081205460ff1661269657816020015161269190615ead565b61269c565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81526004810191909152600685900b602482015260448101919091529293506127099291169063a0d2710790606401610e81565b6127139086615da0565b9450505b505b508061272481615e7e565b9150506125ee565b50919050565b3360009081526019602052604090205460ff1661276257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1661279b576040516310cec38560e21b815260040160405180910390fd5b6127a6838383614909565b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156127f457600080fd5b505af1925050508015612824575060408051601f3d908101601f1916820190925261282191810190615be1565b60015b61282d5761282f565b505b604080516001600160a01b038481168252602082018490523392908616917f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e91015b60405180910390a3505050565b6017546001600160a01b031633146128a9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128d05760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040519081527f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090602001611331565b3360009081526019602052604090205460ff1661294e57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16612987576040516310cec38560e21b815260040160405180910390fd5b612992600382615161565b50601b546001600160a01b0380831660009081526008602090815260408083209390941680835292905291909120546129cc91839161518c565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610dcf60156148c2565b600080612a1d836125ea565b9050612a3060225442610cdf9190615e3b565b6001600160a01b0384166000908152602960205260409020541115610ee1576022546001600160a01b038416600090815260296020526040902054612a759042615e3b565b10612a825780915061272c565b60008111612aa8576001600160a01b0383166000908152600a6020526040902054612ae2565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612ad8908390615dcc565b612ae29190615db8565b915061272c565b6017546001600160a01b03163314612b14576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611331565b6001600160a01b038281166000908152600160205260409020548391163314612b8357604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612bb65760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d8252808320858452825291829020429055905192835290917fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c91015b60405180910390a2505050565b6060610dcf60036148c2565b6017546001600160a01b03163314612c68576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612c8f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612cf0576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612cea573d6000803e3d6000fd5b50612d04565b612d046001600160a01b0384168284615048565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612d7e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612db85760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916600117905590519182527f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9101611331565b6001600160a01b038381166000908152600160205260409020548491163314612e4857604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612e6f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054612eb25760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612ef7576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612f31576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660009081526013602090815260408083209387168084529390915290205490612f66908483615048565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612fb591815260200190565b60405180910390a45050506001600160a01b0391821660009081526013602090815260408083209390941682529190915290812055565b6002600054141561300f5760405162461bcd60e51b815260040161187090615d69565b600260009081553381526007602052604090205460ff1615613044576040516362e6201d60e01b815260040160405180910390fd5b61304f6015336148d6565b1561306d5760405163d7229c4360e01b815260040160405180910390fd5b601f5461307a9042615da0565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81523060048201529091906370a082319060240160206040518083038186803b1580156130d857600080fd5b505afa1580156130ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131109190615c58565b90506131276001600160a01b038416333085615123565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a082319060240160206040518083038186803b15801561316857600080fd5b505afa15801561317c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a09190615c58565b6131aa9190615e3b565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b03881684529091528120805492945084929091906131f4908490615da0565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546132509042615da0565b3360008181526012602090815260408083206001600160a01b0388168085529083528184209590955592825260088152828220938252929092528120805483929061329c908490615e3b565b90915550503360009081526013602090815260408083206001600160a01b0386168452909152812080548392906132d4908490615da0565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200160405180910390a35050565b6017546001600160a01b03163314613348576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16613381576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916905590519182527f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259101611331565b6017546001600160a01b031633146133fd576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90602001611331565b6001600160a01b03818116600090815260016020526040902054829116331461348757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806134c657506001600160a01b03821660009081526007602052604090205460ff165b156134e45760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461352157604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461355390603c90615da0565b421015613573576040516356248e9760e01b815260040160405180910390fd5b61357c836150c5565b613585826150c5565b6001600160a01b0383166000908152600c602052604081206135a690615176565b1115613688576001600160a01b0383166000908152600c602052604081206135ce9082615180565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261361c908490615da0565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c9091522061365e9082615161565b506001600160a01b0383166000908152600c6020526040902061368190826150b0565b5050613585565b6001600160a01b0383166000908152600d602052604081206136a990615176565b111561378b576001600160a01b0383166000908152600d602052604081206136d19082615180565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261371f908490615da0565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061376190826150b0565b506001600160a01b0384166000908152600d602052604090206137849082615161565b5050613688565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906137bd908490615da0565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613801908490615da0565b90915550506001600160a01b0383166000908152600a602090815260408083208390556029909152812055613837601584615161565b506001600160a01b03838116600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055848452602c835292819020805490931690925590519182527f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f29101612c24565b6017546001600160a01b031633146138f3576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611331565b6017546001600160a01b03163314613953576040516354348f0360e01b815260040160405180910390fd5b61395e6026826150b0565b61397b5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139b457600080fd5b505afa1580156139c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ec91906159f8565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b158015613a5557600080fd5b505afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8d9190615be1565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055613abd8161133c565b6001600160a01b0382166000818152602b60209081526040918290208451815486840151600690810b66ffffffffffffff908116600160381b026001600160701b03199093169390910b169190911717815593820151600190940193909355519081527fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9101611331565b6017546001600160a01b03163314613b73576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611331565b613bb36015826148d6565b15613bd157604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613c0b57604051632f3d320560e01b815260040160405180910390fd5b613c166015826150b0565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c98576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cbf5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040519081527feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090602001611331565b6017546001600160a01b03163314613d38576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d5c57604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611331565b60026000541415613db45760405162461bcd60e51b815260040161187090615d69565b600260009081556001600160a01b03858116825260016020526040909120548591163314613df557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e2790603c90615da0565b4211613e4657604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e8c5760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613ec65760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613efd908490615e3b565b90915550613f1790506001600160a01b0385168385615048565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f65576001600160a01b0385166000908152600c60205260409020613f639085615161565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613fb491815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613ff95760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1615614033576040516362e6201d60e01b815260040160405180910390fd5b61403e6015826148d6565b61405a5760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140a05760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140d7908490615e3b565b909155506140f190506001600160a01b0385168484615048565b826001600160a01b0316816001600160a01b0316856001600160a01b03167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a450505050565b3360009081526019602052604090205460ff1661418057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166141b9576040516310cec38560e21b815260040160405180910390fd5b6141c483838361518c565b60405181815233906001600160a01b038516907f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db90602001612871565b6017546001600160a01b0316331461422c576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611331565b6017546001600160a01b0316331461428c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166142b35760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90602001611331565b6017546001600160a01b0316331461432c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661436557604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916905590519182527f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9101611331565b3360009081526019602052604090205460ff166143e657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1661441f576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061444190836148d6565b61445e57604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156144a35760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156144f157600080fd5b505af1925050508015614521575060408051601f3d908101601f1916820190925261451e91810190615be1565b60015b61452a5761452c565b505b6001600160a01b03808416600090815260096020908152604080832093861683529290529081208054839290614563908490615e3b565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546145b6576001600160a01b0383166000908152600c602052604090206145b49083615161565b505b604080516001600160a01b038481168252602082018490523392908616917f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d3183331049101612871565b336000908152601a602052604090205460ff1661462c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615614666576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60005a602e556146c56003876148d6565b80156146f657506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561471a57506001600160a01b0386166000908152600560205260409020548311155b801561474957506001600160a01b03861660009081526006602052604090205482906147469042615e3b565b10155b15614785577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a15060015b95945050505050565b6017546001600160a01b031633146147b9576040516354348f0360e01b815260040160405180910390fd5b6147c46015836148d6565b6147e157604051636211d34960e01b815260040160405180910390fd5b6147ea826150c5565b6001600160a01b0382166000908152600a602052604081208054839290614812908490615da0565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192614872928252602082015260400190565b60405180910390a25050565b60006022548261488e9190615e99565b610ee19083615e3b565b600060225483101561272c576022546148b18385615dcc565b6148bb9190615db8565b9050610ee1565b606060006148cf83615292565b9392505050565b6001600160a01b038116600090815260018301602052604081205415156148cf565b6000610ee1826022546023546152ee565b6002600054141561492c5760405162461bcd60e51b815260040161187090615d69565b600260009081556001600160a01b0384168152600d6020526040902061495290836148d6565b61496e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156149b45760405163435b562560e01b815260040160405180910390fd5b6149bd8361539c565b60006149cc610ed18385614b17565b6001600160a01b0385166000908152600b602052604090205490915015614a82576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614a1d908390615dcc565b614a279190615db8565b6001600160a01b0385166000908152600a602052604081208054909190614a4f908490615e3b565b90915550506001600160a01b0384166000908152600b602052604081208054839290614a7c908490615e3b565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290614ab9908490615e3b565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614b0c576001600160a01b0384166000908152600d60205260409020614b0a9084615161565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610ee1576001600160a01b0382166000908152600f602052604081205460ff16614b89576001600160a01b0383166000908152602b6020526040902054614b8490600160381b900460060b615ead565b614bad565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b815260048101889052600684900b602482015260448101919091529192506001600160a01b03169063a0d271079060640160206040518083038186803b158015614c0757600080fd5b505afa158015614c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190615c58565b6000614c4a4261487e565b6001600160a01b03831660009081526029602052604090205410156116fd57614c7a60225442610cdf9190615e3b565b6001600160a01b03831660009081526029602052604090205411614cf057614ca18261539c565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614ccf4261487e565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614d169042615e3b565b10614d7257614d248261539c565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614d63908490615da0565b90915550600191506116fd9050565b614d7b4261487e565b6001600160a01b0383166000908152602a602052604090205410156116fd576001600160a01b0382166000908152600b6020526040902054614dbc8361539c565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614dec91615dcc565b614df69190615db8565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614e5a90614e3c9042615e3b565b6001600160a01b0383166000908152600b6020526040902054614898565b6001600160a01b0382166000908152600a602052604081208054909190614e82908490615da0565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614edc5760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614f11908490615e3b565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614f50908490615da0565b90915550506001600160a01b03821660009081526005602052604081208054839290614f7d908490615da0565b9091555050505050565b6001600160a01b038216600090815260066020526040902054614fc0576001600160a01b03821660009081526006602052604090204290555b614fcb6003836150b0565b506001600160a01b038281166000908152601060209081526040808320938516835292905290812080549190556150038284836153c1565b816001600160a01b0316836001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161287191815260200190565b6040516001600160a01b0383166024820152604481018290526150ab90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152615476565b505050565b60006148cf836001600160a01b038416615548565b6150ce81614c3f565b506150d881614e15565b6001600160a01b0381166000908152600a6020908152604080832054600b909252909120546151079190615597565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b038085166024830152831660448201526064810182905261515b9085906323b872dd60e01b90608401615074565b50505050565b60006148cf836001600160a01b0384166155ad565b6000610ee1825490565b60006148cf83836156a0565b601b546001600160a01b0383811691161461525b5760175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156151ef57600080fd5b505af192505050801561521f575060408051601f3d908101601f1916820190925261521c91810190615be1565b60015b615259573d80801561524d576040519150601f19603f3d011682016040523d82523d6000602084013e615252565b606091505b505061525b565b505b6001600160a01b03808416600090815260086020908152604080832093861683529290529081208054839290614f7d908490615e3b565b6060816000018054806020026020016040519081016040528092919081815260200182805480156152e257602002820191906000526020600020905b8154815260200190600101908083116152ce575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615328576000841161531d57600080fd5b5082900490506148cf565b80841161533457600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153a5816156ca565b6001600160a01b039091166000908152600b6020526040902055565b6001600160a01b038083166000908152600860209081526040808320938716835292905290812080548392906153f8908490615da0565b9091555050601b546001600160a01b03848116911614156150ab57601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561545957600080fd5b505af115801561546d573d6000803e3d6000fd5b50505050505050565b60006154cb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158ae9092919063ffffffff16565b8051909150156150ab57808060200190518101906154e99190615be1565b6150ab5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611870565b600081815260018301602052604081205461558f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee1565b506000610ee1565b60008183106155a657816148cf565b5090919050565b600081815260018301602052604081205480156156965760006155d1600183615e3b565b85549091506000906155e590600190615e3b565b905081811461564a57600086600001828154811061560557615605615f16565b906000526020600020015490508087600001848154811061562857615628615f16565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061565b5761565b615f00565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ee1565b6000915050610ee1565b60008260000182815481106156b7576156b7615f16565b9060005260206000200154905092915050565b60006156d54261487e565b601e546001600160a01b03166000908152602b60205260409020600101541461576c57601e5461570d906001600160a01b031661133c565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061579090615176565b81101561272c576001600160a01b0383166000908152600d602052604081206157b99083615180565b90506157c66026826148d6565b1561589b576157d44261487e565b6001600160a01b0382166000908152602b60205260409020600101541461585a576157fe8161133c565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461588e90610ed19083614b17565b6158989084615da0565b92505b50806158a681615e7e565b91505061576f565b6060610dbb848460008585843b6159075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611870565b600080866001600160a01b031685876040516159239190615c71565b60006040518083038185875af1925050503d8060008114615960576040519150601f19603f3d011682016040523d82523d6000602084013e615965565b606091505b5091509150615975828286615980565b979650505050505050565b6060831561598f5750816148cf565b82511561599f5782518084602001fd5b8160405162461bcd60e51b81526004016118709190615d36565b805180151581146116fd57600080fd5b8051600681900b81146116fd57600080fd5b6000602082840312156159ed57600080fd5b81356148cf81615f2c565b600060208284031215615a0a57600080fd5b81516148cf81615f2c565b60008060408385031215615a2857600080fd5b8235615a3381615f2c565b91506020830135615a4381615f2c565b809150509250929050565b600080600060608486031215615a6357600080fd5b8335615a6e81615f2c565b92506020840135615a7e81615f2c565b91506040840135615a8e81615f2c565b809150509250925092565b600080600060608486031215615aae57600080fd5b8335615ab981615f2c565b92506020840135615ac981615f2c565b929592945050506040919091013590565b60008060008060808587031215615af057600080fd5b8435615afb81615f2c565b93506020850135615b0b81615f2c565b9250604085013591506060850135615b2281615f2c565b939692955090935050565b600080600080600060a08688031215615b4557600080fd5b8535615b5081615f2c565b94506020860135615b6081615f2c565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b9157600080fd5b8235615b9c81615f2c565b946020939093013593505050565b600080600060608486031215615bbf57600080fd5b8335615bca81615f2c565b9250602084013591506040840135615a8e81615f2c565b600060208284031215615bf357600080fd5b6148cf826159b9565b600080600060608486031215615c1157600080fd5b615c1a846159c9565b9250615c28602085016159c9565b9150615c36604085016159b9565b90509250925092565b600060208284031215615c5157600080fd5b5035919050565b600060208284031215615c6a57600080fd5b5051919050565b60008251615c83818460208701615e52565b9190910192915050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cdc57845163ffffffff1683529383019391830191600101615cba565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615d2a5783516001600160a01b031683529284019291840191600101615d05565b50909695505050505050565b6020815260008251806020840152615d55816040850160208701615e52565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115615db357615db3615ed4565b500190565b600082615dc757615dc7615eea565b500490565b6000816000190483118215151615615de657615de6615ed4565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e1657615e16615ed4565b81667fffffffffffff018313811615615e3157615e31615ed4565b5090039392505050565b600082821015615e4d57615e4d615ed4565b500390565b60005b83811015615e6d578181015183820152602001615e55565b8381111561515b5750506000910152565b6000600019821415615e9257615e92615ed4565b5060010190565b600082615ea857615ea8615eea565b500690565b60008160060b667fffffffffffff19811415615ecb57615ecb615ed4565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146117c157600080fdfeee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220718a8ef3804d3d78f2648d5668706f10719e9be0356ea263edc497f0eca48d0264736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104cd5760003560e01c806390a4684e11610283578063c7ae40d01161015c578063ec342ad0116100ce578063f25e311b11610092578063f25e311b14610c56578063f39c38a014610c69578063f75f9f7b14610c7c578063f9d46cf214610c8f578063fc253d2b14610ca2578063fe75bc4614610cab57600080fd5b8063ec342ad014610bde578063ec8ca64314610be7578063f0f346b914610c10578063f11a1d1a14610c23578063f136a09d14610c3657600080fd5b8063dd2080d611610120578063dd2080d614610b69578063ddca3f4314610b7c578063e326ac4314610b85578063e74f823914610ba5578063ebbb619414610bb8578063ec00cdfc14610bcb57600080fd5b8063c7ae40d014610af2578063cb4be2bb14610b05578063cb54694d14610b18578063cd22af1b14610b2b578063d55995fe14610b5657600080fd5b8063a7d2e784116101f5578063b2392233116101b9578063b239223314610a58578063b440027f14610a6b578063b600702a14610a96578063b7e7734014610aa9578063b87fcbff14610abc578063c5198abc14610adf57600080fd5b8063a7d2e784146109f3578063aac6aa9c146109fc578063ab033ea914610a0f578063af320e8114610a22578063b0103b1a14610a3557600080fd5b8063a214580911610247578063a214580914610954578063a39744b514610967578063a515366a14610992578063a5d059ca146109a5578063a676f9ff146109b8578063a734f06e146109d857600080fd5b806390a4684e146108ea578063951dc22c146108fd578063966abd001461090557806398e90a0f146109185780639d5c33d81461094157600080fd5b8063594a3a93116103b55780636cf262bc116103275780637b40c913116102eb5780637b40c9131461085d5780637c8fce2314610870578063878c723e146108785780638bb6dfa8146108a15780638cb22b76146108b45780638fe204dd146108d757600080fd5b80636cf262bc146108085780636e2a9ca61461081b57806372da828a1461082e57806374a8f10314610841578063768b5d901461085457600080fd5b8063633fb68f11610379578063633fb68f1461078857806364bb43ee1461079157806368a9f19c146107a4578063694798e6146107b757806369fe0e2d146107e25780636ba42aaa146107f557600080fd5b8063594a3a931461073357806359a2255e146107465780635aa6e675146107595780635ebe23f01461076c5780635feeb7941461077557600080fd5b80631b44555e1161044e578063274a8db411610412578063274a8db4146106aa578063461411bc146106dd57806351cff8d9146106e757806352a4de29146106fa57806355ea6c471461070d578063575288bf1461072057600080fd5b80631b44555e146106195780631c5a9d9c146106395780631ef94b911461064c57806321040b0114610677578063238efcbc146106a257600080fd5b806311466d721161049557806311466d721461056057806315006b8214610573578063160e1e311461059e578063165e62e7146105b1578063168f92e7146105ee57600080fd5b8063034d4c61146104d257806307b435c2146104f85780630c620bce146105235780630d6a1f87146105385780631101eb411461054b575b600080fd5b6104e56104e03660046159db565b610cbe565b6040519081526020015b60405180910390f35b6104e5610506366004615a15565b601260209081526000928352604080842090915290825290205481565b61052b610dc3565b6040516104ef9190615ce9565b6104e5610546366004615b7e565b610dd4565b61055e610559366004615a99565b610ee7565b005b61055e61056e366004615b7e565b611041565b6104e5610581366004615a15565b601060209081526000928352604080842090915290825290205481565b61055e6105ac3660046159db565b6111df565b6105c46105bf3660046159db565b61133c565b604080518251600690810b825260208085015190910b9082015291810151908201526060016104ef565b6104e56105fc366004615a15565b600960209081526000928352604080842090915290825290205481565b6104e56106273660046159db565b60056020526000908152604090205481565b61055e6106473660046159db565b611702565b601b5461065f906001600160a01b031681565b6040516001600160a01b0390911681526020016104ef565b6104e5610685366004615a15565b601360209081526000928352604080842090915290825290205481565b61055e6117c4565b6106cd6106b83660046159db565b601a6020526000908152604090205460ff1681565b60405190151581526020016104ef565b6104e56201518081565b61055e6106f53660046159db565b61184d565b61055e610708366004615a99565b611a3f565b61055e61071b3660046159db565b611c72565b61055e61072e366004615a99565b611d26565b61055e610741366004615a15565b611fe1565b61055e6107543660046159db565b612086565b60175461065f906001600160a01b031681565b6104e5601f5481565b61055e6107833660046159db565b612138565b6104e560215481565b61055e61079f3660046159db565b6123f4565b61055e6107b23660046159db565b612480565b6104e56107c5366004615a15565b602860209081526000928352604080842090915290825290205481565b61055e6107f0366004615c3f565b612539565b6106cd6108033660046159db565b612599565b6104e56108163660046159db565b6125ea565b61055e610829366004615a99565b612732565b61055e61083c3660046159db565b61287e565b61055e61084f3660046159db565b61291e565b6104e560225481565b601e5461065f906001600160a01b031681565b61052b612a05565b61065f6108863660046159db565b6001602052600090815260409020546001600160a01b031681565b6104e56108af3660046159db565b612a11565b6106cd6108c23660046159db565b60146020526000908152604090205460ff1681565b61055e6108e5366004615c3f565b612ae9565b61055e6108f8366004615a15565b612b47565b61052b612c31565b61055e610913366004615baa565b612c3d565b61065f6109263660046159db565b6002602052600090815260409020546001600160a01b031681565b61055e61094f3660046159db565b612d53565b61055e610962366004615a4e565b612e0c565b6104e5610975366004615a15565b600860209081526000928352604080842090915290825290205481565b61055e6109a0366004615b7e565b612fec565b61055e6109b3366004615b7e565b613243565b6104e56109c63660046159db565b60296020526000908152604090205481565b61065f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6104e560205481565b61055e610a0a3660046159db565b61331d565b61055e610a1d3660046159db565b6133d2565b61055e610a30366004615a15565b61344b565b6106cd610a433660046159db565b60076020526000908152604090205460ff1681565b61055e610a66366004615c3f565b6138c8565b6104e5610a79366004615a15565b602560209081526000928352604080842090915290825290205481565b61055e610aa43660046159db565b613928565b61055e610ab7366004615c3f565b613b48565b6106cd610aca3660046159db565b60196020526000908152604090205460ff1681565b61055e610aed3660046159db565b613ba8565b601c5461065f906001600160a01b031681565b61055e610b133660046159db565b613c6d565b61055e610b26366004615c3f565b613d0d565b6104e5610b39366004615a15565b601160209081526000928352604080842090915290825290205481565b61055e610b64366004615ada565b613d91565b61055e610b77366004615a99565b613fc8565b6104e560245481565b6104e5610b933660046159db565b60066020526000908152604090205481565b61055e610bb3366004615a99565b614150565b61055e610bc6366004615c3f565b614201565b61055e610bd93660046159db565b614261565b6104e561271081565b61065f610bf53660046159db565b602c602052600090815260409020546001600160a01b031681565b61055e610c1e3660046159db565b614301565b601d5461065f906001600160a01b031681565b6104e5610c443660046159db565b602a6020526000908152604090205481565b61055e610c64366004615a99565b6143b6565b60185461065f906001600160a01b031681565b61055e610c8a3660046159db565b6145fc565b6106cd610c9d366004615b2d565b6146b4565b6104e560235481565b61055e610cb9366004615b7e565b61478e565b600080610cca836125ea565b90506000610ce460225442610cdf9190615e3b565b61487e565b6001600160a01b0385166000908152602960205260409020541115610d88576022546001600160a01b038516600090815260296020526040902054610d299042615e3b565b10610d65576022546001600160a01b038516600090815260296020526040902054610d549190615da0565b610d5e9042615e3b565b9050610d9e565b6001600160a01b038416600090815260296020526040902054610d5e9042615e3b565b610d914261487e565b610d9b9042615e3b565b90505b610da88183614898565b610db185612a11565b610dbb9190615da0565b949350505050565b6060610dcf60266148c2565b905090565b6000610de16026846148d6565b15610ee1576000610df18461133c565b90508060400151600014610edf576001600160a01b0384166000908152600f602052604081205460ff16610e32578160200151610e2d90615ead565b610e38565b81602001515b601d5460225460405163a0d2710760e01b815260048101889052600684900b60248201526044810191909152919250610ed6916001600160a01b039091169063a0d27107906064015b60206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190615c58565b6148f8565b92505050610ee1565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610f2357604051636efb4f4160e11b815260040160405180910390fd5b602054610f309042615da0565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610f7f908490615da0565b90915550610f909050848484614909565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610fcf5750602154610fcd8286614b17565b105b15610fed57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de8560405161103291815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156110725760405163ad2fdf3b60e01b815260040160405180910390fd5b61107d6015826148d6565b6110995760405162941a5760e11b815260040160405180910390fd5b6110a281614c3f565b156110ff576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156111805761112881614e15565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b61118b818484614ea3565b601b546001600160a01b038085169183821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461120a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112315760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b031992831681179093556000838152600e60205260409081902080549093168417909255601d54915163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd9190615be1565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191694151594909417909355519081527f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa91015b60405180910390a150565b60408051606081018252600080825260208201819052918101919091526113624261487e565b6001600160a01b0383166000908152602b602052604090206001015414156113d857506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806113ec60225442610cdf9190615e3b565b6001600160a01b0385166000908152602b602052604090206001015490915081141561155057604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6114594261487e565b6114639042615e3b565b8260008151811061147657611476615f16565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926114d29291909116908690600401615c8d565b60606040518083038186803b1580156114ea57600080fd5b505afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115229190615bfc565b600692830b90920b80885291955061153c91839150615deb565b600690810b900b6020860152506116d99050565b6001600160a01b0384166000908152602b60205260409020600101548111156116d95760408051600280825260608201835260009260208301908036833701905050905061159d4261487e565b6115a79042615e3b565b816000815181106115ba576115ba615f16565b602002602001019063ffffffff16908163ffffffff16815250506022546115e04261487e565b6115ea9042615e3b565b6115f49190615da0565b8160018151811061160757611607615f16565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261165f9216908690600401615c8d565b60606040518083038186803b15801561167757600080fd5b505afa15801561168b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116af9190615bfc565b600692830b90920b80885291955091506116ca908290615deb565b600690810b900b602086015250505b81156116f2576116e84261487e565b60408401526116fa565b600060408401525b50505b919050565b3360009081526007602052604090205460ff1615611733576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461177457604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116117b757604051630fd0eeef60e11b815260040160405180910390fd5b6117c13382614f87565b50565b6018546001600160a01b031633146117ef57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69060200160405180910390a1565b600260005414156118795760405162461bcd60e51b815260040161187090615d69565b60405180910390fd5b600260009081553381526012602090815260408083206001600160a01b03851684529091529020546118be5760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611901576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611932576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b549092911614156119c557601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b03871680855292528220919091556119f69183615048565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a625760405162461bcd60e51b815260040161187090615d69565b6002600055611a726026836148d6565b611a8f5760405163e0b6aead60e01b815260040160405180910390fd5b611a9a6015846148d6565b611ab757604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611ad990836150b0565b50611ae3836150c5565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611b2190611b1b908490615da0565b84614b17565b1015611b4057604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a2611bac6001600160a01b038316333084615123565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611be3908490615da0565b90915550611bf69050610ed18284614b17565b6001600160a01b0384166000908152600b602052604081208054909190611c1e908490615da0565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611ca257604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611cdb576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611d495760405162461bcd60e51b815260040161187090615d69565b6002600055611d596015846148d6565b611d7657604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611da45760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611de657600080fd5b505afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e9190615c58565b9050611e356001600160a01b038416333085615123565b6040516370a0823160e01b815230600482015260009082906001600160a01b038616906370a082319060240160206040518083038186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb19190615c58565b611ebb9190615e3b565b9050600061271060245483611ed09190615dcc565b611eda9190615db8565b9050611ee68183615e3b565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611f1d908490615da0565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f5a921683615048565b6001600160a01b0386166000908152600c60205260409020611f7c90866150b0565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611fcc91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b03828116600090815260016020526040902054839116331461201d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120c25760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156121695760405163ad2fdf3b60e01b815260040160405180910390fd5b6121746015826148d6565b6121905760405162941a5760e11b815260040160405180910390fd5b61219981614c3f565b156121f6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b60005a601d546001600160a01b038581166000908152600860209081526040808320601b548516845290915280822054905163516c332360e01b815260048101919091529394509291169063516c33239060240160206040518083038186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229a9190615c58565b90506000612710826122c485602e546122b39190615e3b565b601e546001600160a01b0316614b17565b6122ce9190615dcc565b6122d89190615db8565b6001600160a01b0385166000908152600a602052604090205490915081111561235c5761230484614e15565b6001600160a01b038416600081815260296020908152604080832054600a835281842054600b84529382902054825191825292810193909352820152600080516020615f428339815191529060600160405180910390a25b60005a602e5461236c9190615e3b565b905083602e5461237c9190615e3b565b6123868383615dcc565b6123909190615db8565b915061239d858784614ea3565b601b546001600160a01b038088169187821691167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a4505050505050565b6017546001600160a01b0316331461241f576040516354348f0360e01b815260040160405180910390fd5b61242a602682615161565b61244757604051630a8d08b160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5690602001611331565b6017546001600160a01b031633146124ab576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156124e55760405163546da66560e11b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916600117905590519182527f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9101611331565b6017546001600160a01b03163314612564576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611331565b60005a602e556125aa6003836148d6565b156116fd577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061260f90615176565b81101561272c576001600160a01b0383166000908152600d602052604081206126389083615180565b90506126456026826148d6565b156127195760006126558261133c565b90508060400151600014612717576001600160a01b0382166000908152600f602052604081205460ff1661269657816020015161269190615ead565b61269c565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81526004810191909152600685900b602482015260448101919091529293506127099291169063a0d2710790606401610e81565b6127139086615da0565b9450505b505b508061272481615e7e565b9150506125ee565b50919050565b3360009081526019602052604090205460ff1661276257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1661279b576040516310cec38560e21b815260040160405180910390fd5b6127a6838383614909565b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156127f457600080fd5b505af1925050508015612824575060408051601f3d908101601f1916820190925261282191810190615be1565b60015b61282d5761282f565b505b604080516001600160a01b038481168252602082018490523392908616917f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e91015b60405180910390a3505050565b6017546001600160a01b031633146128a9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128d05760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040519081527f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090602001611331565b3360009081526019602052604090205460ff1661294e57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16612987576040516310cec38560e21b815260040160405180910390fd5b612992600382615161565b50601b546001600160a01b0380831660009081526008602090815260408083209390941680835292905291909120546129cc91839161518c565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610dcf60156148c2565b600080612a1d836125ea565b9050612a3060225442610cdf9190615e3b565b6001600160a01b0384166000908152602960205260409020541115610ee1576022546001600160a01b038416600090815260296020526040902054612a759042615e3b565b10612a825780915061272c565b60008111612aa8576001600160a01b0383166000908152600a6020526040902054612ae2565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612ad8908390615dcc565b612ae29190615db8565b915061272c565b6017546001600160a01b03163314612b14576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611331565b6001600160a01b038281166000908152600160205260409020548391163314612b8357604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612bb65760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d8252808320858452825291829020429055905192835290917fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c91015b60405180910390a2505050565b6060610dcf60036148c2565b6017546001600160a01b03163314612c68576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612c8f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612cf0576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612cea573d6000803e3d6000fd5b50612d04565b612d046001600160a01b0384168284615048565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612d7e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612db85760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916600117905590519182527f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9101611331565b6001600160a01b038381166000908152600160205260409020548491163314612e4857604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612e6f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054612eb25760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612ef7576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612f31576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660009081526013602090815260408083209387168084529390915290205490612f66908483615048565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612fb591815260200190565b60405180910390a45050506001600160a01b0391821660009081526013602090815260408083209390941682529190915290812055565b6002600054141561300f5760405162461bcd60e51b815260040161187090615d69565b600260009081553381526007602052604090205460ff1615613044576040516362e6201d60e01b815260040160405180910390fd5b61304f6015336148d6565b1561306d5760405163d7229c4360e01b815260040160405180910390fd5b601f5461307a9042615da0565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81523060048201529091906370a082319060240160206040518083038186803b1580156130d857600080fd5b505afa1580156130ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131109190615c58565b90506131276001600160a01b038416333085615123565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a082319060240160206040518083038186803b15801561316857600080fd5b505afa15801561317c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a09190615c58565b6131aa9190615e3b565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b03881684529091528120805492945084929091906131f4908490615da0565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546132509042615da0565b3360008181526012602090815260408083206001600160a01b0388168085529083528184209590955592825260088152828220938252929092528120805483929061329c908490615e3b565b90915550503360009081526013602090815260408083206001600160a01b0386168452909152812080548392906132d4908490615da0565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200160405180910390a35050565b6017546001600160a01b03163314613348576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16613381576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b038116600081815260196020908152604091829020805460ff1916905590519182527f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259101611331565b6017546001600160a01b031633146133fd576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90602001611331565b6001600160a01b03818116600090815260016020526040902054829116331461348757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806134c657506001600160a01b03821660009081526007602052604090205460ff165b156134e45760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461352157604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461355390603c90615da0565b421015613573576040516356248e9760e01b815260040160405180910390fd5b61357c836150c5565b613585826150c5565b6001600160a01b0383166000908152600c602052604081206135a690615176565b1115613688576001600160a01b0383166000908152600c602052604081206135ce9082615180565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261361c908490615da0565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c9091522061365e9082615161565b506001600160a01b0383166000908152600c6020526040902061368190826150b0565b5050613585565b6001600160a01b0383166000908152600d602052604081206136a990615176565b111561378b576001600160a01b0383166000908152600d602052604081206136d19082615180565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261371f908490615da0565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061376190826150b0565b506001600160a01b0384166000908152600d602052604090206137849082615161565b5050613688565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906137bd908490615da0565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613801908490615da0565b90915550506001600160a01b0383166000908152600a602090815260408083208390556029909152812055613837601584615161565b506001600160a01b03838116600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055848452602c835292819020805490931690925590519182527f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f29101612c24565b6017546001600160a01b031633146138f3576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611331565b6017546001600160a01b03163314613953576040516354348f0360e01b815260040160405180910390fd5b61395e6026826150b0565b61397b5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139b457600080fd5b505afa1580156139c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ec91906159f8565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b81526004810193909352169063696a437b9060240160206040518083038186803b158015613a5557600080fd5b505afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8d9190615be1565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055613abd8161133c565b6001600160a01b0382166000818152602b60209081526040918290208451815486840151600690810b66ffffffffffffff908116600160381b026001600160701b03199093169390910b169190911717815593820151600190940193909355519081527fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9101611331565b6017546001600160a01b03163314613b73576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611331565b613bb36015826148d6565b15613bd157604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613c0b57604051632f3d320560e01b815260040160405180910390fd5b613c166015826150b0565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c98576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cbf5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040519081527feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090602001611331565b6017546001600160a01b03163314613d38576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d5c57604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611331565b60026000541415613db45760405162461bcd60e51b815260040161187090615d69565b600260009081556001600160a01b03858116825260016020526040909120548591163314613df557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e2790603c90615da0565b4211613e4657604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e8c5760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613ec65760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613efd908490615e3b565b90915550613f1790506001600160a01b0385168385615048565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f65576001600160a01b0385166000908152600c60205260409020613f639085615161565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613fb491815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613ff95760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1615614033576040516362e6201d60e01b815260040160405180910390fd5b61403e6015826148d6565b61405a5760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140a05760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140d7908490615e3b565b909155506140f190506001600160a01b0385168484615048565b826001600160a01b0316816001600160a01b0316856001600160a01b03167f46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfa855a6040805192835260208301919091520160405180910390a450505050565b3360009081526019602052604090205460ff1661418057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166141b9576040516310cec38560e21b815260040160405180910390fd5b6141c483838361518c565b60405181815233906001600160a01b038516907f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db90602001612871565b6017546001600160a01b0316331461422c576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611331565b6017546001600160a01b0316331461428c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166142b35760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90602001611331565b6017546001600160a01b0316331461432c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661436557604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000818152601a6020908152604091829020805460ff1916905590519182527f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9101611331565b3360009081526019602052604090205460ff166143e657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1661441f576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061444190836148d6565b61445e57604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156144a35760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156144f157600080fd5b505af1925050508015614521575060408051601f3d908101601f1916820190925261451e91810190615be1565b60015b61452a5761452c565b505b6001600160a01b03808416600090815260096020908152604080832093861683529290529081208054839290614563908490615e3b565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546145b6576001600160a01b0383166000908152600c602052604090206145b49083615161565b505b604080516001600160a01b038481168252602082018490523392908616917f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d3183331049101612871565b336000908152601a602052604090205460ff1661462c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615614666576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60005a602e556146c56003876148d6565b80156146f657506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561471a57506001600160a01b0386166000908152600560205260409020548311155b801561474957506001600160a01b03861660009081526006602052604090205482906147469042615e3b565b10155b15614785577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb5a60405190815260200160405180910390a15060015b95945050505050565b6017546001600160a01b031633146147b9576040516354348f0360e01b815260040160405180910390fd5b6147c46015836148d6565b6147e157604051636211d34960e01b815260040160405180910390fd5b6147ea826150c5565b6001600160a01b0382166000908152600a602052604081208054839290614812908490615da0565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192614872928252602082015260400190565b60405180910390a25050565b60006022548261488e9190615e99565b610ee19083615e3b565b600060225483101561272c576022546148b18385615dcc565b6148bb9190615db8565b9050610ee1565b606060006148cf83615292565b9392505050565b6001600160a01b038116600090815260018301602052604081205415156148cf565b6000610ee1826022546023546152ee565b6002600054141561492c5760405162461bcd60e51b815260040161187090615d69565b600260009081556001600160a01b0384168152600d6020526040902061495290836148d6565b61496e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156149b45760405163435b562560e01b815260040160405180910390fd5b6149bd8361539c565b60006149cc610ed18385614b17565b6001600160a01b0385166000908152600b602052604090205490915015614a82576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614a1d908390615dcc565b614a279190615db8565b6001600160a01b0385166000908152600a602052604081208054909190614a4f908490615e3b565b90915550506001600160a01b0384166000908152600b602052604081208054839290614a7c908490615e3b565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290614ab9908490615e3b565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614b0c576001600160a01b0384166000908152600d60205260409020614b0a9084615161565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610ee1576001600160a01b0382166000908152600f602052604081205460ff16614b89576001600160a01b0383166000908152602b6020526040902054614b8490600160381b900460060b615ead565b614bad565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b815260048101889052600684900b602482015260448101919091529192506001600160a01b03169063a0d271079060640160206040518083038186803b158015614c0757600080fd5b505afa158015614c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190615c58565b6000614c4a4261487e565b6001600160a01b03831660009081526029602052604090205410156116fd57614c7a60225442610cdf9190615e3b565b6001600160a01b03831660009081526029602052604090205411614cf057614ca18261539c565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614ccf4261487e565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614d169042615e3b565b10614d7257614d248261539c565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614d63908490615da0565b90915550600191506116fd9050565b614d7b4261487e565b6001600160a01b0383166000908152602a602052604090205410156116fd576001600160a01b0382166000908152600b6020526040902054614dbc8361539c565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614dec91615dcc565b614df69190615db8565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614e5a90614e3c9042615e3b565b6001600160a01b0383166000908152600b6020526040902054614898565b6001600160a01b0382166000908152600a602052604081208054909190614e82908490615da0565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614edc5760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614f11908490615e3b565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614f50908490615da0565b90915550506001600160a01b03821660009081526005602052604081208054839290614f7d908490615da0565b9091555050505050565b6001600160a01b038216600090815260066020526040902054614fc0576001600160a01b03821660009081526006602052604090204290555b614fcb6003836150b0565b506001600160a01b038281166000908152601060209081526040808320938516835292905290812080549190556150038284836153c1565b816001600160a01b0316836001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161287191815260200190565b6040516001600160a01b0383166024820152604481018290526150ab90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152615476565b505050565b60006148cf836001600160a01b038416615548565b6150ce81614c3f565b506150d881614e15565b6001600160a01b0381166000908152600a6020908152604080832054600b909252909120546151079190615597565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b038085166024830152831660448201526064810182905261515b9085906323b872dd60e01b90608401615074565b50505050565b60006148cf836001600160a01b0384166155ad565b6000610ee1825490565b60006148cf83836156a0565b601b546001600160a01b0383811691161461525b5760175460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b1580156151ef57600080fd5b505af192505050801561521f575060408051601f3d908101601f1916820190925261521c91810190615be1565b60015b615259573d80801561524d576040519150601f19603f3d011682016040523d82523d6000602084013e615252565b606091505b505061525b565b505b6001600160a01b03808416600090815260086020908152604080832093861683529290529081208054839290614f7d908490615e3b565b6060816000018054806020026020016040519081016040528092919081815260200182805480156152e257602002820191906000526020600020905b8154815260200190600101908083116152ce575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615328576000841161531d57600080fd5b5082900490506148cf565b80841161533457600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153a5816156ca565b6001600160a01b039091166000908152600b6020526040902055565b6001600160a01b038083166000908152600860209081526040808320938716835292905290812080548392906153f8908490615da0565b9091555050601b546001600160a01b03848116911614156150ab57601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561545957600080fd5b505af115801561546d573d6000803e3d6000fd5b50505050505050565b60006154cb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158ae9092919063ffffffff16565b8051909150156150ab57808060200190518101906154e99190615be1565b6150ab5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611870565b600081815260018301602052604081205461558f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee1565b506000610ee1565b60008183106155a657816148cf565b5090919050565b600081815260018301602052604081205480156156965760006155d1600183615e3b565b85549091506000906155e590600190615e3b565b905081811461564a57600086600001828154811061560557615605615f16565b906000526020600020015490508087600001848154811061562857615628615f16565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061565b5761565b615f00565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ee1565b6000915050610ee1565b60008260000182815481106156b7576156b7615f16565b9060005260206000200154905092915050565b60006156d54261487e565b601e546001600160a01b03166000908152602b60205260409020600101541461576c57601e5461570d906001600160a01b031661133c565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061579090615176565b81101561272c576001600160a01b0383166000908152600d602052604081206157b99083615180565b90506157c66026826148d6565b1561589b576157d44261487e565b6001600160a01b0382166000908152602b60205260409020600101541461585a576157fe8161133c565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461588e90610ed19083614b17565b6158989084615da0565b92505b50806158a681615e7e565b91505061576f565b6060610dbb848460008585843b6159075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611870565b600080866001600160a01b031685876040516159239190615c71565b60006040518083038185875af1925050503d8060008114615960576040519150601f19603f3d011682016040523d82523d6000602084013e615965565b606091505b5091509150615975828286615980565b979650505050505050565b6060831561598f5750816148cf565b82511561599f5782518084602001fd5b8160405162461bcd60e51b81526004016118709190615d36565b805180151581146116fd57600080fd5b8051600681900b81146116fd57600080fd5b6000602082840312156159ed57600080fd5b81356148cf81615f2c565b600060208284031215615a0a57600080fd5b81516148cf81615f2c565b60008060408385031215615a2857600080fd5b8235615a3381615f2c565b91506020830135615a4381615f2c565b809150509250929050565b600080600060608486031215615a6357600080fd5b8335615a6e81615f2c565b92506020840135615a7e81615f2c565b91506040840135615a8e81615f2c565b809150509250925092565b600080600060608486031215615aae57600080fd5b8335615ab981615f2c565b92506020840135615ac981615f2c565b929592945050506040919091013590565b60008060008060808587031215615af057600080fd5b8435615afb81615f2c565b93506020850135615b0b81615f2c565b9250604085013591506060850135615b2281615f2c565b939692955090935050565b600080600080600060a08688031215615b4557600080fd5b8535615b5081615f2c565b94506020860135615b6081615f2c565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b9157600080fd5b8235615b9c81615f2c565b946020939093013593505050565b600080600060608486031215615bbf57600080fd5b8335615bca81615f2c565b9250602084013591506040840135615a8e81615f2c565b600060208284031215615bf357600080fd5b6148cf826159b9565b600080600060608486031215615c1157600080fd5b615c1a846159c9565b9250615c28602085016159c9565b9150615c36604085016159b9565b90509250925092565b600060208284031215615c5157600080fd5b5035919050565b600060208284031215615c6a57600080fd5b5051919050565b60008251615c83818460208701615e52565b9190910192915050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cdc57845163ffffffff1683529383019391830191600101615cba565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615d2a5783516001600160a01b031683529284019291840191600101615d05565b50909695505050505050565b6020815260008251806020840152615d55816040850160208701615e52565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115615db357615db3615ed4565b500190565b600082615dc757615dc7615eea565b500490565b6000816000190483118215151615615de657615de6615ed4565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e1657615e16615ed4565b81667fffffffffffff018313811615615e3157615e31615ed4565b5090039392505050565b600082821015615e4d57615e4d615ed4565b500390565b60005b83811015615e6d578181015183820152602001615e55565b8381111561515b5750506000910152565b6000600019821415615e9257615e92615ed4565b5060010190565b600082615ea857615ea8615eea565b500690565b60008160060b667fffffffffffff19811415615ecb57615ecb615ed4565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146117c157600080fdfeee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220718a8ef3804d3d78f2648d5668706f10719e9be0356ea263edc497f0eca48d0264736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
