{
  "_format": "hh-sol-artifact-1",
  "contractName": "Keep3rForTest",
  "sourceName": "solidity/for-test/Keep3rForTest.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": "_payment",
          "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": "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": "_bondAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_unbondAmount",
          "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": "_liquidity",
          "type": "address"
        }
      ],
      "name": "viewTickOrder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": "0x60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162006295380380620062958339810160408190526200006191620001d8565b600160005584848484848383838388806001600160a01b038116620000985760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200014357600080fd5b505afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e919062000248565b6001600160a01b03919091166000908152600f60205260409020805460ff191691151591909117905550620002739b505050505050505050505050565b80516001600160a01b0381168114620001d357600080fd5b919050565b600080600080600060a08688031215620001f157600080fd5b620001fc86620001bb565b94506200020c60208701620001bb565b93506200021c60408701620001bb565b92506200022c60608701620001bb565b91506200023c60808701620001bb565b90509295509295909350565b6000602082840312156200025b57600080fd5b815180151581146200026c57600080fd5b9392505050565b61601280620002836000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80638fe204dd11610228578063c20297f01161013c578063ec00cdfc116100be578063ec00cdfc14610b01578063ec8ca64314610b14578063f0f346b914610b3d578063f11a1d1a14610b50578063f136a09d14610b63578063f25e311b14610b83578063f39c38a014610b96578063f75f9f7b14610ba9578063f9d46cf214610bbc578063fc253d2b14610bcf578063fe75bc4614610bd857600080fd5b8063c20297f014610a15578063c5198abc14610a28578063c7ae40d014610a3b578063cb4be2bb14610a4e578063cb54694d14610a61578063cd22af1b14610a74578063d55995fe14610a9f578063dd2080d614610ab2578063ddca3f4314610ac5578063e326ac4314610ace578063ebbb619414610aee57600080fd5b80638fe204dd1461082857806390a4684e1461083b578063951dc22c1461084e578063966abd001461085657806398e90a0f146108695780639d5c33d814610892578063a2145809146108a5578063a39744b5146108b8578063a515366a146108e3578063a5d059ca146108f6578063a676f9ff14610909578063a7d2e78414610929578063aac6aa9c14610932578063ab033ea914610945578063af320e8114610958578063b0103b1a1461096b578063b23922331461098e578063b440027f146109a1578063b600702a146109cc578063b7e77340146109df578063b87fcbff146109f257600080fd5b8063594a3a931161031f578063594a3a931461068457806359a2255e146106975780635aa6e675146106aa5780635ebe23f0146106bd5780635feeb794146106c6578063633fb68f146106d957806364bb43ee146106e257806368a9f19c146106f5578063694798e61461070857806369fe0e2d146107335780636ba42aaa146107465780636cf262bc146107595780636e2a9ca61461076c57806372da828a1461077f57806374a8f10314610792578063768b5d90146107a55780637b40c913146107ae5780637c8fce23146107c1578063878c723e146107c95780638bb6dfa8146107f25780638cb22b761461080557600080fd5b8063034d4c611461040c57806307b435c2146104325780630c620bce1461045d5780630d6a1f87146104725780631101eb411461048557806311466d721461049a57806315006b82146104ad578063160e1e31146104d8578063165e62e7146104eb578063168f92e7146105285780631b44555e146105535780631c5a9d9c146105735780631ef94b911461058657806321040b01146105a6578063238efcbc146105d1578063274a8db4146105d9578063454c50311461060c57806351cff8d91461063857806352a4de291461064b57806355ea6c471461065e578063575288bf14610671575b600080fd5b61041f61041a366004615963565b610beb565b6040519081526020015b60405180910390f35b61041f61044036600461599d565b601260209081526000928352604080842090915290825290205481565b610465610cf1565b6040516104299190615d12565b61041f610480366004615b4c565b610d02565b610498610493366004615a21565b610e08565b005b6104986104a8366004615b4c565b610f62565b61041f6104bb36600461599d565b601060209081526000928352604080842090915290825290205481565b6104986104e6366004615963565b6110f1565b6104fe6104f9366004615963565b611257565b604080518251600690810b825260208085015190910b908201529181015190820152606001610429565b61041f61053636600461599d565b600960209081526000928352604080842090915290825290205481565b61041f610561366004615963565b60056020526000908152604090205481565b610498610581366004615963565b61161d565b601b54610599906001600160a01b031681565b6040516104299190615c89565b61041f6105b436600461599d565b601360209081526000928352604080842090915290825290205481565b610498611756565b6105fc6105e7366004615963565b601a6020526000908152604090205460ff1681565b6040519015158152602001610429565b6105fc61061a366004615963565b6001600160a01b03166000908152600f602052604090205460ff1690565b610498610646366004615963565b6117e2565b610498610659366004615a21565b6119eb565b61049861066c366004615963565b611c1c565b61049861067f366004615a21565b611cd0565b61049861069236600461599d565b611f93565b6104986106a5366004615963565b612038565b601754610599906001600160a01b031681565b61041f601f5481565b6104986106d4366004615963565b6120ea565b61041f60215481565b6104986106f0366004615963565b612354565b610498610703366004615963565b6123d6565b61041f61071636600461599d565b602860209081526000928352604080842090915290825290205481565b610498610741366004615c0d565b61248e565b6105fc610754366004615963565b6124ee565b61041f610767366004615963565b61254e565b61049861077a366004615a21565b612684565b61049861078d366004615963565b6127d3565b6104986107a0366004615963565b612870565b61041f60225481565b601e54610599906001600160a01b031681565b61046561296b565b6105996107d7366004615963565b6001602052600090815260409020546001600160a01b031681565b61041f610800366004615963565b612977565b6105fc610813366004615963565b60146020526000908152604090205460ff1681565b610498610836366004615c0d565b612a1a565b61049861084936600461599d565b612a78565b610465612b66565b610498610864366004615b78565b612b72565b610599610877366004615963565b6002602052600090815260409020546001600160a01b031681565b6104986108a0366004615963565b612c88565b6104986108b33660046159d6565b612d40565b61041f6108c636600461599d565b600860209081526000928352604080842090915290825290205481565b6104986108f1366004615b4c565b612f10565b610498610904366004615b4c565b613171565b61041f610917366004615963565b60296020526000908152604090205481565b61041f60205481565b610498610940366004615963565b613244565b610498610953366004615963565b6132f8565b61049861096636600461599d565b61336e565b6105fc610979366004615963565b60076020526000908152604090205460ff1681565b61049861099c366004615c0d565b6137ed565b61041f6109af36600461599d565b602560209081526000928352604080842090915290825290205481565b6104986109da366004615963565b61384d565b6104986109ed366004615c0d565b613a72565b6105fc610a00366004615963565b60196020526000908152604090205460ff1681565b610498610a23366004615ab5565b613ad2565b610498610a36366004615963565b613b94565b601c54610599906001600160a01b031681565b610498610a5c366004615963565b613c59565b610498610a6f366004615c0d565b613cf6565b61041f610a8236600461599d565b601160209081526000928352604080842090915290825290205481565b610498610aad366004615a62565b613d7a565b610498610ac0366004615a21565b613fb1565b61041f60245481565b61041f610adc366004615963565b60066020526000908152604090205481565b610498610afc366004615c0d565b61412e565b610498610b0f366004615963565b61418e565b610599610b22366004615963565b602c602052600090815260409020546001600160a01b031681565b610498610b4b366004615963565b61422b565b601d54610599906001600160a01b031681565b61041f610b71366004615963565b602a6020526000908152604090205481565b610498610b91366004615a21565b6142df565b601854610599906001600160a01b031681565b610498610bb7366004615963565b614524565b6105fc610bca366004615afb565b6145dc565b61041f60235481565b610498610be6366004615b4c565b6146c5565b600080610bf78361254e565b6022549091504290610c1290610c0d9083615e93565b6147b5565b6001600160a01b0385166000908152602960205260409020541115610cb6576022546001600160a01b038516600090815260296020526040902054610c579042615e93565b10610c93576022546001600160a01b038516600090815260296020526040902054610c829190615df8565b610c8c9082615e93565b9050610ccc565b6001600160a01b038416600090815260296020526040902054610c8c9082615e93565b610cbf426147b5565b610cc99082615e93565b90505b610cd681836147cf565b610cdf85612977565b610ce99190615df8565b949350505050565b6060610cfd60266147f9565b905090565b6000610d0f60268461480d565b15610e02576000610d1f84611257565b90508060400151600014610e00576001600160a01b0384166000908152600f602052604081205460ff16610d60578160200151610d5b90615f05565b610d66565b81602001515b601d5460225460405163a0d2710760e01b8152929350610df7926001600160a01b039092169163a0d2710791610da29189918791600401615dc9565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c26565b61482f565b92505050610e02565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610e4457604051636efb4f4160e11b815260040160405180910390fd5b602054610e519042615df8565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610ea0908490615df8565b90915550610eb19050848484614840565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ef05750602154610eee8286614a4e565b105b15610f0e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f5391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f935760405163ad2fdf3b60e01b815260040160405180910390fd5b610f9e60158261480d565b610fba5760405162941a5760e11b815260040160405180910390fd5b610fc381614b6c565b1561101e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110159390929091615de2565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561109d5761104781614d42565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110949390929091615de2565b60405180910390a25b6110a8818484614dd0565b601b546001600160a01b03808516918382169116600080516020615f9d833981519152856110d4614eb4565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461111c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111435760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b906111a4908490600401615c89565b60206040518083038186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190615baf565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061124c908390615c89565b60405180910390a150565b604080516060810182526000808252602082018190529181019190915261127d426147b5565b6001600160a01b0383166000908152602b602052604090206001015414156112f357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061130760225442610c0d9190615e93565b6001600160a01b0385166000908152602b602052604090206001015490915081141561146b57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611374426147b5565b61137e9042615e93565b8260008151811061139157611391615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113ed9291909116908690600401615c9d565b60606040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190615bca565b600692830b90920b80885291955061145791839150615e43565b600690810b900b6020860152506115f49050565b6001600160a01b0384166000908152602b60205260409020600101548111156115f4576040805160028082526060820183526000926020830190803683370190505090506114b8426147b5565b6114c29042615e93565b816000815181106114d5576114d5615f6e565b602002602001019063ffffffff16908163ffffffff16815250506022546114fb426147b5565b6115059042615e93565b61150f9190615df8565b8160018151811061152257611522615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261157a9216908690600401615c9d565b60606040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190615bca565b600692830b90920b80885291955091506115e5908290615e43565b600690810b900b602086015250505b811561160d57611603426147b5565b6040840152611615565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561164e576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461168f57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116116d257604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906117039083614ece565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161174a91815260200190565b60405180910390a35050565b6018546001600160a01b0316331461178157604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916117d891615c89565b60405180910390a1565b6002600054141561180e5760405162461bcd60e51b815260040161180590615d92565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b03851684529091529020546118535760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611896576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff16156118c7576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561195a57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b038716808552908352818420849055848452601283528184208185529092528220919091556119a29183614fe5565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a0e5760405162461bcd60e51b815260040161180590615d92565b6002600055611a1e60268361480d565b611a3b5760405163e0b6aead60e01b815260040160405180910390fd5b611a4660158461480d565b611a6357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a859083615040565b50611a8f83615055565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611acd90611ac7908490615df8565b84614a4e565b1015611aec57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd83398151915293611b399390929091615de2565b60405180910390a2611b566001600160a01b0383163330846150b3565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b8d908490615df8565b90915550611ba09050610df28284614a4e565b6001600160a01b0384166000908152600b602052604081208054909190611bc8908490615df8565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c4c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c85576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cf35760405162461bcd60e51b815260040161180590615d92565b6002600055611d0360158461480d565b611d2057604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d4e5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d7d903090600401615c89565b60206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190615c26565b9050611de46001600160a01b0384163330856150b3565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e139190615c89565b60206040518083038186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190615c26565b611e6d9190615e93565b9050600061271060245483611e829190615e24565b611e8c9190615e10565b9050611e988183615e93565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611ecf908490615df8565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f0c921683614fe5565b6001600160a01b0386166000908152600c60205260409020611f2e9086615040565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f7e91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611fcf57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120745760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff161561211b5760405163ad2fdf3b60e01b815260040160405180910390fd5b61212660158261480d565b6121425760405162941a5760e11b815260040160405180910390fd5b61214b81614b6c565b156121a6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd8339815191529361219d9390929091615de2565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561221157600080fd5b505afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190615c3f565b9250925092506000612259614eb4565b90506000612269828486886150f1565b6001600160a01b0387166000908152600a60205260409020549091508111156123035761229586614d42565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936122e29390929091615de2565b60405180910390a26122f2614eb4565b9150612300828486886150f1565b90505b61230e868883614dd0565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f9d833981519152910160405180910390a450505050505050565b6017546001600160a01b0316331461237f576040516354348f0360e01b815260040160405180910390fd5b61238a60268261514e565b6123a757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e568160405161124c9190615c89565b6017546001600160a01b03163314612401576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561243b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061124c908390615c89565b6017546001600160a01b031633146124b9576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161124c565b60006124f8614eb4565b602e5561250660038361480d565b15611618577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161253e91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061257390615163565b81101561267e576001600160a01b0383166000908152600d6020526040812061259c908361516d565b90506125a960268261480d565b1561266b5760006125b982611257565b90508060400151600014612669576001600160a01b0382166000908152600f602052604081205460ff166125fa5781602001516125f590615f05565b612600565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061265b94929093169263a0d2710792610da2928791600401615dc9565b6126659086615df8565b9450505b505b508061267681615ed6565b915050612552565b50919050565b3360009081526019602052604090205460ff166126b457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126ed576040516310cec38560e21b815260040160405180910390fd5b6126f8838383614840565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261272c92909116908590600401615cf9565b602060405180830381600087803b15801561274657600080fd5b505af1925050508015612776575060408051601f3d908101601f1916820190925261277391810190615baf565b60015b61277f57612781565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e84846040516127c6929190615cf9565b60405180910390a3505050565b6017546001600160a01b031633146127fe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061124c908390615c89565b3360009081526019602052604090205460ff166128a057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166128d9576040516310cec38560e21b815260040160405180910390fd5b6128e460038261514e565b50601b546001600160a01b0380831660008181526008602090815260408083209490951680835293815284822054928252601381528482208483529052929092205461293292849291615179565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cfd60156147f9565b6000806129838361254e565b6022546001600160a01b038516600090815260296020526040902054919250906129ad9042615e93565b1015610e0257600081116129d9576001600160a01b0383166000908152600a6020526040902054612a13565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612a09908390615e24565b612a139190615e10565b915061267e565b6017546001600160a01b03163314612a45576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2910161124c565b6001600160a01b038281166000908152600160205260409020548391163314612ab457604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612ae75760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b59908590615c89565b60405180910390a2505050565b6060610cfd60036147f9565b6017546001600160a01b03163314612b9d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bc45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c25576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612c1f573d6000803e3d6000fd5b50612c39565b612c396001600160a01b0384168284614fe5565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612cb3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ced5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061124c908390615c89565b6001600160a01b038381166000908152600160205260409020548491163314612d7c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612da35760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612de65760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612e2b576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e65576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612eb2908483614fe5565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612f0191815260200190565b60405180910390a45050505050565b60026000541415612f335760405162461bcd60e51b815260040161180590615d92565b600260009081553381526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b612f7360153361480d565b15612f915760405163d7229c4360e01b815260040160405180910390fd5b601f54612f9e9042615df8565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fe9903090600401615c89565b60206040518083038186803b15801561300157600080fd5b505afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190615c26565b90506130506001600160a01b0384163330856150b3565b6040516370a0823160e01b815281906001600160a01b038516906370a082319061307e903090600401615c89565b60206040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190615c26565b6130d89190615e93565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b0388168452909152812080549294508492909190613122908490615df8565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b60205461317e9042615df8565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906131ca908490615e93565b90915550503360009081526013602090815260408083206001600160a01b038616845290915281208054839290613202908490615df8565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200161174a565b6017546001600160a01b0316331461326f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166132a8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061124c908390615c89565b6017546001600160a01b03163314613323576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061124c908390615c89565b6001600160a01b0381811660009081526001602052604090205482911633146133aa57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133e957506001600160a01b03821660009081526007602052604090205460ff165b156134075760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461344457604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461347690603c90615df8565b421015613496576040516356248e9760e01b815260040160405180910390fd5b61349f83615055565b6134a882615055565b6001600160a01b0383166000908152600c602052604081206134c990615163565b11156135ab576001600160a01b0383166000908152600c602052604081206134f1908261516d565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261353f908490615df8565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220613581908261514e565b506001600160a01b0383166000908152600c602052604090206135a49082615040565b50506134a8565b6001600160a01b0383166000908152600d602052604081206135cc90615163565b11156136ae576001600160a01b0383166000908152600d602052604081206135f4908261516d565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613642908490615df8565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d9052206136849082615040565b506001600160a01b0384166000908152600d602052604090206136a7908261514e565b50506135ab565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906136e0908490615df8565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613724908490615df8565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561375a60158461514e565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b59908690615c89565b6017546001600160a01b03163314613818576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161124c565b6017546001600160a01b03163314613878576040516354348f0360e01b815260040160405180910390fd5b613883602682615040565b6138a05760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190615980565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916139659190600401615c89565b60206040518083038186803b15801561397d57600080fd5b505afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190615baf565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556139e581611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9061124c908390615c89565b6017546001600160a01b03163314613a9d576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161124c565b3360009081526019602052604090205460ff16613b0257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613b3b576040516310cec38560e21b815260040160405180910390fd5b613b4784848484615179565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b7d8486615df8565b60405190815260200160405180910390a350505050565b613b9f60158261480d565b15613bbd57604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bf757604051632f3d320560e01b815260040160405180910390fd5b613c02601582615040565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c84576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cab5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061124c908390615c89565b6017546001600160a01b03163314613d21576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d4557604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d99060200161124c565b60026000541415613d9d5760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b03858116825260016020526040909120548591163314613dde57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e1090603c90615df8565b4211613e2f57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e755760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613eaf5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613ee6908490615e93565b90915550613f0090506001600160a01b0385168385614fe5565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f4e576001600160a01b0385166000908152600c60205260409020613f4c908561514e565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f9d91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613fe25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561401c576040516362e6201d60e01b815260040160405180910390fd5b61402760158261480d565b6140435760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140895760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140c0908490615e93565b909155506140da90506001600160a01b0385168484614fe5565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f9d83398151915285614110614eb4565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614159576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161124c565b6017546001600160a01b031633146141b9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141e05760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061124c908390615c89565b6017546001600160a01b03163314614256576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661428f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061124c908390615c89565b3360009081526019602052604090205460ff1661430f57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614348576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061436a908361480d565b61438757604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143cc5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261440092909116908590600401615cf9565b602060405180830381600087803b15801561441a57600080fd5b505af192505050801561444a575060408051601f3d908101601f1916820190925261444791810190615baf565b60015b61445357614455565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061448c908490615e93565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546144df576001600160a01b0383166000908152600c602052604090206144dd908361514e565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310484846040516127c6929190615cf9565b336000908152601a602052604090205460ff1661455457604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561458e576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60006145e6614eb4565b602e556145f460038761480d565b801561462557506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561464957506001600160a01b0386166000908152600560205260409020548311155b801561467857506001600160a01b03861660009081526006602052604090205482906146759042615e93565b10155b156146bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516146b091815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146f0576040516354348f0360e01b815260040160405180910390fd5b6146fb60158361480d565b61471857604051636211d34960e01b815260040160405180910390fd5b61472182615055565b6001600160a01b0382166000908152600a602052604081208054839290614749908490615df8565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926147a9928252602082015260400190565b60405180910390a25050565b6000602254826147c59190615ef1565b610e029083615e93565b600060225483101561267e576022546147e88385615e24565b6147f29190615e10565b9050610e02565b60606000614806836152cf565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614806565b6000610e028260225460235461532b565b600260005414156148635760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b0384168152600d60205260409020614889908361480d565b6148a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148eb5760405163435b562560e01b815260040160405180910390fd5b6148f4836153d9565b6000614903610df28385614a4e565b6001600160a01b0385166000908152600b6020526040902054909150156149b9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614954908390615e24565b61495e9190615e10565b6001600160a01b0385166000908152600a602052604081208054909190614986908490615e93565b90915550506001600160a01b0384166000908152600b6020526040812080548392906149b3908490615e93565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149f0908490615e93565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614a43576001600160a01b0384166000908152600d60205260409020614a41908461514e565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610e02576001600160a01b0382166000908152600f602052604081205460ff16614ac0576001600160a01b0383166000908152602b6020526040902054614abb90600160381b900460060b615f05565b614ae4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614b1c9188918691600401615dc9565b60206040518083038186803b158015614b3457600080fd5b505afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190615c26565b6000614b77426147b5565b6001600160a01b038316600090815260296020526040902054101561161857614ba760225442610c0d9190615e93565b6001600160a01b03831660009081526029602052604090205411614c1d57614bce826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bfc426147b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614c439042615e93565b10614c9f57614c51826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c90908490615df8565b90915550600191506116189050565b614ca8426147b5565b6001600160a01b0383166000908152602a60205260409020541015611618576001600160a01b0382166000908152600b6020526040902054614ce9836153d9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614d1991615e24565b614d239190615e10565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d8790614d699042615e93565b6001600160a01b0383166000908152600b60205260409020546147cf565b6001600160a01b0382166000908152600a602052604081208054909190614daf908490615df8565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614e095760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614e3e908490615e93565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e7d908490615df8565b90915550506001600160a01b03821660009081526005602052604081208054839290614eaa908490615df8565b9091555050505050565b6000603f5a614ec4906040615e24565b610cfd9190615e10565b6001600160a01b038216600090815260066020526040812054614f07576001600160a01b03831660009081526006602052604090204290555b614f12600384615040565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f66908490615df8565b9091555050601b546001600160a01b0383811691161415610e0257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614fc757600080fd5b505af1158015614fdb573d6000803e3d6000fd5b5050505092915050565b61503b8363a9059cbb60e01b8484604051602401615004929190615cf9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153fe565b505050565b6000614806836001600160a01b0384166154d0565b61505e81614b6c565b5061506881614d42565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054615097919061551f565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150eb9085906323b872dd60e01b90608401615004565b50505050565b6000808486602e546151039190615e93565b61510d9190615df8565b9050670de0b6b3a7640000846127106151268685615e24565b6151309190615e10565b61513a9190615e24565b6151449190615e10565b9695505050505050565b6000614806836001600160a01b038416615535565b6000610e02825490565b60006148068383615628565b601b546001600160a01b03848116911614615251576017546001600160a01b038085169163a9059cbb91166151ae8486615df8565b6040518363ffffffff1660e01b81526004016151cb929190615cf9565b602060405180830381600087803b1580156151e557600080fd5b505af1925050508015615215575060408051601f3d908101601f1916820190925261521291810190615baf565b60015b61524f573d808015615243576040519150601f19603f3d011682016040523d82523d6000602084013e615248565b606091505b5050615251565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615288908490615e93565b90915550506001600160a01b038085166000908152601360209081526040808320938716835292905290812080548392906152c4908490615e93565b909155505050505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531f57602002820191906000526020600020905b81548152602001906001019080831161530b575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615365576000841161535a57600080fd5b508290049050614806565b80841161537157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153e281615652565b6001600160a01b039091166000908152600b6020526040902055565b6000615453826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158369092919063ffffffff16565b80519091501561503b57808060200190518101906154719190615baf565b61503b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611805565b600081815260018301602052604081205461551757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e02565b506000610e02565b600081831061552e5781614806565b5090919050565b6000818152600183016020526040812054801561561e576000615559600183615e93565b855490915060009061556d90600190615e93565b90508181146155d257600086600001828154811061558d5761558d615f6e565b90600052602060002001549050808760000184815481106155b0576155b0615f6e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806155e3576155e3615f58565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e02565b6000915050610e02565b600082600001828154811061563f5761563f615f6e565b9060005260206000200154905092915050565b600061565d426147b5565b601e546001600160a01b03166000908152602b6020526040902060010154146156f457601e54615695906001600160a01b0316611257565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061571890615163565b81101561267e576001600160a01b0383166000908152600d60205260408120615741908361516d565b905061574e60268261480d565b156158235761575c426147b5565b6001600160a01b0382166000908152602b6020526040902060010154146157e25761578681611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461581690610df29083614a4e565b6158209084615df8565b92505b508061582e81615ed6565b9150506156f7565b6060610ce9848460008585843b61588f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611805565b600080866001600160a01b031685876040516158ab9190615c6d565b60006040518083038185875af1925050503d80600081146158e8576040519150601f19603f3d011682016040523d82523d6000602084013e6158ed565b606091505b50915091506158fd828286615908565b979650505050505050565b60608315615917575081614806565b8251156159275782518084602001fd5b8160405162461bcd60e51b81526004016118059190615d5f565b8051801515811461161857600080fd5b8051600681900b811461161857600080fd5b60006020828403121561597557600080fd5b813561480681615f84565b60006020828403121561599257600080fd5b815161480681615f84565b600080604083850312156159b057600080fd5b82356159bb81615f84565b915060208301356159cb81615f84565b809150509250929050565b6000806000606084860312156159eb57600080fd5b83356159f681615f84565b92506020840135615a0681615f84565b91506040840135615a1681615f84565b809150509250925092565b600080600060608486031215615a3657600080fd5b8335615a4181615f84565b92506020840135615a5181615f84565b929592945050506040919091013590565b60008060008060808587031215615a7857600080fd5b8435615a8381615f84565b93506020850135615a9381615f84565b9250604085013591506060850135615aaa81615f84565b939692955090935050565b60008060008060808587031215615acb57600080fd5b8435615ad681615f84565b93506020850135615ae681615f84565b93969395505050506040820135916060013590565b600080600080600060a08688031215615b1357600080fd5b8535615b1e81615f84565b94506020860135615b2e81615f84565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b5f57600080fd5b8235615b6a81615f84565b946020939093013593505050565b600080600060608486031215615b8d57600080fd5b8335615b9881615f84565b9250602084013591506040840135615a1681615f84565b600060208284031215615bc157600080fd5b61480682615941565b600080600060608486031215615bdf57600080fd5b615be884615951565b9250615bf660208501615951565b9150615c0460408501615941565b90509250925092565b600060208284031215615c1f57600080fd5b5035919050565b600060208284031215615c3857600080fd5b5051919050565b600080600060608486031215615c5457600080fd5b8351925060208401519150604084015190509250925092565b60008251615c7f818460208701615eaa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cec57845163ffffffff1683529383019391830191600101615cca565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d535783516001600160a01b031683529284019291840191600101615d2e565b50909695505050505050565b6020815260008251806020840152615d7e816040850160208701615eaa565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615e0b57615e0b615f2c565b500190565b600082615e1f57615e1f615f42565b500490565b6000816000190483118215151615615e3e57615e3e615f2c565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e6e57615e6e615f2c565b81667fffffffffffff018313811615615e8957615e89615f2c565b5090039392505050565b600082821015615ea557615ea5615f2c565b500390565b60005b83811015615ec5578181015183820152602001615ead565b838111156150eb5750506000910152565b6000600019821415615eea57615eea615f2c565b5060010190565b600082615f0057615f00615f42565b500690565b60008160060b667fffffffffffff19811415615f2357615f23615f2c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f9957600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220c3d0538d6a43aafc625ae68fb6d81b9f20ab2c3b40e7c00a11a5eeaea069909564736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104075760003560e01c80638fe204dd11610228578063c20297f01161013c578063ec00cdfc116100be578063ec00cdfc14610b01578063ec8ca64314610b14578063f0f346b914610b3d578063f11a1d1a14610b50578063f136a09d14610b63578063f25e311b14610b83578063f39c38a014610b96578063f75f9f7b14610ba9578063f9d46cf214610bbc578063fc253d2b14610bcf578063fe75bc4614610bd857600080fd5b8063c20297f014610a15578063c5198abc14610a28578063c7ae40d014610a3b578063cb4be2bb14610a4e578063cb54694d14610a61578063cd22af1b14610a74578063d55995fe14610a9f578063dd2080d614610ab2578063ddca3f4314610ac5578063e326ac4314610ace578063ebbb619414610aee57600080fd5b80638fe204dd1461082857806390a4684e1461083b578063951dc22c1461084e578063966abd001461085657806398e90a0f146108695780639d5c33d814610892578063a2145809146108a5578063a39744b5146108b8578063a515366a146108e3578063a5d059ca146108f6578063a676f9ff14610909578063a7d2e78414610929578063aac6aa9c14610932578063ab033ea914610945578063af320e8114610958578063b0103b1a1461096b578063b23922331461098e578063b440027f146109a1578063b600702a146109cc578063b7e77340146109df578063b87fcbff146109f257600080fd5b8063594a3a931161031f578063594a3a931461068457806359a2255e146106975780635aa6e675146106aa5780635ebe23f0146106bd5780635feeb794146106c6578063633fb68f146106d957806364bb43ee146106e257806368a9f19c146106f5578063694798e61461070857806369fe0e2d146107335780636ba42aaa146107465780636cf262bc146107595780636e2a9ca61461076c57806372da828a1461077f57806374a8f10314610792578063768b5d90146107a55780637b40c913146107ae5780637c8fce23146107c1578063878c723e146107c95780638bb6dfa8146107f25780638cb22b761461080557600080fd5b8063034d4c611461040c57806307b435c2146104325780630c620bce1461045d5780630d6a1f87146104725780631101eb411461048557806311466d721461049a57806315006b82146104ad578063160e1e31146104d8578063165e62e7146104eb578063168f92e7146105285780631b44555e146105535780631c5a9d9c146105735780631ef94b911461058657806321040b01146105a6578063238efcbc146105d1578063274a8db4146105d9578063454c50311461060c57806351cff8d91461063857806352a4de291461064b57806355ea6c471461065e578063575288bf14610671575b600080fd5b61041f61041a366004615963565b610beb565b6040519081526020015b60405180910390f35b61041f61044036600461599d565b601260209081526000928352604080842090915290825290205481565b610465610cf1565b6040516104299190615d12565b61041f610480366004615b4c565b610d02565b610498610493366004615a21565b610e08565b005b6104986104a8366004615b4c565b610f62565b61041f6104bb36600461599d565b601060209081526000928352604080842090915290825290205481565b6104986104e6366004615963565b6110f1565b6104fe6104f9366004615963565b611257565b604080518251600690810b825260208085015190910b908201529181015190820152606001610429565b61041f61053636600461599d565b600960209081526000928352604080842090915290825290205481565b61041f610561366004615963565b60056020526000908152604090205481565b610498610581366004615963565b61161d565b601b54610599906001600160a01b031681565b6040516104299190615c89565b61041f6105b436600461599d565b601360209081526000928352604080842090915290825290205481565b610498611756565b6105fc6105e7366004615963565b601a6020526000908152604090205460ff1681565b6040519015158152602001610429565b6105fc61061a366004615963565b6001600160a01b03166000908152600f602052604090205460ff1690565b610498610646366004615963565b6117e2565b610498610659366004615a21565b6119eb565b61049861066c366004615963565b611c1c565b61049861067f366004615a21565b611cd0565b61049861069236600461599d565b611f93565b6104986106a5366004615963565b612038565b601754610599906001600160a01b031681565b61041f601f5481565b6104986106d4366004615963565b6120ea565b61041f60215481565b6104986106f0366004615963565b612354565b610498610703366004615963565b6123d6565b61041f61071636600461599d565b602860209081526000928352604080842090915290825290205481565b610498610741366004615c0d565b61248e565b6105fc610754366004615963565b6124ee565b61041f610767366004615963565b61254e565b61049861077a366004615a21565b612684565b61049861078d366004615963565b6127d3565b6104986107a0366004615963565b612870565b61041f60225481565b601e54610599906001600160a01b031681565b61046561296b565b6105996107d7366004615963565b6001602052600090815260409020546001600160a01b031681565b61041f610800366004615963565b612977565b6105fc610813366004615963565b60146020526000908152604090205460ff1681565b610498610836366004615c0d565b612a1a565b61049861084936600461599d565b612a78565b610465612b66565b610498610864366004615b78565b612b72565b610599610877366004615963565b6002602052600090815260409020546001600160a01b031681565b6104986108a0366004615963565b612c88565b6104986108b33660046159d6565b612d40565b61041f6108c636600461599d565b600860209081526000928352604080842090915290825290205481565b6104986108f1366004615b4c565b612f10565b610498610904366004615b4c565b613171565b61041f610917366004615963565b60296020526000908152604090205481565b61041f60205481565b610498610940366004615963565b613244565b610498610953366004615963565b6132f8565b61049861096636600461599d565b61336e565b6105fc610979366004615963565b60076020526000908152604090205460ff1681565b61049861099c366004615c0d565b6137ed565b61041f6109af36600461599d565b602560209081526000928352604080842090915290825290205481565b6104986109da366004615963565b61384d565b6104986109ed366004615c0d565b613a72565b6105fc610a00366004615963565b60196020526000908152604090205460ff1681565b610498610a23366004615ab5565b613ad2565b610498610a36366004615963565b613b94565b601c54610599906001600160a01b031681565b610498610a5c366004615963565b613c59565b610498610a6f366004615c0d565b613cf6565b61041f610a8236600461599d565b601160209081526000928352604080842090915290825290205481565b610498610aad366004615a62565b613d7a565b610498610ac0366004615a21565b613fb1565b61041f60245481565b61041f610adc366004615963565b60066020526000908152604090205481565b610498610afc366004615c0d565b61412e565b610498610b0f366004615963565b61418e565b610599610b22366004615963565b602c602052600090815260409020546001600160a01b031681565b610498610b4b366004615963565b61422b565b601d54610599906001600160a01b031681565b61041f610b71366004615963565b602a6020526000908152604090205481565b610498610b91366004615a21565b6142df565b601854610599906001600160a01b031681565b610498610bb7366004615963565b614524565b6105fc610bca366004615afb565b6145dc565b61041f60235481565b610498610be6366004615b4c565b6146c5565b600080610bf78361254e565b6022549091504290610c1290610c0d9083615e93565b6147b5565b6001600160a01b0385166000908152602960205260409020541115610cb6576022546001600160a01b038516600090815260296020526040902054610c579042615e93565b10610c93576022546001600160a01b038516600090815260296020526040902054610c829190615df8565b610c8c9082615e93565b9050610ccc565b6001600160a01b038416600090815260296020526040902054610c8c9082615e93565b610cbf426147b5565b610cc99082615e93565b90505b610cd681836147cf565b610cdf85612977565b610ce99190615df8565b949350505050565b6060610cfd60266147f9565b905090565b6000610d0f60268461480d565b15610e02576000610d1f84611257565b90508060400151600014610e00576001600160a01b0384166000908152600f602052604081205460ff16610d60578160200151610d5b90615f05565b610d66565b81602001515b601d5460225460405163a0d2710760e01b8152929350610df7926001600160a01b039092169163a0d2710791610da29189918791600401615dc9565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c26565b61482f565b92505050610e02565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610e4457604051636efb4f4160e11b815260040160405180910390fd5b602054610e519042615df8565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610ea0908490615df8565b90915550610eb19050848484614840565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ef05750602154610eee8286614a4e565b105b15610f0e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f5391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f935760405163ad2fdf3b60e01b815260040160405180910390fd5b610f9e60158261480d565b610fba5760405162941a5760e11b815260040160405180910390fd5b610fc381614b6c565b1561101e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110159390929091615de2565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561109d5761104781614d42565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110949390929091615de2565b60405180910390a25b6110a8818484614dd0565b601b546001600160a01b03808516918382169116600080516020615f9d833981519152856110d4614eb4565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461111c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111435760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b906111a4908490600401615c89565b60206040518083038186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190615baf565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061124c908390615c89565b60405180910390a150565b604080516060810182526000808252602082018190529181019190915261127d426147b5565b6001600160a01b0383166000908152602b602052604090206001015414156112f357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061130760225442610c0d9190615e93565b6001600160a01b0385166000908152602b602052604090206001015490915081141561146b57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611374426147b5565b61137e9042615e93565b8260008151811061139157611391615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113ed9291909116908690600401615c9d565b60606040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190615bca565b600692830b90920b80885291955061145791839150615e43565b600690810b900b6020860152506115f49050565b6001600160a01b0384166000908152602b60205260409020600101548111156115f4576040805160028082526060820183526000926020830190803683370190505090506114b8426147b5565b6114c29042615e93565b816000815181106114d5576114d5615f6e565b602002602001019063ffffffff16908163ffffffff16815250506022546114fb426147b5565b6115059042615e93565b61150f9190615df8565b8160018151811061152257611522615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261157a9216908690600401615c9d565b60606040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190615bca565b600692830b90920b80885291955091506115e5908290615e43565b600690810b900b602086015250505b811561160d57611603426147b5565b6040840152611615565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561164e576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461168f57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116116d257604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906117039083614ece565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161174a91815260200190565b60405180910390a35050565b6018546001600160a01b0316331461178157604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916117d891615c89565b60405180910390a1565b6002600054141561180e5760405162461bcd60e51b815260040161180590615d92565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b03851684529091529020546118535760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611896576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff16156118c7576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561195a57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b038716808552908352818420849055848452601283528184208185529092528220919091556119a29183614fe5565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a0e5760405162461bcd60e51b815260040161180590615d92565b6002600055611a1e60268361480d565b611a3b5760405163e0b6aead60e01b815260040160405180910390fd5b611a4660158461480d565b611a6357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a859083615040565b50611a8f83615055565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611acd90611ac7908490615df8565b84614a4e565b1015611aec57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd83398151915293611b399390929091615de2565b60405180910390a2611b566001600160a01b0383163330846150b3565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b8d908490615df8565b90915550611ba09050610df28284614a4e565b6001600160a01b0384166000908152600b602052604081208054909190611bc8908490615df8565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c4c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c85576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cf35760405162461bcd60e51b815260040161180590615d92565b6002600055611d0360158461480d565b611d2057604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d4e5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d7d903090600401615c89565b60206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190615c26565b9050611de46001600160a01b0384163330856150b3565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e139190615c89565b60206040518083038186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190615c26565b611e6d9190615e93565b9050600061271060245483611e829190615e24565b611e8c9190615e10565b9050611e988183615e93565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611ecf908490615df8565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f0c921683614fe5565b6001600160a01b0386166000908152600c60205260409020611f2e9086615040565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f7e91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611fcf57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120745760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff161561211b5760405163ad2fdf3b60e01b815260040160405180910390fd5b61212660158261480d565b6121425760405162941a5760e11b815260040160405180910390fd5b61214b81614b6c565b156121a6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd8339815191529361219d9390929091615de2565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561221157600080fd5b505afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190615c3f565b9250925092506000612259614eb4565b90506000612269828486886150f1565b6001600160a01b0387166000908152600a60205260409020549091508111156123035761229586614d42565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936122e29390929091615de2565b60405180910390a26122f2614eb4565b9150612300828486886150f1565b90505b61230e868883614dd0565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f9d833981519152910160405180910390a450505050505050565b6017546001600160a01b0316331461237f576040516354348f0360e01b815260040160405180910390fd5b61238a60268261514e565b6123a757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e568160405161124c9190615c89565b6017546001600160a01b03163314612401576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561243b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061124c908390615c89565b6017546001600160a01b031633146124b9576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161124c565b60006124f8614eb4565b602e5561250660038361480d565b15611618577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161253e91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061257390615163565b81101561267e576001600160a01b0383166000908152600d6020526040812061259c908361516d565b90506125a960268261480d565b1561266b5760006125b982611257565b90508060400151600014612669576001600160a01b0382166000908152600f602052604081205460ff166125fa5781602001516125f590615f05565b612600565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061265b94929093169263a0d2710792610da2928791600401615dc9565b6126659086615df8565b9450505b505b508061267681615ed6565b915050612552565b50919050565b3360009081526019602052604090205460ff166126b457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126ed576040516310cec38560e21b815260040160405180910390fd5b6126f8838383614840565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261272c92909116908590600401615cf9565b602060405180830381600087803b15801561274657600080fd5b505af1925050508015612776575060408051601f3d908101601f1916820190925261277391810190615baf565b60015b61277f57612781565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e84846040516127c6929190615cf9565b60405180910390a3505050565b6017546001600160a01b031633146127fe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061124c908390615c89565b3360009081526019602052604090205460ff166128a057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166128d9576040516310cec38560e21b815260040160405180910390fd5b6128e460038261514e565b50601b546001600160a01b0380831660008181526008602090815260408083209490951680835293815284822054928252601381528482208483529052929092205461293292849291615179565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cfd60156147f9565b6000806129838361254e565b6022546001600160a01b038516600090815260296020526040902054919250906129ad9042615e93565b1015610e0257600081116129d9576001600160a01b0383166000908152600a6020526040902054612a13565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612a09908390615e24565b612a139190615e10565b915061267e565b6017546001600160a01b03163314612a45576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2910161124c565b6001600160a01b038281166000908152600160205260409020548391163314612ab457604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612ae75760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b59908590615c89565b60405180910390a2505050565b6060610cfd60036147f9565b6017546001600160a01b03163314612b9d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bc45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c25576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612c1f573d6000803e3d6000fd5b50612c39565b612c396001600160a01b0384168284614fe5565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612cb3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ced5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061124c908390615c89565b6001600160a01b038381166000908152600160205260409020548491163314612d7c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612da35760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612de65760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612e2b576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e65576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612eb2908483614fe5565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612f0191815260200190565b60405180910390a45050505050565b60026000541415612f335760405162461bcd60e51b815260040161180590615d92565b600260009081553381526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b612f7360153361480d565b15612f915760405163d7229c4360e01b815260040160405180910390fd5b601f54612f9e9042615df8565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fe9903090600401615c89565b60206040518083038186803b15801561300157600080fd5b505afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190615c26565b90506130506001600160a01b0384163330856150b3565b6040516370a0823160e01b815281906001600160a01b038516906370a082319061307e903090600401615c89565b60206040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190615c26565b6130d89190615e93565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b0388168452909152812080549294508492909190613122908490615df8565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b60205461317e9042615df8565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906131ca908490615e93565b90915550503360009081526013602090815260408083206001600160a01b038616845290915281208054839290613202908490615df8565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200161174a565b6017546001600160a01b0316331461326f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166132a8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061124c908390615c89565b6017546001600160a01b03163314613323576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061124c908390615c89565b6001600160a01b0381811660009081526001602052604090205482911633146133aa57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133e957506001600160a01b03821660009081526007602052604090205460ff165b156134075760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461344457604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461347690603c90615df8565b421015613496576040516356248e9760e01b815260040160405180910390fd5b61349f83615055565b6134a882615055565b6001600160a01b0383166000908152600c602052604081206134c990615163565b11156135ab576001600160a01b0383166000908152600c602052604081206134f1908261516d565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261353f908490615df8565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220613581908261514e565b506001600160a01b0383166000908152600c602052604090206135a49082615040565b50506134a8565b6001600160a01b0383166000908152600d602052604081206135cc90615163565b11156136ae576001600160a01b0383166000908152600d602052604081206135f4908261516d565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613642908490615df8565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d9052206136849082615040565b506001600160a01b0384166000908152600d602052604090206136a7908261514e565b50506135ab565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906136e0908490615df8565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613724908490615df8565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561375a60158461514e565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b59908690615c89565b6017546001600160a01b03163314613818576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161124c565b6017546001600160a01b03163314613878576040516354348f0360e01b815260040160405180910390fd5b613883602682615040565b6138a05760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190615980565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916139659190600401615c89565b60206040518083038186803b15801561397d57600080fd5b505afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190615baf565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556139e581611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9061124c908390615c89565b6017546001600160a01b03163314613a9d576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161124c565b3360009081526019602052604090205460ff16613b0257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613b3b576040516310cec38560e21b815260040160405180910390fd5b613b4784848484615179565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b7d8486615df8565b60405190815260200160405180910390a350505050565b613b9f60158261480d565b15613bbd57604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bf757604051632f3d320560e01b815260040160405180910390fd5b613c02601582615040565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c84576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cab5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061124c908390615c89565b6017546001600160a01b03163314613d21576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d4557604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d99060200161124c565b60026000541415613d9d5760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b03858116825260016020526040909120548591163314613dde57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e1090603c90615df8565b4211613e2f57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e755760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613eaf5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613ee6908490615e93565b90915550613f0090506001600160a01b0385168385614fe5565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f4e576001600160a01b0385166000908152600c60205260409020613f4c908561514e565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f9d91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613fe25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561401c576040516362e6201d60e01b815260040160405180910390fd5b61402760158261480d565b6140435760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140895760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140c0908490615e93565b909155506140da90506001600160a01b0385168484614fe5565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f9d83398151915285614110614eb4565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614159576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161124c565b6017546001600160a01b031633146141b9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141e05760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061124c908390615c89565b6017546001600160a01b03163314614256576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661428f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061124c908390615c89565b3360009081526019602052604090205460ff1661430f57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614348576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061436a908361480d565b61438757604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143cc5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261440092909116908590600401615cf9565b602060405180830381600087803b15801561441a57600080fd5b505af192505050801561444a575060408051601f3d908101601f1916820190925261444791810190615baf565b60015b61445357614455565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061448c908490615e93565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546144df576001600160a01b0383166000908152600c602052604090206144dd908361514e565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310484846040516127c6929190615cf9565b336000908152601a602052604090205460ff1661455457604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561458e576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60006145e6614eb4565b602e556145f460038761480d565b801561462557506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561464957506001600160a01b0386166000908152600560205260409020548311155b801561467857506001600160a01b03861660009081526006602052604090205482906146759042615e93565b10155b156146bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516146b091815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146f0576040516354348f0360e01b815260040160405180910390fd5b6146fb60158361480d565b61471857604051636211d34960e01b815260040160405180910390fd5b61472182615055565b6001600160a01b0382166000908152600a602052604081208054839290614749908490615df8565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926147a9928252602082015260400190565b60405180910390a25050565b6000602254826147c59190615ef1565b610e029083615e93565b600060225483101561267e576022546147e88385615e24565b6147f29190615e10565b9050610e02565b60606000614806836152cf565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614806565b6000610e028260225460235461532b565b600260005414156148635760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b0384168152600d60205260409020614889908361480d565b6148a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148eb5760405163435b562560e01b815260040160405180910390fd5b6148f4836153d9565b6000614903610df28385614a4e565b6001600160a01b0385166000908152600b6020526040902054909150156149b9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614954908390615e24565b61495e9190615e10565b6001600160a01b0385166000908152600a602052604081208054909190614986908490615e93565b90915550506001600160a01b0384166000908152600b6020526040812080548392906149b3908490615e93565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149f0908490615e93565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614a43576001600160a01b0384166000908152600d60205260409020614a41908461514e565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610e02576001600160a01b0382166000908152600f602052604081205460ff16614ac0576001600160a01b0383166000908152602b6020526040902054614abb90600160381b900460060b615f05565b614ae4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614b1c9188918691600401615dc9565b60206040518083038186803b158015614b3457600080fd5b505afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190615c26565b6000614b77426147b5565b6001600160a01b038316600090815260296020526040902054101561161857614ba760225442610c0d9190615e93565b6001600160a01b03831660009081526029602052604090205411614c1d57614bce826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bfc426147b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614c439042615e93565b10614c9f57614c51826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c90908490615df8565b90915550600191506116189050565b614ca8426147b5565b6001600160a01b0383166000908152602a60205260409020541015611618576001600160a01b0382166000908152600b6020526040902054614ce9836153d9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614d1991615e24565b614d239190615e10565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d8790614d699042615e93565b6001600160a01b0383166000908152600b60205260409020546147cf565b6001600160a01b0382166000908152600a602052604081208054909190614daf908490615df8565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614e095760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614e3e908490615e93565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e7d908490615df8565b90915550506001600160a01b03821660009081526005602052604081208054839290614eaa908490615df8565b9091555050505050565b6000603f5a614ec4906040615e24565b610cfd9190615e10565b6001600160a01b038216600090815260066020526040812054614f07576001600160a01b03831660009081526006602052604090204290555b614f12600384615040565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f66908490615df8565b9091555050601b546001600160a01b0383811691161415610e0257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614fc757600080fd5b505af1158015614fdb573d6000803e3d6000fd5b5050505092915050565b61503b8363a9059cbb60e01b8484604051602401615004929190615cf9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153fe565b505050565b6000614806836001600160a01b0384166154d0565b61505e81614b6c565b5061506881614d42565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054615097919061551f565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150eb9085906323b872dd60e01b90608401615004565b50505050565b6000808486602e546151039190615e93565b61510d9190615df8565b9050670de0b6b3a7640000846127106151268685615e24565b6151309190615e10565b61513a9190615e24565b6151449190615e10565b9695505050505050565b6000614806836001600160a01b038416615535565b6000610e02825490565b60006148068383615628565b601b546001600160a01b03848116911614615251576017546001600160a01b038085169163a9059cbb91166151ae8486615df8565b6040518363ffffffff1660e01b81526004016151cb929190615cf9565b602060405180830381600087803b1580156151e557600080fd5b505af1925050508015615215575060408051601f3d908101601f1916820190925261521291810190615baf565b60015b61524f573d808015615243576040519150601f19603f3d011682016040523d82523d6000602084013e615248565b606091505b5050615251565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615288908490615e93565b90915550506001600160a01b038085166000908152601360209081526040808320938716835292905290812080548392906152c4908490615e93565b909155505050505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531f57602002820191906000526020600020905b81548152602001906001019080831161530b575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615365576000841161535a57600080fd5b508290049050614806565b80841161537157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153e281615652565b6001600160a01b039091166000908152600b6020526040902055565b6000615453826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158369092919063ffffffff16565b80519091501561503b57808060200190518101906154719190615baf565b61503b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611805565b600081815260018301602052604081205461551757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e02565b506000610e02565b600081831061552e5781614806565b5090919050565b6000818152600183016020526040812054801561561e576000615559600183615e93565b855490915060009061556d90600190615e93565b90508181146155d257600086600001828154811061558d5761558d615f6e565b90600052602060002001549050808760000184815481106155b0576155b0615f6e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806155e3576155e3615f58565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e02565b6000915050610e02565b600082600001828154811061563f5761563f615f6e565b9060005260206000200154905092915050565b600061565d426147b5565b601e546001600160a01b03166000908152602b6020526040902060010154146156f457601e54615695906001600160a01b0316611257565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061571890615163565b81101561267e576001600160a01b0383166000908152600d60205260408120615741908361516d565b905061574e60268261480d565b156158235761575c426147b5565b6001600160a01b0382166000908152602b6020526040902060010154146157e25761578681611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461581690610df29083614a4e565b6158209084615df8565b92505b508061582e81615ed6565b9150506156f7565b6060610ce9848460008585843b61588f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611805565b600080866001600160a01b031685876040516158ab9190615c6d565b60006040518083038185875af1925050503d80600081146158e8576040519150601f19603f3d011682016040523d82523d6000602084013e6158ed565b606091505b50915091506158fd828286615908565b979650505050505050565b60608315615917575081614806565b8251156159275782518084602001fd5b8160405162461bcd60e51b81526004016118059190615d5f565b8051801515811461161857600080fd5b8051600681900b811461161857600080fd5b60006020828403121561597557600080fd5b813561480681615f84565b60006020828403121561599257600080fd5b815161480681615f84565b600080604083850312156159b057600080fd5b82356159bb81615f84565b915060208301356159cb81615f84565b809150509250929050565b6000806000606084860312156159eb57600080fd5b83356159f681615f84565b92506020840135615a0681615f84565b91506040840135615a1681615f84565b809150509250925092565b600080600060608486031215615a3657600080fd5b8335615a4181615f84565b92506020840135615a5181615f84565b929592945050506040919091013590565b60008060008060808587031215615a7857600080fd5b8435615a8381615f84565b93506020850135615a9381615f84565b9250604085013591506060850135615aaa81615f84565b939692955090935050565b60008060008060808587031215615acb57600080fd5b8435615ad681615f84565b93506020850135615ae681615f84565b93969395505050506040820135916060013590565b600080600080600060a08688031215615b1357600080fd5b8535615b1e81615f84565b94506020860135615b2e81615f84565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b5f57600080fd5b8235615b6a81615f84565b946020939093013593505050565b600080600060608486031215615b8d57600080fd5b8335615b9881615f84565b9250602084013591506040840135615a1681615f84565b600060208284031215615bc157600080fd5b61480682615941565b600080600060608486031215615bdf57600080fd5b615be884615951565b9250615bf660208501615951565b9150615c0460408501615941565b90509250925092565b600060208284031215615c1f57600080fd5b5035919050565b600060208284031215615c3857600080fd5b5051919050565b600080600060608486031215615c5457600080fd5b8351925060208401519150604084015190509250925092565b60008251615c7f818460208701615eaa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cec57845163ffffffff1683529383019391830191600101615cca565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d535783516001600160a01b031683529284019291840191600101615d2e565b50909695505050505050565b6020815260008251806020840152615d7e816040850160208701615eaa565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615e0b57615e0b615f2c565b500190565b600082615e1f57615e1f615f42565b500490565b6000816000190483118215151615615e3e57615e3e615f2c565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e6e57615e6e615f2c565b81667fffffffffffff018313811615615e8957615e89615f2c565b5090039392505050565b600082821015615ea557615ea5615f2c565b500390565b60005b83811015615ec5578181015183820152602001615ead565b838111156150eb5750506000910152565b6000600019821415615eea57615eea615f2c565b5060010190565b600082615f0057615f00615f42565b500690565b60008160060b667fffffffffffff19811415615f2357615f23615f2c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f9957600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220c3d0538d6a43aafc625ae68fb6d81b9f20ab2c3b40e7c00a11a5eeaea069909564736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
