{
  "_format": "hh-sol-artifact-1",
  "contractName": "ProtocolSettingsMockup",
  "sourceName": "contracts/mockup/ProtocolSettingsMockup.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "prevModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "module",
          "type": "bytes32"
        }
      ],
      "name": "ProtocolModuleContractReplaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetAffiliateFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetAffiliateTradingTokenFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetBorrowingFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldController",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newController",
          "type": "address"
        }
      ],
      "name": "SetFeesController",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetLendingFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetLiquidationIncentivePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "loanPool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlying",
          "type": "address"
        }
      ],
      "name": "SetLoanPool",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "SetLockedSOVAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetMaxSwapSize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMinReferrals",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMinReferrals",
          "type": "uint256"
        }
      ],
      "name": "SetMinReferralsToPayoutAffiliates",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValue",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValue",
          "type": "address"
        }
      ],
      "name": "SetPriceFeedContract",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldProtocol",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newProtocol",
          "type": "address"
        }
      ],
      "name": "SetProtocolAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldProtocolToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newProtocolToken",
          "type": "address"
        }
      ],
      "name": "SetProtocolTokenAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRebatePercent",
          "type": "uint256"
        }
      ],
      "name": "SetRebatePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetRolloverBaseReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldTokenAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newTokenAddress",
          "type": "address"
        }
      ],
      "name": "SetSOVTokenAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldSovrynSwapContractRegistryAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newSovrynSwapContractRegistryAddress",
          "type": "address"
        }
      ],
      "name": "SetSovrynSwapContractRegistryAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldSpecialRebatesPercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newSpecialRebatesPercent",
          "type": "uint256"
        }
      ],
      "name": "SetSpecialRebates",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isActive",
          "type": "bool"
        }
      ],
      "name": "SetSupportedTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetSwapExternalFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValue",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValue",
          "type": "address"
        }
      ],
      "name": "SetSwapsImplContract",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "SetTradingFeePercent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldBasisPoint",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBasisPoint",
          "type": "uint256"
        }
      ],
      "name": "SetTradingRebateRewardsBasisPoint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldWethToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newWethToken",
          "type": "address"
        }
      ],
      "name": "SetWrbtcToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "oldFlag",
          "type": "bool"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "newFlag",
          "type": "bool"
        }
      ],
      "name": "TogglePaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "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": "WithdrawBorrowingFees",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lendingAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tradingAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowingAmount",
          "type": "uint256"
        }
      ],
      "name": "WithdrawFees",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "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": "WithdrawLendingFees",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "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": "WithdrawTradingFees",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliateRewardsHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateTradingTokenFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesReferrerBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesUserReferrer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowerNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "borrowerOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegatedManagers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "depositProtocolToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebatePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getFeeRebatePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "name": "getLoanPoolsList",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLockedSOVAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getProtocolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSovTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "destTokenAddress",
          "type": "address"
        }
      ],
      "name": "getSpecialRebates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "specialRebatesPercent",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSwapExternalFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTradingRebateRewardsBasisPoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "loanPool",
          "type": "address"
        }
      ],
      "name": "isLoanPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isProtocolPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lenderInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principalTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paidTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "lenderOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lendingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidationIncentivePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanParams",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minInitialMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maintenanceMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "loanPoolToUnderlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loans",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "loanParamsId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingTradesId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startRate",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lender",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lockedSOVAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "logicTargets",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxDisagreement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxSwapSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minReferralsToPayout",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "priceFeeds",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverBaseReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverFlexFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setAffiliateFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setAffiliateTradingTokenFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setBorrowingFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amout",
          "type": "uint256"
        }
      ],
      "name": "setBorrowingFeeTokensHeld",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newController",
          "type": "address"
        }
      ],
      "name": "setFeesController",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setLendingFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amout",
          "type": "uint256"
        }
      ],
      "name": "setLendingFeeTokensHeld",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setLiquidationIncentivePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "pools",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        }
      ],
      "name": "setLoanPool",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newLockedSOVAddress",
          "type": "address"
        }
      ],
      "name": "setLockedSOVAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setMaxDisagreement",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setMaxSwapSize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newMinReferrals",
          "type": "uint256"
        }
      ],
      "name": "setMinReferralsToPayoutAffiliates",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newContract",
          "type": "address"
        }
      ],
      "name": "setPriceFeedContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_protocolTokenAddress",
          "type": "address"
        }
      ],
      "name": "setProtocolTokenAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "rebatePercent",
          "type": "uint256"
        }
      ],
      "name": "setRebatePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "baseRewardValue",
          "type": "uint256"
        }
      ],
      "name": "setRolloverBaseReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newSovTokenAddress",
          "type": "address"
        }
      ],
      "name": "setSOVTokenAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setSourceBuffer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newProtocolAddress",
          "type": "address"
        }
      ],
      "name": "setSovrynProtocolAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "registryAddress",
          "type": "address"
        }
      ],
      "name": "setSovrynSwapContractRegistryAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "specialRebatesPercent",
          "type": "uint256"
        }
      ],
      "name": "setSpecialRebates",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "addrs",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "toggles",
          "type": "bool[]"
        }
      ],
      "name": "setSupportedTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setSwapExternalFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newContract",
          "type": "address"
        }
      ],
      "name": "setSwapsImplContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setTradingFeePercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amout",
          "type": "uint256"
        }
      ],
      "name": "setTradingFeeTokensHeld",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newBasisPoint",
          "type": "uint256"
        }
      ],
      "name": "setTradingRebateRewardsBasisPoint",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "wrbtcTokenAddress",
          "type": "address"
        }
      ],
      "name": "setWrbtcToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sourceBuffer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynSwapContractRegistryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "specialRebates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "supportedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "swapsImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "paused",
          "type": "bool"
        }
      ],
      "name": "togglePaused",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tradingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "underlyingToLoanPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userNotFirstTradeFlag",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawBorrowingFees",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "withdrawFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawLendingFees",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawProtocolToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawTradingFees",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcToken",
      "outputs": [
        {
          "internalType": "contract IWrbtcERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526001600055678ac7230489e80000601555670214e8348c4f000060185567013fbe85edc90000601b55674563918244f40000602055674563918244f40000602155674563918244f400006027556127106028556802b5e3af16b1880000602955650f478e084000602b5567016345785d8a0000602c556802b5e3af16b1880000602f5560036035556801158e460913d000006039556000620000ab620000ff60201b60201c565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000103565b3390565b614df280620001136000396000f3fe608060405234801561001057600080fd5b50600436106105815760003560e01c80638dc48ba5116102e5578063cb6eacd11161018d578063e4a47a02116100f4578063f2555278116100ad578063f589a3e711610087578063f589a3e714611342578063f6ddc8b31461134a578063f706b1f214611352578063f851a4401461135a57610581565b8063f2555278146112e6578063f2fde38b14611314578063f44942ec1461133a57610581565b8063e4a47a0214611246578063e8997dbd14611272578063e8f6276414611298578063ea0e3930146112a0578063edab119f146112d6578063f0e085f5146112de57610581565b8063d485045e11610146578063d485045e146111a5578063d9eaaa64146111cb578063da541e09146111f1578063dac8856114611210578063e3ff937014611218578063e41964801461123e57610581565b8063cb6eacd1146110c0578063cd5d808d1461112d578063d21f8e241461115b578063d238db2214611178578063d288208c14611195578063d473c2da1461119d57610581565b8063ae0a85301161024c578063b9cffa3e11610205578063c4a90815116101df578063c4a9081514610fc9578063c4d66de814611051578063c6ce7e4014611077578063c7c333f0146110a357610581565b8063b9cffa3e14610f93578063ba4861e914610f9b578063bdee453c14610fa357610581565b8063ae0a853014610ee4578063afe8400914610eec578063b1558b7214610ef4578063b1ac89ca14610f11578063b30643d914610f47578063b7e1524114610f6d57610581565b80639c53874f1161029e5780639c53874f14610e4b578063a1eb568314610e68578063a2ab1ba114610e85578063a32bb68314610ea2578063a6e7cc2814610ebf578063acc0434814610edc57610581565b80638dc48ba514610d7a5780638f32d59b14610da05780639254e6bf14610da857806392d894f814610dce578063959083d314610df45780639688185714610dfc57610581565b80634115a2b61161044857806368c4ac26116103af57806374626404116103685780637fb202e5116103425780637fb202e514610c8f5780638456cb5914610cac57806384eaa9e014610cb45780638da5cb5b14610d7257610581565b80637462640414610c5957806378d849ed14610c7f5780637a8faeb814610c8757610581565b806368c4ac2614610ba15780636e66373014610bc75780636fbae33b14610bed5780637420ca3e14610c13578063742e679814610c1b57806374326e8f14610c2357610581565b80634f28cac2116104015780634f28cac214610a11578063569fc1fb14610a19578063574442cc14610a5457806359d0d9ec14610a5c57806359e49e0f14610a8a57806362fff3f614610b4857610581565b80634115a2b6146109815780634203e395146109ad578063462096f3146109d35780634699f846146109db5780634bcfe726146109e35780634dd053a5146109eb57610581565b80632a324027116104ec578063355a395f116104a5578063355a395f1461087a5780633c56ae1b146108975780633e526e6b146108b45780633f1ae8b9146108e05780633fca506e146108e8578063402946b91461090e57610581565b80632a324027146107bc5780632d77d0d0146107c45780632f470764146107ea57806332e4706f146107f25780633432423c146108285780633452d2d41461085457610581565b806317f8b7881161053e57806317f8b788146106d05780631a81c191146106ed5780631b7bde7414610713578063218b39c61461075357806324cc57491461077957806329f9986d1461079f57610581565b8063065d810f146105c55780630676c1b71461062457806307024c25146106485780630c615ee914610650578063115dd4b11461066f57806317548b79146106a9575b6040805162461bcd60e51b815260206004820152601460248201527319985b1b189858dac81b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6105f1600480360360408110156105db57600080fd5b506001600160a01b038135169060200135611362565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61062c6113a2565b604080516001600160a01b039092168252519081900360200190f35b61062c6113b1565b61066d6004803603602081101561066657600080fd5b50356113c0565b005b6106956004803603602081101561068557600080fd5b50356001600160a01b03166114de565b604080519115158252519081900360200190f35b61062c600480360360208110156106bf57600080fd5b50356001600160e01b0319166114fe565b61066d600480360360208110156106e657600080fd5b5035611519565b61066d6004803603602081101561070357600080fd5b50356001600160a01b0316611637565b6107416004803603604081101561072957600080fd5b506001600160a01b0381358116916020013516611722565b60408051918252519081900360200190f35b61062c6004803603602081101561076957600080fd5b50356001600160a01b031661173f565b6106956004803603602081101561078f57600080fd5b50356001600160a01b031661175a565b61066d600480360360208110156107b557600080fd5b503561176f565b61074161188d565b61066d600480360360208110156107da57600080fd5b50356001600160a01b0316611893565b6107416119cc565b6106956004803603606081101561080857600080fd5b506001600160a01b038135811691602081013590911690604001356119d2565b6105f16004803603604081101561083e57600080fd5b506001600160a01b038135169060200135611b70565b6107416004803603602081101561086a57600080fd5b50356001600160a01b0316611bb0565b61066d6004803603602081101561089057600080fd5b5035611bc2565b61066d600480360360208110156108ad57600080fd5b5035611c91565b61066d600480360360408110156108ca57600080fd5b506001600160a01b038135169060200135611d51565b610741611d6d565b610741600480360360208110156108fe57600080fd5b50356001600160a01b0316611d73565b6109316004803603604081101561092457600080fd5b5080359060200135611d85565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561096d578181015183820152602001610955565b505050509050019250505060405180910390f35b6106956004803603604081101561099757600080fd5b50803590602001356001600160a01b0316611da2565b610741600480360360208110156109c357600080fd5b50356001600160a01b0316611dc2565b610741611dd4565b610741611dda565b61062c611de0565b61066d60048036036020811015610a0157600080fd5b50356001600160a01b0316611def565b610741611f26565b610a3660048036036020811015610a2f57600080fd5b5035611f2c565b60408051938452602084019290925282820152519081900360600190f35b610741611f4d565b61074160048036036040811015610a7257600080fd5b506001600160a01b0381358116916020013516611f53565b61066d60048036036040811015610aa057600080fd5b810190602081018135600160201b811115610aba57600080fd5b820183602082011115610acc57600080fd5b803590602001918460208302840111600160201b83111715610aed57600080fd5b919390929091602081019035600160201b811115610b0a57600080fd5b820183602082011115610b1c57600080fd5b803590602001918460208302840111600160201b83111715610b3d57600080fd5b509092509050611f7e565b610b7660048036036040811015610b5e57600080fd5b506001600160a01b03813581169160200135166124d9565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b61069560048036036020811015610bb757600080fd5b50356001600160a01b0316612513565b61062c60048036036020811015610bdd57600080fd5b50356001600160a01b0316612528565b61066d60048036036020811015610c0357600080fd5b50356001600160a01b0316612543565b61062c612664565b610741612673565b61069560048036036060811015610c3957600080fd5b506001600160a01b03813581169160208101359091169060400135612679565b61066d60048036036020811015610c6f57600080fd5b50356001600160a01b0316612815565b61062c612900565b61074161290f565b61066d60048036036020811015610ca557600080fd5b5035612915565b6106956129a3565b61066d60048036036040811015610cca57600080fd5b810190602081018135600160201b811115610ce457600080fd5b820183602082011115610cf657600080fd5b803590602001918460208302840111600160201b83111715610d1757600080fd5b919390929091602081019035600160201b811115610d3457600080fd5b820183602082011115610d4657600080fd5b803590602001918460208302840111600160201b83111715610d6757600080fd5b5090925090506129ac565b61062c612b71565b61062c60048036036020811015610d9057600080fd5b50356001600160a01b0316612b80565b610695612b9b565b61066d60048036036020811015610dbe57600080fd5b50356001600160a01b0316612bc1565b61074160048036036020811015610de457600080fd5b50356001600160a01b0316612c9e565b610741612cb0565b610e2860048036036040811015610e1257600080fd5b506001600160a01b038135169060200135612cb6565b604080516001600160a01b03909316835290151560208301528051918290030190f35b61066d60048036036020811015610e6157600080fd5b5035612d58565b61066d60048036036020811015610e7e57600080fd5b5035612e7e565b61066d60048036036020811015610e9b57600080fd5b5035612f95565b61066d60048036036020811015610eb857600080fd5b50356130b3565b61066d60048036036020811015610ed557600080fd5b50356131d1565b61074161325f565b610741613265565b61062c61326b565b61066d60048036036020811015610f0a57600080fd5b503561327a565b61069560048036036060811015610f2757600080fd5b506001600160a01b03813581169160208101359091169060400135613394565b61074160048036036020811015610f5d57600080fd5b50356001600160a01b0316613530565b61074160048036036020811015610f8357600080fd5b50356001600160a01b0316613542565b61062c613554565b61062c613563565b61074160048036036020811015610fb957600080fd5b50356001600160a01b0316613572565b610fe660048036036020811015610fdf57600080fd5b5035613584565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e08701526101008601526101208501526001600160a01b039081166101408501521661016083015251908190036101800190f35b61066d6004803603602081101561106757600080fd5b50356001600160a01b03166135f6565b61066d6004803603604081101561108d57600080fd5b506001600160a01b0381351690602001356138f7565b61066d600480360360208110156110b957600080fd5b5035613913565b6110dd600480360360208110156110d657600080fd5b50356139e2565b6040805198895296151560208901526001600160a01b0395861688880152938516606088015291909316608086015260a085019290925260c084019190915260e083015251908190036101000190f35b6107416004803603604081101561114357600080fd5b506001600160a01b0381358116916020013516613a34565b61066d6004803603602081101561117157600080fd5b5035613a51565b61066d6004803603602081101561118e57600080fd5b5035613b72565b61062c613c90565b610741613c9f565b610741600480360360208110156111bb57600080fd5b50356001600160a01b0316613ca5565b61066d600480360360208110156111e157600080fd5b50356001600160a01b0316613cb7565b61066d6004803603602081101561120757600080fd5b50351515613ded565b610695613ec5565b61066d6004803603602081101561122e57600080fd5b50356001600160a01b0316613ece565b610741613fef565b61066d6004803603604081101561125c57600080fd5b506001600160a01b038135169060200135613ff5565b61066d6004803603602081101561128857600080fd5b50356001600160a01b0316614011565b61062c6140ee565b61066d600480360360608110156112b657600080fd5b506001600160a01b038135811691602081013590911690604001356140fd565b610741614257565b61074161425d565b610741600480360360408110156112fc57600080fd5b506001600160a01b0381358116916020013516614263565b61066d6004803603602081101561132a57600080fd5b50356001600160a01b03166144ed565b61062c61453e565b61074161454d565b610741614553565b61062c614559565b61062c614568565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6031546001600160a01b031690565b6113c8612b9b565b611408576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611449576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115611498576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60188054908290556040805182815260208101849052815133927f0628070e9ccbc70e8be34a2fa969f8d314ec049f17bfcb4c2020df4bccd2bf52928290030190a25050565b6001600160a01b0390811660009081526022602052604090205416151590565b6005602052600090815260409020546001600160a01b031681565b611521612b9b565b611561576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156115a2576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d631000008111156115f1576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b601b8054908290556040805182815260208101849052815133927f5c61c9c51cb2781bc120817a851f7f27c134d5d191bc5a2b0ea971ba638425e4928290030190a25050565b61163f612b9b565b61167f576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156116c0576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f480cc6e59585343a9e9d6fe591dad0f80ce93bb2399ca672910f380671b46ba8928290030190a25050565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b611777612b9b565b6117b7576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156117f8576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115611847576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b603e8054908290556040805182815260208101849052815133927f02bd69d9975fcf3b39b6ab502d77983a0cfce893e47073f502d094c6a94da33b928290030190a25050565b60185481565b61189b612b9b565b6118db576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561191c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61192581614577565b611976576040805162461bcd60e51b815260206004820152601e60248201527f726567697374727941646472657373206e6f74206120636f6e74726163740000604482015290519081900360640190fd5b600480546001600160a01b038381166001600160a01b031983161792839055604051918116921690829033907f54c538f1d732806e1bfc25ec56236dac39e6070dd856c0e7efb2bc274709467d90600090a45050565b601f5481565b603d5460009060ff1615611a16576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b03163314611a64576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0384166000908152601c6020526040902054829080821115611a8b578091505b81611a9b57600092505050611b69565b611aab818363ffffffff6145b316565b6001600160a01b0387166000908152601c6020908152604080832093909355601d90522054611ae0908363ffffffff6145f516565b6001600160a01b0387166000818152601d6020526040902091909155611b0d90868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167f2bfaa669aeee298bc85fe2b7dddc312fc28b78622f086063b9a410d7ba9939cf856040518082815260200191505060405180910390a46001925050505b9392505050565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b611bca612b9b565b611c0a576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611c4b576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60298054908290556040805182815260208101849052815133927fa645d7b227c34f1f218d53bc3b3ccb9a43eaf2231b33925194f1de755aa3acc3928290030190a25050565b611c99612b9b565b611cd9576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611d1a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b601e54611d2d908263ffffffff6145f516565b601e55602e54611d4e906001600160a01b031633308463ffffffff6146a616565b50565b6001600160a01b039091166000908152601c6020526040902055565b602f5490565b602a6020526000908152604090205481565b6060611d996024848463ffffffff61470616565b90505b92915050565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b603e5490565b60155481565b6037546001600160a01b031690565b611df7612b9b565b611e37576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611e78576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611e8181614577565b611ed2576040805162461bcd60e51b815260206004820181905260248201527f6e65774c6f636b534f5641646472657373206e6f74206120636f6e7472616374604482015290519081900360640190fd5b603880546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fea3cad8b6739a7a73616cb585fe48a8e8f61d1fd7f9822ccd7580a805357aa7090600090a45050565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b6001600160a01b039182166000908152603c6020908152604080832093909416825291909152205490565b611f86612b9b565b611fc6576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612007576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b82811461204c576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b838110156124d25782828281811061206357fe5b905060200201356001600160a01b03166001600160a01b031685858381811061208857fe5b905060200201356001600160a01b03166001600160a01b031614156120e4576040805162461bcd60e51b815260206004820152600d60248201526c1c1bdbdb080f4f48185cdcd95d609a1b604482015290519081900360640190fd5b60008585838181106120f257fe5b905060200201356001600160a01b03166001600160a01b0316141561214a576040805162461bcd60e51b81526020600482015260096024820152680706f6f6c203d3d20360bc1b604482015290519081900360640190fd5b600083838381811061215857fe5b905060200201356001600160a01b03166001600160a01b03161415806121b85750600060228187878581811061218a57fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000205416919091141590505b6121fb576040805162461bcd60e51b815260206004820152600f60248201526e706f6f6c206e6f742065786973747360881b604482015290519081900360640190fd5b600083838381811061220957fe5b905060200201356001600160a01b03166001600160a01b03161415612328576000602360006022600089898781811061223e57fe5b6001600160a01b0360209182029390930135831684528381019490945250604091820160009081205482168552928401949094529190910181208054939092166001600160a01b031990931692909217905560228187878581811061229f57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061232285858381811061230257fe5b905060200201356001600160a01b0316602461480590919063ffffffff16565b50612459565b82828281811061233457fe5b905060200201356001600160a01b03166022600087878581811061235457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508484828181106123b457fe5b905060200201356001600160a01b0316602360008585858181106123d457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061245785858381811061243757fe5b905060200201356001600160a01b0316602461481290919063ffffffff16565b505b82828281811061246557fe5b905060200201356001600160a01b03166001600160a01b031685858381811061248a57fe5b6040516001600160a01b036020909202939093013516913391507f919223d371e0ad76f1f32dcbe0750166810bff9a9e4b2735bfcd01c5686c8d8990600090a460010161204f565b5050505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b61254b612b9b565b61258b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156125cc576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6125d581614577565b6126105760405162461bcd60e51b8152600401808060200182810382526021815260200180614d4f6021913960400191505060405180910390fd5b603780546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907f6105cbfb5494a79f89745763767914b7b60b00defac5e94c7eb28cc5e44c479f90600090a45050565b6003546001600160a01b031681565b60355481565b603d5460009060ff16156126bd576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b0316331461270b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038416600090815260196020526040902054829080821115612732578091505b8161274257600092505050611b69565b612752818363ffffffff6145b316565b6001600160a01b038716600090815260196020908152604080832093909355601a90522054612787908363ffffffff6145f516565b6001600160a01b0387166000818152601a60205260409020919091556127b490868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167f951f1856a4d1d8c0081f50a1aee9fdc008f729d0f22849618016e353179b8dda856040518082815260200191505060405180910390a450600195945050505050565b61281d612b9b565b61285d576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561289e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600280546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f05621ab0b721f217895f5337ac1283251172d175ef3dc8c9a0287155f6024ce8928290030190a25050565b6002546001600160a01b031681565b601e5481565b61291d612b9b565b61295d576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561299e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b602755565b603d5460ff1681565b6129b4612b9b565b6129f4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612a35576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b828114612a7a576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b838110156124d257828282818110612a9157fe5b90506020020135151560266000878785818110612aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848482818110612afd57fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b03167f24cecc90c7d4bc8c6765b75eedcc61d4e1cc4e4d49cd0756c6dfb5f6cc259b50858585818110612b4d57fe5b604080516020928302949094013515158452519283900301919050a3600101612a7d565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316612bb261481f565b6001600160a01b031614905090565b612bc9612b9b565b612c09576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612c4a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b603180546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fe48b1893efaee62da0749dd98dbf0ea62ee472b37f7205114aca36cc9de1122890600090a45050565b60176020526000908152604090205481565b602c5481565b600080612cc1612b9b565b612d01576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612d42576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b612d4c8484614823565b915091505b9250929050565b612d60612b9b565b612da0576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612de1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115612e38576040805162461bcd60e51b815260206004820152601660248201527508ccaca40e4cac4c2e8ca40d2e640e8dede40d0d2ced60531b604482015290519081900360640190fd5b602f8054908290556040805182815260208101849052815133927fb12d68e20e5279e25ff10edfc0f82deaa858ea2ac9874cf58518f4e5f9422013928290030190a25050565b612e86612b9b565b612ec6576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612f07576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61270f811115612f4f576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b603f8054908290556040805182815260208101849052815133927fc6d322dc6668f20ff04ac11b217aae8e8704e6388bd1dececeab1059db806bf6928290030190a25050565b612f9d612b9b565b612fdd576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561301e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d6310000081111561306d576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60218054908290556040805182815260208101849052815133927fa06d9b7b1c979150dcbf5b050626cc7d06c764a12ebf76ec8d16b8d3d7c9ee53928290030190a25050565b6130bb612b9b565b6130fb576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561313c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d6310000081111561318b576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60398054908290556040805182815260208101849052815133927f61d3e840cf1074298f10fa77edb788b4e5e554d7d135c93ac5f38f2ce0f6b52d928290030190a25050565b6131d9612b9b565b613219576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561325a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b602855565b602f5481565b60205481565b602d546001600160a01b031681565b613282612b9b565b6132c2576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613303576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6000811161334e576040805162461bcd60e51b81526020600482015260136024820152724261736520726577617264206973207a65726f60681b604482015290519081900360640190fd5b602b8054908290556040805182815260208101849052815133927f13cb748cec5c5021a23ec7994522a0911f24f10fdabc909281fbe95914b782f0928290030190a25050565b603d5460009060ff16156133d8576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b03163314613426576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03841660009081526016602052604090205482908082111561344d578091505b8161345d57600092505050611b69565b61346d818363ffffffff6145b316565b6001600160a01b0387166000908152601660209081526040808320939093556017905220546134a2908363ffffffff6145f516565b6001600160a01b0387166000818152601760205260409020919091556134cf90868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167fabc20bdd02de91df32a6e4a11684e26e0a34dc5a895a314ae51a919bc9f62c60856040518082815260200191505060405180910390a450600195945050505050565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b6135fe612b9b565b61363e576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b61364f631d18990160e21b826148a0565b613660631a81c19160e01b826148a0565b6136716359e49e0f60e01b826148a0565b613682630427554f60e51b826148a0565b61369363691c6d9160e11b826148a0565b6136a4630c615ee960e01b826148a0565b6136b56302ff16f160e31b826148a0565b6136c66329f9986d60e01b826148a0565b6136d7633487e38960e21b826148a0565b6136e863a32bb68360e01b826148a0565b6136f963a2ab1ba160e01b826148a0565b61370a637fb202e560e01b826148a0565b61371b6314dcf98560e31b826148a0565b61372c63355a395f60e01b826148a0565b61373d63e8997dbd60e01b826148a0565b61374e631e4aaa4f60e31b826148a0565b61375f6358d644e560e11b826148a0565b6137706374326e8f60e01b826148a0565b6137816332e4706f60e01b826148a0565b613792639688185760e01b826148a0565b6137a3633c56ae1b60e01b826148a0565b6137b463402946b960e01b826148a0565b6137c563115dd4b160e01b826148a0565b6137d66302d77d0d60e41b826148a0565b6137e763367aaa9960e21b826148a0565b6137f8630e3ff93760e41b826148a0565b613809636fbae33b60e01b826148a0565b61381a634dd053a560e01b826148a0565b61382b630c7c333f60e41b826148a0565b61383c6358aac5b960e11b826148a0565b61384d63031b39f960e61b826148a0565b61385e6372523d0160e11b826148a0565b61386f633e526e6b60e01b826148a0565b613880631674367b60e21b826148a0565b6138916307024c2560e01b826148a0565b6138a26325e7f39360e11b826148a0565b6138b3633d1250bb60e21b826148a0565b6138c4633f1ae8b960e01b826148a0565b6138d563462096f360e01b826148a0565b6138e663a1eb568360e01b826148a0565b611d4e6301c832c960e71b826148a0565b6001600160a01b03909116600090815260166020526040902055565b61391b612b9b565b61395b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561399c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60358054908290556040805182815260208101849052815133927f5b3b73dcee2d869937089aa5282989415bc607389ab2d4164ae83e7a9e1da084928290030190a25050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b613a59612b9b565b613a99576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613ada576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115613b29576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60208054828255604080518281529283018490528051919233927f7f47cc725826cba6f43b2c0a013328b47d5f16aa9d27d6f0196a37a35c8e53f5929181900390910190a25050565b613b7a612b9b565b613bba576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613bfb576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115613c4a576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60158054908290556040805182815260208101849052815133927fa6c5bd6650afa784494efd877ecd8b7505efbbbaed74b7dd29f1472d6cd0c492928290030190a25050565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b613cbf612b9b565b613cff576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613d40576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b613d4981614577565b613d9a576040805162461bcd60e51b815260206004820181905260248201527f7772627463546f6b656e41646472657373206e6f74206120636f6e7472616374604482015290519081900360640190fd5b602d80546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907ec53b30140bc38db3a9070249d614e03304ada9e458b2d2f01d23feed00985a90600090a45050565b613df5612b9b565b613e35576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615158115151415613e82576040805162461bcd60e51b815260206004820152600c60248201526b43616e277420746f67676c6560a01b604482015290519081900360640190fd5b603d805460ff19168215801591821790925560405190919033907f575725fa4843b62a71608b620f6d2a15792407ae40e019230a0500109782f66090600090a450565b603d5460ff1690565b613ed6612b9b565b613f16576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b613f6081614577565b613f9b5760405162461bcd60e51b8152600401808060200182810382526024815260200180614d9a6024913960400191505060405180910390fd5b602e80546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fffdeb9a96d6e1f867bcbb8a64815e576b65141995ab197cf02f7bb34fc186b7590600090a45050565b603f5490565b6001600160a01b03909116600090815260196020526040902055565b614019612b9b565b614059576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561409a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b601480546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907f83e92cb95ec836f94e25e0a7b31c39f750833a8ce24eaa227a7050aafea08a8490600090a45050565b6014546001600160a01b031681565b614105612b9b565b614145576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615614186576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b683635c9adc5dea000008111156141e4576040805162461bcd60e51b815260206004820152601e60248201527f5370656369616c206665652072656261746520697320746f6f20686967680000604482015290519081900360640190fd5b6001600160a01b038381166000818152603c6020908152604080832094871680845294825291829020805490869055825181815291820186905282519094939233927fd2d3c121d3439420f50efd36f0a01ebdac87111ec00360641c32aea3c6fc3213929081900390910190a450505050565b601b5481565b60285481565b603d5460009060ff16156142a7576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b031633146142f5576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0383166000908152601660205260409020548015614364576001600160a01b0384166000908152601660209081526040808320839055601790915290205461434a908263ffffffff6145f516565b6001600160a01b0385166000908152601760205260409020555b6001600160a01b03841660009081526019602052604090205480156143d3576001600160a01b0385166000908152601960209081526040808320839055601a9091529020546143b9908263ffffffff6145f516565b6001600160a01b0386166000908152601a60205260409020555b6001600160a01b0385166000908152601c60205260409020548015614442576001600160a01b0386166000908152601c60209081526040808320839055601d909152902054614428908263ffffffff6145f516565b6001600160a01b0387166000908152601d60205260409020555b600061446482614458868663ffffffff6145f516565b9063ffffffff6145f516565b905080614476579350611d9c92505050565b6144906001600160a01b038816878363ffffffff61464f16565b604080518581526020810185905280820184905290516001600160a01b0380891692908a169133917fa0f881f497620074a74d99fb0378eab58be58cac19de6d38c57bcfeb17861830919081900360600190a49695505050505050565b6144f5612b9b565b614535576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611d4e8161491a565b6038546001600160a01b031690565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906145ab57508115155b949350505050565b6000611d9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506149bb565b600082820183811015611d99576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526146a1908490614a52565b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052614700908590614a52565b50505050565b606082820183811015614754576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b60018501548111614765578061476b565b60018501545b905080158061477a5750808410155b156147855750611b69565b8381036040519080825280602002602001820160405280156147b1578160200160208202803883390190505b50915060005b8482038110156147fc5785600101858201815481106147d257fe5b90600052602060002001548382815181106147e957fe5b60209081029190910101526001016147b7565b50509392505050565b6000816145ab8482614c0a565b6000816145ab8482614cd3565b3390565b601e546000908190839080821115614839578091505b81614857575050602e546001600160a01b0316915060009050612d51565b614867818363ffffffff6145b316565b601e55602e54614887906001600160a01b0316878463ffffffff61464f16565b5050602e546001600160a01b0316946001945092505050565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156148fb576148f5600d6001600160e01b0319841663ffffffff614cd316565b50614916565b6146a1600d6001600160e01b0319841663ffffffff614c0a16565b5050565b6001600160a01b03811661495f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d296026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614a4a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614a0f5781810151838201526020016149f7565b50505050905090810190601f168015614a3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b614a64826001600160a01b0316614577565b614ab5576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614af35780518252601f199092019160209182019101614ad4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614b55576040519150601f19603f3d011682016040523d82523d6000602084013e614b5a565b606091505b509150915081614bb1576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561470057808060200190516020811015614bcd57600080fd5b50516147005760405162461bcd60e51b815260040180806020018281038252602a815260200180614d70602a913960400191505060405180910390fd5b6000614c168383614d13565b15614ccb5760008281526020849052604090205460018401546000199182019101808214614c8e576000856001018281548110614c4f57fe5b9060005260206000200154905080866001018481548110614c6c57fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480614caa57fe5b60019003818190600052602060002001600090559055600192505050611d9c565b506000611d9c565b6000614cdf8383614d13565b614ccb5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055611d9c565b6000908152602091909152604090205415159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736e6577536f76546f6b656e41646472657373206e6f74206120636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645f70726f746f636f6c546f6b656e41646472657373206e6f74206120636f6e7472616374a265627a7a72315820f751e3e773085ba79d40514999c823d3056bc92ce9ccfb1672a9ffe6941ed99a64736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106105815760003560e01c80638dc48ba5116102e5578063cb6eacd11161018d578063e4a47a02116100f4578063f2555278116100ad578063f589a3e711610087578063f589a3e714611342578063f6ddc8b31461134a578063f706b1f214611352578063f851a4401461135a57610581565b8063f2555278146112e6578063f2fde38b14611314578063f44942ec1461133a57610581565b8063e4a47a0214611246578063e8997dbd14611272578063e8f6276414611298578063ea0e3930146112a0578063edab119f146112d6578063f0e085f5146112de57610581565b8063d485045e11610146578063d485045e146111a5578063d9eaaa64146111cb578063da541e09146111f1578063dac8856114611210578063e3ff937014611218578063e41964801461123e57610581565b8063cb6eacd1146110c0578063cd5d808d1461112d578063d21f8e241461115b578063d238db2214611178578063d288208c14611195578063d473c2da1461119d57610581565b8063ae0a85301161024c578063b9cffa3e11610205578063c4a90815116101df578063c4a9081514610fc9578063c4d66de814611051578063c6ce7e4014611077578063c7c333f0146110a357610581565b8063b9cffa3e14610f93578063ba4861e914610f9b578063bdee453c14610fa357610581565b8063ae0a853014610ee4578063afe8400914610eec578063b1558b7214610ef4578063b1ac89ca14610f11578063b30643d914610f47578063b7e1524114610f6d57610581565b80639c53874f1161029e5780639c53874f14610e4b578063a1eb568314610e68578063a2ab1ba114610e85578063a32bb68314610ea2578063a6e7cc2814610ebf578063acc0434814610edc57610581565b80638dc48ba514610d7a5780638f32d59b14610da05780639254e6bf14610da857806392d894f814610dce578063959083d314610df45780639688185714610dfc57610581565b80634115a2b61161044857806368c4ac26116103af57806374626404116103685780637fb202e5116103425780637fb202e514610c8f5780638456cb5914610cac57806384eaa9e014610cb45780638da5cb5b14610d7257610581565b80637462640414610c5957806378d849ed14610c7f5780637a8faeb814610c8757610581565b806368c4ac2614610ba15780636e66373014610bc75780636fbae33b14610bed5780637420ca3e14610c13578063742e679814610c1b57806374326e8f14610c2357610581565b80634f28cac2116104015780634f28cac214610a11578063569fc1fb14610a19578063574442cc14610a5457806359d0d9ec14610a5c57806359e49e0f14610a8a57806362fff3f614610b4857610581565b80634115a2b6146109815780634203e395146109ad578063462096f3146109d35780634699f846146109db5780634bcfe726146109e35780634dd053a5146109eb57610581565b80632a324027116104ec578063355a395f116104a5578063355a395f1461087a5780633c56ae1b146108975780633e526e6b146108b45780633f1ae8b9146108e05780633fca506e146108e8578063402946b91461090e57610581565b80632a324027146107bc5780632d77d0d0146107c45780632f470764146107ea57806332e4706f146107f25780633432423c146108285780633452d2d41461085457610581565b806317f8b7881161053e57806317f8b788146106d05780631a81c191146106ed5780631b7bde7414610713578063218b39c61461075357806324cc57491461077957806329f9986d1461079f57610581565b8063065d810f146105c55780630676c1b71461062457806307024c25146106485780630c615ee914610650578063115dd4b11461066f57806317548b79146106a9575b6040805162461bcd60e51b815260206004820152601460248201527319985b1b189858dac81b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6105f1600480360360408110156105db57600080fd5b506001600160a01b038135169060200135611362565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61062c6113a2565b604080516001600160a01b039092168252519081900360200190f35b61062c6113b1565b61066d6004803603602081101561066657600080fd5b50356113c0565b005b6106956004803603602081101561068557600080fd5b50356001600160a01b03166114de565b604080519115158252519081900360200190f35b61062c600480360360208110156106bf57600080fd5b50356001600160e01b0319166114fe565b61066d600480360360208110156106e657600080fd5b5035611519565b61066d6004803603602081101561070357600080fd5b50356001600160a01b0316611637565b6107416004803603604081101561072957600080fd5b506001600160a01b0381358116916020013516611722565b60408051918252519081900360200190f35b61062c6004803603602081101561076957600080fd5b50356001600160a01b031661173f565b6106956004803603602081101561078f57600080fd5b50356001600160a01b031661175a565b61066d600480360360208110156107b557600080fd5b503561176f565b61074161188d565b61066d600480360360208110156107da57600080fd5b50356001600160a01b0316611893565b6107416119cc565b6106956004803603606081101561080857600080fd5b506001600160a01b038135811691602081013590911690604001356119d2565b6105f16004803603604081101561083e57600080fd5b506001600160a01b038135169060200135611b70565b6107416004803603602081101561086a57600080fd5b50356001600160a01b0316611bb0565b61066d6004803603602081101561089057600080fd5b5035611bc2565b61066d600480360360208110156108ad57600080fd5b5035611c91565b61066d600480360360408110156108ca57600080fd5b506001600160a01b038135169060200135611d51565b610741611d6d565b610741600480360360208110156108fe57600080fd5b50356001600160a01b0316611d73565b6109316004803603604081101561092457600080fd5b5080359060200135611d85565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561096d578181015183820152602001610955565b505050509050019250505060405180910390f35b6106956004803603604081101561099757600080fd5b50803590602001356001600160a01b0316611da2565b610741600480360360208110156109c357600080fd5b50356001600160a01b0316611dc2565b610741611dd4565b610741611dda565b61062c611de0565b61066d60048036036020811015610a0157600080fd5b50356001600160a01b0316611def565b610741611f26565b610a3660048036036020811015610a2f57600080fd5b5035611f2c565b60408051938452602084019290925282820152519081900360600190f35b610741611f4d565b61074160048036036040811015610a7257600080fd5b506001600160a01b0381358116916020013516611f53565b61066d60048036036040811015610aa057600080fd5b810190602081018135600160201b811115610aba57600080fd5b820183602082011115610acc57600080fd5b803590602001918460208302840111600160201b83111715610aed57600080fd5b919390929091602081019035600160201b811115610b0a57600080fd5b820183602082011115610b1c57600080fd5b803590602001918460208302840111600160201b83111715610b3d57600080fd5b509092509050611f7e565b610b7660048036036040811015610b5e57600080fd5b506001600160a01b03813581169160200135166124d9565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b61069560048036036020811015610bb757600080fd5b50356001600160a01b0316612513565b61062c60048036036020811015610bdd57600080fd5b50356001600160a01b0316612528565b61066d60048036036020811015610c0357600080fd5b50356001600160a01b0316612543565b61062c612664565b610741612673565b61069560048036036060811015610c3957600080fd5b506001600160a01b03813581169160208101359091169060400135612679565b61066d60048036036020811015610c6f57600080fd5b50356001600160a01b0316612815565b61062c612900565b61074161290f565b61066d60048036036020811015610ca557600080fd5b5035612915565b6106956129a3565b61066d60048036036040811015610cca57600080fd5b810190602081018135600160201b811115610ce457600080fd5b820183602082011115610cf657600080fd5b803590602001918460208302840111600160201b83111715610d1757600080fd5b919390929091602081019035600160201b811115610d3457600080fd5b820183602082011115610d4657600080fd5b803590602001918460208302840111600160201b83111715610d6757600080fd5b5090925090506129ac565b61062c612b71565b61062c60048036036020811015610d9057600080fd5b50356001600160a01b0316612b80565b610695612b9b565b61066d60048036036020811015610dbe57600080fd5b50356001600160a01b0316612bc1565b61074160048036036020811015610de457600080fd5b50356001600160a01b0316612c9e565b610741612cb0565b610e2860048036036040811015610e1257600080fd5b506001600160a01b038135169060200135612cb6565b604080516001600160a01b03909316835290151560208301528051918290030190f35b61066d60048036036020811015610e6157600080fd5b5035612d58565b61066d60048036036020811015610e7e57600080fd5b5035612e7e565b61066d60048036036020811015610e9b57600080fd5b5035612f95565b61066d60048036036020811015610eb857600080fd5b50356130b3565b61066d60048036036020811015610ed557600080fd5b50356131d1565b61074161325f565b610741613265565b61062c61326b565b61066d60048036036020811015610f0a57600080fd5b503561327a565b61069560048036036060811015610f2757600080fd5b506001600160a01b03813581169160208101359091169060400135613394565b61074160048036036020811015610f5d57600080fd5b50356001600160a01b0316613530565b61074160048036036020811015610f8357600080fd5b50356001600160a01b0316613542565b61062c613554565b61062c613563565b61074160048036036020811015610fb957600080fd5b50356001600160a01b0316613572565b610fe660048036036020811015610fdf57600080fd5b5035613584565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e08701526101008601526101208501526001600160a01b039081166101408501521661016083015251908190036101800190f35b61066d6004803603602081101561106757600080fd5b50356001600160a01b03166135f6565b61066d6004803603604081101561108d57600080fd5b506001600160a01b0381351690602001356138f7565b61066d600480360360208110156110b957600080fd5b5035613913565b6110dd600480360360208110156110d657600080fd5b50356139e2565b6040805198895296151560208901526001600160a01b0395861688880152938516606088015291909316608086015260a085019290925260c084019190915260e083015251908190036101000190f35b6107416004803603604081101561114357600080fd5b506001600160a01b0381358116916020013516613a34565b61066d6004803603602081101561117157600080fd5b5035613a51565b61066d6004803603602081101561118e57600080fd5b5035613b72565b61062c613c90565b610741613c9f565b610741600480360360208110156111bb57600080fd5b50356001600160a01b0316613ca5565b61066d600480360360208110156111e157600080fd5b50356001600160a01b0316613cb7565b61066d6004803603602081101561120757600080fd5b50351515613ded565b610695613ec5565b61066d6004803603602081101561122e57600080fd5b50356001600160a01b0316613ece565b610741613fef565b61066d6004803603604081101561125c57600080fd5b506001600160a01b038135169060200135613ff5565b61066d6004803603602081101561128857600080fd5b50356001600160a01b0316614011565b61062c6140ee565b61066d600480360360608110156112b657600080fd5b506001600160a01b038135811691602081013590911690604001356140fd565b610741614257565b61074161425d565b610741600480360360408110156112fc57600080fd5b506001600160a01b0381358116916020013516614263565b61066d6004803603602081101561132a57600080fd5b50356001600160a01b03166144ed565b61062c61453e565b61074161454d565b610741614553565b61062c614559565b61062c614568565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6031546001600160a01b031690565b6113c8612b9b565b611408576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611449576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115611498576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60188054908290556040805182815260208101849052815133927f0628070e9ccbc70e8be34a2fa969f8d314ec049f17bfcb4c2020df4bccd2bf52928290030190a25050565b6001600160a01b0390811660009081526022602052604090205416151590565b6005602052600090815260409020546001600160a01b031681565b611521612b9b565b611561576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156115a2576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d631000008111156115f1576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b601b8054908290556040805182815260208101849052815133927f5c61c9c51cb2781bc120817a851f7f27c134d5d191bc5a2b0ea971ba638425e4928290030190a25050565b61163f612b9b565b61167f576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156116c0576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f480cc6e59585343a9e9d6fe591dad0f80ce93bb2399ca672910f380671b46ba8928290030190a25050565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b611777612b9b565b6117b7576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156117f8576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115611847576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b603e8054908290556040805182815260208101849052815133927f02bd69d9975fcf3b39b6ab502d77983a0cfce893e47073f502d094c6a94da33b928290030190a25050565b60185481565b61189b612b9b565b6118db576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561191c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61192581614577565b611976576040805162461bcd60e51b815260206004820152601e60248201527f726567697374727941646472657373206e6f74206120636f6e74726163740000604482015290519081900360640190fd5b600480546001600160a01b038381166001600160a01b031983161792839055604051918116921690829033907f54c538f1d732806e1bfc25ec56236dac39e6070dd856c0e7efb2bc274709467d90600090a45050565b601f5481565b603d5460009060ff1615611a16576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b03163314611a64576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0384166000908152601c6020526040902054829080821115611a8b578091505b81611a9b57600092505050611b69565b611aab818363ffffffff6145b316565b6001600160a01b0387166000908152601c6020908152604080832093909355601d90522054611ae0908363ffffffff6145f516565b6001600160a01b0387166000818152601d6020526040902091909155611b0d90868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167f2bfaa669aeee298bc85fe2b7dddc312fc28b78622f086063b9a410d7ba9939cf856040518082815260200191505060405180910390a46001925050505b9392505050565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b611bca612b9b565b611c0a576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611c4b576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60298054908290556040805182815260208101849052815133927fa645d7b227c34f1f218d53bc3b3ccb9a43eaf2231b33925194f1de755aa3acc3928290030190a25050565b611c99612b9b565b611cd9576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611d1a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b601e54611d2d908263ffffffff6145f516565b601e55602e54611d4e906001600160a01b031633308463ffffffff6146a616565b50565b6001600160a01b039091166000908152601c6020526040902055565b602f5490565b602a6020526000908152604090205481565b6060611d996024848463ffffffff61470616565b90505b92915050565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b603e5490565b60155481565b6037546001600160a01b031690565b611df7612b9b565b611e37576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615611e78576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611e8181614577565b611ed2576040805162461bcd60e51b815260206004820181905260248201527f6e65774c6f636b534f5641646472657373206e6f74206120636f6e7472616374604482015290519081900360640190fd5b603880546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fea3cad8b6739a7a73616cb585fe48a8e8f61d1fd7f9822ccd7580a805357aa7090600090a45050565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b6001600160a01b039182166000908152603c6020908152604080832093909416825291909152205490565b611f86612b9b565b611fc6576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612007576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b82811461204c576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b838110156124d25782828281811061206357fe5b905060200201356001600160a01b03166001600160a01b031685858381811061208857fe5b905060200201356001600160a01b03166001600160a01b031614156120e4576040805162461bcd60e51b815260206004820152600d60248201526c1c1bdbdb080f4f48185cdcd95d609a1b604482015290519081900360640190fd5b60008585838181106120f257fe5b905060200201356001600160a01b03166001600160a01b0316141561214a576040805162461bcd60e51b81526020600482015260096024820152680706f6f6c203d3d20360bc1b604482015290519081900360640190fd5b600083838381811061215857fe5b905060200201356001600160a01b03166001600160a01b03161415806121b85750600060228187878581811061218a57fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000205416919091141590505b6121fb576040805162461bcd60e51b815260206004820152600f60248201526e706f6f6c206e6f742065786973747360881b604482015290519081900360640190fd5b600083838381811061220957fe5b905060200201356001600160a01b03166001600160a01b03161415612328576000602360006022600089898781811061223e57fe5b6001600160a01b0360209182029390930135831684528381019490945250604091820160009081205482168552928401949094529190910181208054939092166001600160a01b031990931692909217905560228187878581811061229f57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061232285858381811061230257fe5b905060200201356001600160a01b0316602461480590919063ffffffff16565b50612459565b82828281811061233457fe5b905060200201356001600160a01b03166022600087878581811061235457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508484828181106123b457fe5b905060200201356001600160a01b0316602360008585858181106123d457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061245785858381811061243757fe5b905060200201356001600160a01b0316602461481290919063ffffffff16565b505b82828281811061246557fe5b905060200201356001600160a01b03166001600160a01b031685858381811061248a57fe5b6040516001600160a01b036020909202939093013516913391507f919223d371e0ad76f1f32dcbe0750166810bff9a9e4b2735bfcd01c5686c8d8990600090a460010161204f565b5050505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b61254b612b9b565b61258b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff16156125cc576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6125d581614577565b6126105760405162461bcd60e51b8152600401808060200182810382526021815260200180614d4f6021913960400191505060405180910390fd5b603780546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907f6105cbfb5494a79f89745763767914b7b60b00defac5e94c7eb28cc5e44c479f90600090a45050565b6003546001600160a01b031681565b60355481565b603d5460009060ff16156126bd576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b0316331461270b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038416600090815260196020526040902054829080821115612732578091505b8161274257600092505050611b69565b612752818363ffffffff6145b316565b6001600160a01b038716600090815260196020908152604080832093909355601a90522054612787908363ffffffff6145f516565b6001600160a01b0387166000818152601a60205260409020919091556127b490868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167f951f1856a4d1d8c0081f50a1aee9fdc008f729d0f22849618016e353179b8dda856040518082815260200191505060405180910390a450600195945050505050565b61281d612b9b565b61285d576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561289e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600280546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f05621ab0b721f217895f5337ac1283251172d175ef3dc8c9a0287155f6024ce8928290030190a25050565b6002546001600160a01b031681565b601e5481565b61291d612b9b565b61295d576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561299e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b602755565b603d5460ff1681565b6129b4612b9b565b6129f4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612a35576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b828114612a7a576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b838110156124d257828282818110612a9157fe5b90506020020135151560266000878785818110612aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848482818110612afd57fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b03167f24cecc90c7d4bc8c6765b75eedcc61d4e1cc4e4d49cd0756c6dfb5f6cc259b50858585818110612b4d57fe5b604080516020928302949094013515158452519283900301919050a3600101612a7d565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316612bb261481f565b6001600160a01b031614905090565b612bc9612b9b565b612c09576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612c4a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b603180546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fe48b1893efaee62da0749dd98dbf0ea62ee472b37f7205114aca36cc9de1122890600090a45050565b60176020526000908152604090205481565b602c5481565b600080612cc1612b9b565b612d01576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612d42576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b612d4c8484614823565b915091505b9250929050565b612d60612b9b565b612da0576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612de1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115612e38576040805162461bcd60e51b815260206004820152601660248201527508ccaca40e4cac4c2e8ca40d2e640e8dede40d0d2ced60531b604482015290519081900360640190fd5b602f8054908290556040805182815260208101849052815133927fb12d68e20e5279e25ff10edfc0f82deaa858ea2ac9874cf58518f4e5f9422013928290030190a25050565b612e86612b9b565b612ec6576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615612f07576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61270f811115612f4f576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b603f8054908290556040805182815260208101849052815133927fc6d322dc6668f20ff04ac11b217aae8e8704e6388bd1dececeab1059db806bf6928290030190a25050565b612f9d612b9b565b612fdd576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561301e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d6310000081111561306d576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60218054908290556040805182815260208101849052815133927fa06d9b7b1c979150dcbf5b050626cc7d06c764a12ebf76ec8d16b8d3d7c9ee53928290030190a25050565b6130bb612b9b565b6130fb576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561313c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d6310000081111561318b576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60398054908290556040805182815260208101849052815133927f61d3e840cf1074298f10fa77edb788b4e5e554d7d135c93ac5f38f2ce0f6b52d928290030190a25050565b6131d9612b9b565b613219576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561325a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b602855565b602f5481565b60205481565b602d546001600160a01b031681565b613282612b9b565b6132c2576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613303576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6000811161334e576040805162461bcd60e51b81526020600482015260136024820152724261736520726577617264206973207a65726f60681b604482015290519081900360640190fd5b602b8054908290556040805182815260208101849052815133927f13cb748cec5c5021a23ec7994522a0911f24f10fdabc909281fbe95914b782f0928290030190a25050565b603d5460009060ff16156133d8576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b03163314613426576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03841660009081526016602052604090205482908082111561344d578091505b8161345d57600092505050611b69565b61346d818363ffffffff6145b316565b6001600160a01b0387166000908152601660209081526040808320939093556017905220546134a2908363ffffffff6145f516565b6001600160a01b0387166000818152601760205260409020919091556134cf90868463ffffffff61464f16565b846001600160a01b0316866001600160a01b0316336001600160a01b03167fabc20bdd02de91df32a6e4a11684e26e0a34dc5a895a314ae51a919bc9f62c60856040518082815260200191505060405180910390a450600195945050505050565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b6135fe612b9b565b61363e576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b61364f631d18990160e21b826148a0565b613660631a81c19160e01b826148a0565b6136716359e49e0f60e01b826148a0565b613682630427554f60e51b826148a0565b61369363691c6d9160e11b826148a0565b6136a4630c615ee960e01b826148a0565b6136b56302ff16f160e31b826148a0565b6136c66329f9986d60e01b826148a0565b6136d7633487e38960e21b826148a0565b6136e863a32bb68360e01b826148a0565b6136f963a2ab1ba160e01b826148a0565b61370a637fb202e560e01b826148a0565b61371b6314dcf98560e31b826148a0565b61372c63355a395f60e01b826148a0565b61373d63e8997dbd60e01b826148a0565b61374e631e4aaa4f60e31b826148a0565b61375f6358d644e560e11b826148a0565b6137706374326e8f60e01b826148a0565b6137816332e4706f60e01b826148a0565b613792639688185760e01b826148a0565b6137a3633c56ae1b60e01b826148a0565b6137b463402946b960e01b826148a0565b6137c563115dd4b160e01b826148a0565b6137d66302d77d0d60e41b826148a0565b6137e763367aaa9960e21b826148a0565b6137f8630e3ff93760e41b826148a0565b613809636fbae33b60e01b826148a0565b61381a634dd053a560e01b826148a0565b61382b630c7c333f60e41b826148a0565b61383c6358aac5b960e11b826148a0565b61384d63031b39f960e61b826148a0565b61385e6372523d0160e11b826148a0565b61386f633e526e6b60e01b826148a0565b613880631674367b60e21b826148a0565b6138916307024c2560e01b826148a0565b6138a26325e7f39360e11b826148a0565b6138b3633d1250bb60e21b826148a0565b6138c4633f1ae8b960e01b826148a0565b6138d563462096f360e01b826148a0565b6138e663a1eb568360e01b826148a0565b611d4e6301c832c960e71b826148a0565b6001600160a01b03909116600090815260166020526040902055565b61391b612b9b565b61395b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561399c576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60358054908290556040805182815260208101849052815133927f5b3b73dcee2d869937089aa5282989415bc607389ab2d4164ae83e7a9e1da084928290030190a25050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b613a59612b9b565b613a99576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613ada576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115613b29576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60208054828255604080518281529283018490528051919233927f7f47cc725826cba6f43b2c0a013328b47d5f16aa9d27d6f0196a37a35c8e53f5929181900390910190a25050565b613b7a612b9b565b613bba576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613bfb576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b68056bc75e2d63100000811115613c4a576040805162461bcd60e51b815260206004820152600e60248201526d0ecc2d8eaca40e8dede40d0d2ced60931b604482015290519081900360640190fd5b60158054908290556040805182815260208101849052815133927fa6c5bd6650afa784494efd877ecd8b7505efbbbaed74b7dd29f1472d6cd0c492928290030190a25050565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b613cbf612b9b565b613cff576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613d40576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b613d4981614577565b613d9a576040805162461bcd60e51b815260206004820181905260248201527f7772627463546f6b656e41646472657373206e6f74206120636f6e7472616374604482015290519081900360640190fd5b602d80546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907ec53b30140bc38db3a9070249d614e03304ada9e458b2d2f01d23feed00985a90600090a45050565b613df5612b9b565b613e35576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615158115151415613e82576040805162461bcd60e51b815260206004820152600c60248201526b43616e277420746f67676c6560a01b604482015290519081900360640190fd5b603d805460ff19168215801591821790925560405190919033907f575725fa4843b62a71608b620f6d2a15792407ae40e019230a0500109782f66090600090a450565b603d5460ff1690565b613ed6612b9b565b613f16576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615613f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b613f6081614577565b613f9b5760405162461bcd60e51b8152600401808060200182810382526024815260200180614d9a6024913960400191505060405180910390fd5b602e80546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907fffdeb9a96d6e1f867bcbb8a64815e576b65141995ab197cf02f7bb34fc186b7590600090a45050565b603f5490565b6001600160a01b03909116600090815260196020526040902055565b614019612b9b565b614059576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff161561409a576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b601480546001600160a01b038381166001600160a01b03198316811790935560405191169190829033907f83e92cb95ec836f94e25e0a7b31c39f750833a8ce24eaa227a7050aafea08a8490600090a45050565b6014546001600160a01b031681565b614105612b9b565b614145576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b603d5460ff1615614186576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b683635c9adc5dea000008111156141e4576040805162461bcd60e51b815260206004820152601e60248201527f5370656369616c206665652072656261746520697320746f6f20686967680000604482015290519081900360640190fd5b6001600160a01b038381166000818152603c6020908152604080832094871680845294825291829020805490869055825181815291820186905282519094939233927fd2d3c121d3439420f50efd36f0a01ebdac87111ec00360641c32aea3c6fc3213929081900390910190a450505050565b601b5481565b60285481565b603d5460009060ff16156142a7576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6014546001600160a01b031633146142f5576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0383166000908152601660205260409020548015614364576001600160a01b0384166000908152601660209081526040808320839055601790915290205461434a908263ffffffff6145f516565b6001600160a01b0385166000908152601760205260409020555b6001600160a01b03841660009081526019602052604090205480156143d3576001600160a01b0385166000908152601960209081526040808320839055601a9091529020546143b9908263ffffffff6145f516565b6001600160a01b0386166000908152601a60205260409020555b6001600160a01b0385166000908152601c60205260409020548015614442576001600160a01b0386166000908152601c60209081526040808320839055601d909152902054614428908263ffffffff6145f516565b6001600160a01b0387166000908152601d60205260409020555b600061446482614458868663ffffffff6145f516565b9063ffffffff6145f516565b905080614476579350611d9c92505050565b6144906001600160a01b038816878363ffffffff61464f16565b604080518581526020810185905280820184905290516001600160a01b0380891692908a169133917fa0f881f497620074a74d99fb0378eab58be58cac19de6d38c57bcfeb17861830919081900360600190a49695505050505050565b6144f5612b9b565b614535576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611d4e8161491a565b6038546001600160a01b031690565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906145ab57508115155b949350505050565b6000611d9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506149bb565b600082820183811015611d99576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526146a1908490614a52565b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052614700908590614a52565b50505050565b606082820183811015614754576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b60018501548111614765578061476b565b60018501545b905080158061477a5750808410155b156147855750611b69565b8381036040519080825280602002602001820160405280156147b1578160200160208202803883390190505b50915060005b8482038110156147fc5785600101858201815481106147d257fe5b90600052602060002001548382815181106147e957fe5b60209081029190910101526001016147b7565b50509392505050565b6000816145ab8482614c0a565b6000816145ab8482614cd3565b3390565b601e546000908190839080821115614839578091505b81614857575050602e546001600160a01b0316915060009050612d51565b614867818363ffffffff6145b316565b601e55602e54614887906001600160a01b0316878463ffffffff61464f16565b5050602e546001600160a01b0316946001945092505050565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156148fb576148f5600d6001600160e01b0319841663ffffffff614cd316565b50614916565b6146a1600d6001600160e01b0319841663ffffffff614c0a16565b5050565b6001600160a01b03811661495f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d296026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614a4a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614a0f5781810151838201526020016149f7565b50505050905090810190601f168015614a3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b614a64826001600160a01b0316614577565b614ab5576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614af35780518252601f199092019160209182019101614ad4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614b55576040519150601f19603f3d011682016040523d82523d6000602084013e614b5a565b606091505b509150915081614bb1576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561470057808060200190516020811015614bcd57600080fd5b50516147005760405162461bcd60e51b815260040180806020018281038252602a815260200180614d70602a913960400191505060405180910390fd5b6000614c168383614d13565b15614ccb5760008281526020849052604090205460018401546000199182019101808214614c8e576000856001018281548110614c4f57fe5b9060005260206000200154905080866001018481548110614c6c57fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480614caa57fe5b60019003818190600052602060002001600090559055600192505050611d9c565b506000611d9c565b6000614cdf8383614d13565b614ccb5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055611d9c565b6000908152602091909152604090205415159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736e6577536f76546f6b656e41646472657373206e6f74206120636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645f70726f746f636f6c546f6b656e41646472657373206e6f74206120636f6e7472616374a265627a7a72315820f751e3e773085ba79d40514999c823d3056bc92ce9ccfb1672a9ffe6941ed99a64736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
