{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanClosingsWith",
  "sourceName": "contracts/modules/LoanClosingsWith.sol",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "closer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralWithdrawAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "CloseWithDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "closer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionCloseSize",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loanCloseAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "exitPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentLeverage",
          "type": "uint256"
        }
      ],
      "name": "CloseWithSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnRewardFail",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "ExternalSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralWithdrawAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "Liquidate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "LoanSwap",
      "type": "event"
    },
    {
      "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": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayBorrowingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "interestToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "effectiveInterest",
          "type": "uint256"
        }
      ],
      "name": "PayInterestTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayLendingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayTradingFee",
      "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": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "shouldRefund",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountInRbtc",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "swapExcess",
      "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": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "closeWithDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanCloseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "withdrawToken",
          "type": "address"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "swapAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "returnTokenIsCollateral",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "closeWithSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanCloseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "withdrawToken",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "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": 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": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "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": "paySwapExcessToBorrowerThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": 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": 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": true,
      "inputs": [],
      "name": "wrbtcToken",
      "outputs": [
        {
          "internalType": "contract IWrbtcERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526001600055678ac7230489e80000601555670214e8348c4f000060185567013fbe85edc90000601b55674563918244f40000602055674563918244f40000602155674563918244f400006027556127106028556802b5e3af16b1880000602955650f478e084000602b5567016345785d8a0000602c556802b5e3af16b1880000602f5560036035556801158e460913d00000603955348015620000a657600080fd5b506000620000bc6001600160e01b036200011016565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000114565b3390565b6150fd80620001246000396000f3fe60806040526004361061036b5760003560e01c80638f32d59b116101c6578063cd5d808d116100f7578063f0e085f511610095578063f6ddc8b31161006f578063f6ddc8b31461099a578063f706b1f2146109af578063f851a440146109c4578063f8de21d2146109d95761036b565b8063f0e085f514610950578063f2fde38b14610965578063f589a3e7146109855761036b565b8063d485045e116100d1578063d485045e146108f1578063e8f6276414610911578063edab119f14610926578063ee54a4ec1461093b5761036b565b8063cd5d808d146108a7578063d288208c146108c7578063d473c2da146108dc5761036b565b8063b7e1524111610164578063bdee453c1161013e578063bdee453c146107f9578063c4a9081514610819578063c4d66de814610851578063cb6eacd1146108735761036b565b8063b7e15241146107af578063b9cffa3e146107cf578063ba4861e9146107e45761036b565b8063acc04348116101a0578063acc0434814610743578063ae0a853014610758578063afe840091461076d578063b30643d91461078f5761036b565b80638f32d59b146106f957806392d894f81461070e578063959083d31461072e5761036b565b80634699f846116102a05780637420ca3e1161023e5780637a8faeb8116102185780637a8faeb81461069a5780638456cb59146106af5780638da5cb5b146106c45780638dc48ba5146106d95761036b565b80637420ca3e1461065b578063742e67981461067057806378d849ed146106855761036b565b8063574442cc1161027a578063574442cc146105d557806362fff3f6146105ea57806368c4ac261461061b5780636e6637301461063b5761036b565b80634699f8461461057c5780634f28cac214610591578063569fc1fb146105a65761036b565b80632f4707641161030d578063366f513b116102e7578063366f513b146104fa5780633fca506e1461051c5780634115a2b61461053c5780634203e3951461055c5761036b565b80632f470764146104a55780633432423c146104ba5780633452d2d4146104da5761036b565b80631b7bde74116103495780631b7bde7414610416578063218b39c61461044357806324cc5749146104635780632a324027146104905761036b565b8063065d810f146103995780630676c1b7146103d457806317548b79146103f6575b34801561037757600080fd5b5060405162461bcd60e51b815260040161039090614e11565b60405180910390fd5b3480156103a557600080fd5b506103b96103b4366004614022565b6109f9565b6040516103cb96959493929190614f50565b60405180910390f35b3480156103e057600080fd5b506103e9610a39565b6040516103cb9190614971565b34801561040257600080fd5b506103e9610411366004614187565b610a48565b34801561042257600080fd5b50610436610431366004613fe8565b610a63565b6040516103cb9190614ef1565b34801561044f57600080fd5b506103e961045e366004613fca565b610a80565b34801561046f57600080fd5b5061048361047e366004613fca565b610a9b565b6040516103cb9190614b6f565b34801561049c57600080fd5b50610436610ab0565b3480156104b157600080fd5b50610436610ab6565b3480156104c657600080fd5b506103b96104d5366004614022565b610abc565b3480156104e657600080fd5b506104366104f5366004613fca565b610afc565b61050d6105083660046140ad565b610b0e565b6040516103cb93929190614eff565b34801561052857600080fd5b50610436610537366004613fca565b610b7c565b34801561054857600080fd5b5061048361055736600461408e565b610b8e565b34801561056857600080fd5b50610436610577366004613fca565b610bae565b34801561058857600080fd5b50610436610bc0565b34801561059d57600080fd5b50610436610bc6565b3480156105b257600080fd5b506105c66105c1366004614070565b610bcc565b6040516103cb93929190614f27565b3480156105e157600080fd5b50610436610bed565b3480156105f657600080fd5b5061060a610605366004613fe8565b610bf3565b6040516103cb959493929190614f35565b34801561062757600080fd5b50610483610636366004613fca565b610c2d565b34801561064757600080fd5b506103e9610656366004613fca565b610c42565b34801561066757600080fd5b506103e9610c5d565b34801561067c57600080fd5b50610436610c6c565b34801561069157600080fd5b506103e9610c72565b3480156106a657600080fd5b50610436610c81565b3480156106bb57600080fd5b50610483610c87565b3480156106d057600080fd5b506103e9610c90565b3480156106e557600080fd5b506103e96106f4366004613fca565b610c9f565b34801561070557600080fd5b50610483610cba565b34801561071a57600080fd5b50610436610729366004613fca565b610ce0565b34801561073a57600080fd5b50610436610cf2565b34801561074f57600080fd5b50610436610cf8565b34801561076457600080fd5b50610436610cfe565b34801561077957600080fd5b50610782610d04565b6040516103cb9190614cc2565b34801561079b57600080fd5b506104366107aa366004613fca565b610d13565b3480156107bb57600080fd5b506104366107ca366004613fca565b610d25565b3480156107db57600080fd5b506103e9610d37565b3480156107f057600080fd5b506103e9610d46565b34801561080557600080fd5b50610436610814366004613fca565b610d55565b34801561082557600080fd5b50610839610834366004614070565b610d67565b6040516103cb9c9b9a99989796959493929190614c0f565b34801561085d57600080fd5b5061087161086c366004613fca565b610dd9565b005b34801561087f57600080fd5b5061089361088e366004614070565b610eae565b6040516103cb989796959493929190614b98565b3480156108b357600080fd5b506104366108c2366004613fe8565b610f00565b3480156108d357600080fd5b506103e9610f1d565b3480156108e857600080fd5b50610436610f2c565b3480156108fd57600080fd5b5061043661090c366004613fca565b610f32565b34801561091d57600080fd5b506103e9610f44565b34801561093257600080fd5b50610436610f53565b34801561094757600080fd5b50610436610f59565b34801561095c57600080fd5b50610436610f63565b34801561097157600080fd5b50610871610980366004613fca565b610f69565b34801561099157600080fd5b50610436610f99565b3480156109a657600080fd5b50610436610f9f565b3480156109bb57600080fd5b506103e9610fa5565b3480156109d057600080fd5b506103e9610fb4565b3480156109e557600080fd5b5061050d6109f43660046140fa565b610fc3565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b6000806000600160005414610b355760405162461bcd60e51b815260040161039090614e71565b6002600055603d5460ff1615610b5d5760405162461bcd60e51b815260040161039090614ce1565b610b68868686611044565b600160005591989097509095509350505050565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610cd1611503565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b610de1610cba565b610dfd5760405162461bcd60e51b815260040161039090614dc1565b63366f513b60e01b600081905260056020527ff4ddf72383625730676ae80f4e72796030e502d9e3dce442215377f640213bd6546001600160a01b031690610e459083611507565b610e56637c6f10e960e11b83611507565b6f098dec2dc86d8dee6d2dccee6aed2e8d60831b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6014546001600160a01b031681565b601b5481565b6509184e72a00081565b60285481565b610f71610cba565b610f8d5760405162461bcd60e51b815260040161039090614dc1565b610f9681611583565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000806000600160005414610fea5760405162461bcd60e51b815260040161039090614e71565b6002600055603d5460ff16156110125760405162461bcd60e51b815260040161039090614ce1565b61102e8888888860405180602001604052806000815250611605565b6001600055919a90995090975095505050505050565b60008080836110655760405162461bcd60e51b815260040161039090614e01565b600060066000888152602001908152602001600020905060006007600083600101548152602001908152602001600020905061125c82604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508260405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050611f3f565b8160040154861161126d5785611273565b81600401545b9450600061143e83604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508360405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050888b611fda565b90508015611467576002820154600b840154611467916001600160a01b03908116911683612048565b826004015486141561147f57826005015494506114ad565b6114aa836004015461149e88866005015461216e90919063ffffffff16565b9063ffffffff6121b116565b94505b60038201546001600160a01b0316935084156114e85760058301546114d8908663ffffffff6121f316565b60058401556114e8848987612235565b6114f783838888600080612266565b50505093509350939050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156115625761155c600d6001600160e01b0319841663ffffffff61257716565b5061157f565b61157d600d6001600160e01b0319841663ffffffff6125bf16565b505b5050565b6001600160a01b0381166115a95760405162461bcd60e51b815260040161039090614d01565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008080856116265760405162461bcd60e51b815260040161039090614e51565b6000600660008a8152602001908152602001600020905060006007600083600101548152602001908152602001600020905061181d82604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508260405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050611f3f565b8160050154881161182e5787611834565b81600501545b9750600082600501548914806118475750875b15611a6e578260050154891461187b57611876836005015461149e8b866004015461216e90919063ffffffff16565b611881565b82600401545b9550856118a05760405162461bcd60e51b815260040161039090614e31565b611a6783604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508360405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050888d611fda565b9050611a72565b5060005b600080611c3e85604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508560405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508d868e8e612680565b9d509850909250905082611e835781975084600401548214611c76576005850154611c739061149e8a8463ffffffff61216e16565b97505b87611c935760405162461bcd60e51b815260040161039090614e31565b611e5a85604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508560405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508a8f611fda565b9250611e7c83611e70898563ffffffff61279c16565b9063ffffffff6121f316565b9650611e87565b8192505b82611ea45760405162461bcd60e51b815260040161039090614e81565b8015611ec5576005850154611ebf908263ffffffff6121f316565b60058601555b6002840154600b860154611ee6916001600160a01b039081169116856127c1565b89611efe5760028401546001600160a01b0316611f0d565b60038401546001600160a01b03165b95508615611f2057611f20868d89612235565b611f2f85858a848f6001612266565b5050505050955095509592505050565b8160600151611f605760405162461bcd60e51b815260040161039090614e61565b8161014001516001600160a01b0316336001600160a01b03161480611fa0575081516000908152600a6020908152604080832033845290915290205460ff165b611fbc5760405162461bcd60e51b815260040161039090614dc1565b805161157f5760405162461bcd60e51b815260040161039090614df1565b60008281611fe9868884612831565b9050600081831061200257509081900390600090612020565b50600091908190039081156120205761202087606001518684612235565b801561203a5761203a8760600151896101600151836127c1565b50909150505b949350505050565b801561215057346120645761205f833384846129d0565b61214b565b602d546001600160a01b038481169116146120915760405162461bcd60e51b815260040161039090614d21565b803410156120b15760405162461bcd60e51b815260040161039090614ee1565b602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050506001600160a01b0383163014905061213757612137833084846129d0565b8034111561214b5761214b33823403612a27565b61157d565b341561157d5760405162461bcd60e51b815260040161039090614d21565b60008261217d575060006121ab565b8282028284828161218a57fe5b04146121a85760405162461bcd60e51b815260040161039090614db1565b90505b92915050565b60006121a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ac3565b60006121a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612afa565b801561157d57602d546001600160a01b038481169116141561225b5761214b8282612b26565b61157d8383836127c1565b6122708685612bfd565b60028054908601546003870154600489015460058a01546040516001600160a01b0395861695600095869586956060958a956317f8680960e11b956122be9581169416929190602401614ac5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122fc919061495a565b600060405180830381855afa9150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915060018214156123595760208101519350604081015192505b600086600281111561236757fe5b1480612375575060048b0154155b806123835750896005015484115b61239f5760405162461bcd60e51b815260040161039090614dd1565b61256a8a60405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508c604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508b8b878c8a8d612cd4565b5050505050505050505050565b60006125838383612e2d565b6125b757506001808301805480830180835560009283526020808420909201859055848352908590526040909120556121ab565b5060006121ab565b60006125cb8383612e2d565b156125b7576000828152602084905260409020546001840154600019918201910180821461264357600085600101828154811061260457fe5b906000526020600020015490508086600101848154811061262157fe5b6000918252602080832090910192909255918252869052604090206001830190555b6000848152602086905260408120556001850180548061265f57fe5b600190038181906000526020600020016000905590556001925050506121ab565b6000806000806000806126978c8c8c8c8c8c612e42565b9450909250905087156126fc57889550858211156126e3576126bf8b60600151878403612ed2565b156126df576126da8b606001518d6101400151888503612235565b6126e3565b8195505b808a116126f15760006126f5565b808a035b935061277c565b89811461271b5760405162461bcd60e51b815260040161039090614de1565b8b60a001518a141561273457889550888203935061277c565b8b608001518210612774578b6080015195508b60800151820393506127698b608001518d6101400151838f60a0015103612235565b5060a08b015161277c565b819550600093505b898111612789578961278b565b805b945050509650965096509692505050565b6000828201838110156121a85760405162461bcd60e51b815260040161039090614d11565b801561157d576127e16001600160a01b038416838363ffffffff612fd816565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516128249190614ef1565b60405180910390a3505050565b60006128468361016001518560600151613031565b82516000908152600c602090815260408083206101608701516001600160a01b039081168552600b845282852060608a0151909116855290925290912060e08501514290811115612898575060e08501515b6128b783876000015189606001518a608001518a610140015186613115565b600086608001518610156128e857608087015184546128e1919061149e908963ffffffff61216e16565b90506128ec565b5082545b83546128fe908263ffffffff6121f316565b84556001830154612915908263ffffffff6121f316565b600184015560e0870151600090612932908463ffffffff6121f316565b9050612944818363ffffffff61216e16565b9050612959816201518063ffffffff6121b116565b9050876080015187101561298657600185015461297c908263ffffffff6121f316565b600186015561298e565b600060018601555b83546129a0908863ffffffff6121f316565b845560028401548181116129b55760006129b9565b8181035b6002909501949094559450505050505b9392505050565b8015612a21576001600160a01b038316301415612a0657612a016001600160a01b038516838363ffffffff612fd816565b612a21565b612a216001600160a01b03851684848463ffffffff61317016565b50505050565b80471015612a475760405162461bcd60e51b815260040161039090614d71565b6000826001600160a01b031682604051612a6090614966565b60006040518083038185875af1925050503d8060008114612a9d576040519150601f19603f3d011682016040523d82523d6000602084013e612aa2565b606091505b505090508061157d5760405162461bcd60e51b815260040161039090614d61565b60008183612ae45760405162461bcd60e51b81526004016103909190614cd0565b506000838581612af057fe5b0495945050505050565b60008184841115612b1e5760405162461bcd60e51b81526004016103909190614cd0565b505050900390565b801561157f57602d546001600160a01b03164780831115612ba257604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d90612b6f9084870390600401614ef1565b600060405180830381600087803b158015612b8957600080fd5b505af1158015612b9d573d6000803e3d6000fd5b505050505b612bac8484612a27565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a185604051612bef9190614ef1565b60405180910390a350505050565b80612c1a5760405162461bcd60e51b815260040161039090614e21565b8160040154811415612cb65760006004830181905560038301805460ff1916905542600784015560028301558154612c5a90600f9063ffffffff6125bf16565b508154600b8301546001600160a01b03166000908152601160205260409020612c889163ffffffff6125bf16565b508154600a8301546001600160a01b0316600090815260126020526040902061155c9163ffffffff6125bf16565b6004820154612ccb908263ffffffff6121f316565b60048301555050565b6000816002811115612ce257fe5b1415612d5b5786600001518761016001516001600160a01b03168861014001516001600160a01b03167f6349c1a02ec126f7f4fc6e6837e1859006e90e9901635c442d29271e77b96fb6338c606001518d608001518c8c8c8b604051612d4e979695949392919061497f565b60405180910390a4612e23565b6001816002811115612d6957fe5b1415612e23578215612d9157612d8e6ec097ce7bc90715b34b9f1000000000846121b1565b92505b8115612db457612db16f4b3b4ca85a86c47a098a224000000000836121b1565b91505b86600001518761016001516001600160a01b03168861014001516001600160a01b03167f2ed7b29b4ca95cf3bb9a44f703872a66e6aa5e8f07b675fa9a5c124a1e5d73528b608001518c60600151338b8d8b8b604051612e1a9796959493929190614a02565b60405180910390a45b5050505050505050565b60009081526020919091526040902054151590565b6000806000612e7b896000015189608001518a606001518c61014001518b8e60a001518b612e71576000612e73565b8c5b60008c613194565b9194509250905085831015612ea25760405162461bcd60e51b815260040161039090614da1565b8860a00151821115612ec65760405162461bcd60e51b815260040161039090614d51565b96509650969350505050565b600254602d54604051630a7549df60e21b8152600092839283926001600160a01b03928316926329d5277c92612f10928a92909116906004016149e7565b604080518083038186803b158015612f2757600080fd5b505afa158015612f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f5f91908101906141c3565b90925090506000612f7a8261149e878663ffffffff61216e16565b90507fe46714304b3de2a7b58afcc0bafe0a6deabd30a647332cb479124142fdb14b0b6509184e72a000821186836509184e72a000604051612fbf9493929190614b7d565b60405180910390a16509184e72a0001095945050505050565b60405161157d90849063a9059cbb60e01b90612ffa9086908690602401614b39565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526132f2565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906130715750600482015415155b15613109576130a86201518061149e846001015461309c8660040154426121f390919063ffffffff16565b9063ffffffff61216e16565b42600484015560028301549091508111156130c4575060028101545b8015612a015760038201546130df908263ffffffff61279c16565b600383015560028201546130f9908263ffffffff6121f316565b6002830155612a018484836133d7565b42600483015550505050565b600061314b6a07259756a8d6199800000061149e60155461309c8b6000015461309c8d60020154896121f390919063ffffffff16565b600288018390559050801561316757613167838787878561346e565b50505050505050565b604051612a219085906323b872dd60e01b90612ffa90879087908790602401614a9d565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a166080840152835191820184528882528101879052918201859052600091829182916131f991908e8888866137b8565b90935091506132088b836139dd565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391613241918f918f9188918a91600401614aed565b60206040518083038186803b15801561325957600080fd5b505afa15801561326d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061329191908101906141a5565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c86886040516132db93929190614b54565b60405180910390a499509950999650505050505050565b613304826001600160a01b0316613aab565b6133205760405162461bcd60e51b815260040161039090614ed1565b60006060836001600160a01b03168360405161333c919061495a565b6000604051808303816000865af19150503d8060008114613379576040519150601f19603f3d011682016040523d82523d6000602084013e61337e565b606091505b5091509150816133a05760405162461bcd60e51b815260040161039090614d31565b805115612a2157808060200190516133bb9190810190614052565b612a215760405162461bcd60e51b815260040161039090614ea1565b60006133fb68056bc75e2d6310000061149e6015548561216e90919063ffffffff16565b9050613408848483613ae4565b613422838561341d858563ffffffff6121f316565b6127c1565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a613461858563ffffffff6121f316565b604051612bef9190614ef1565b602f546002546001600160a01b038581166000908152603c6020908152604080832088851684529091528120549093929190911690156134d1576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b911661350f68056bc75e2d6310000061149e8c8b63ffffffff61216e16565b60405160240161352193929190614a9d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161355f919061495a565b600060405180830381855afa9150503d806000811461359a576040519150601f19603f3d011682016040523d82523d6000602084013e61359f565b606091505b509150915060018214156135b557602081015194505b84156137ac5760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926135f1929116908990600401614b39565b602060405180830381600087803b15801561360b57600080fd5b505af115801561361f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136439190810190614052565b50603854603f546040516000926001600160a01b03169161366a918e918a91602401614b54565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b1790525161369f919061495a565b6000604051808303816000865af19150503d80600081146136dc576040519150601f19603f3d011682016040523d82523d6000602084013e6136e1565b606091505b50509050801561375857601f546136fe908763ffffffff61279c16565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db21509161374b918b918d91614f27565b60405180910390a461256a565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916137a2918b918d91614f27565b60405180910390a4505b50505050505050505050565b845160009081901515806137cf5750602087015115155b6137eb5760405162461bcd60e51b815260040161039090614e41565b60208701516137fc57865160208801525b6020870151875111156138215760405162461bcd60e51b815260040161039090614d81565b6000806000876138de5760408a015161389d5785156138525761384b8a60005b6020020151613b65565b9050613866565b6138638a60005b6020020151613b95565b90505b80156138985760808b01518b5161388991908b908e60015b602002015185613bb9565b895161389590826121f3565b8a525b6138de565b85156138b5576138ae8a6002613841565b90506138c3565b6138c08a6002613859565b90505b80156138de5760408a01516138d8908261279c565b60408b01525b8651156138fd5760405162461bcd60e51b815260040161039090614e91565b6139078b8b613cfd565b60408c0151919450925061395357895182146139355760405162461bcd60e51b815260040161039090614ec1565b801561394e5761394b828263ffffffff61279c16565b91505b6139cd565b60208a01518211156139775760405162461bcd60e51b815260040161039090614d41565b60408a015183101561399b5760405162461bcd60e51b815260040161039090614cf1565b80156139cd5760808b015160208c01516139ba91908b908e600061387e565b6139ca838263ffffffff6121f316565b92505b5090999098509650505050505050565b602954801561157d57602d546000906001600160a01b0385811691161415613a06575081613a8b565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea90613a389087908790600401614b39565b60206040518083038186803b158015613a5057600080fd5b505afa158015613a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a8891908101906141a5565b90505b81811115612a215760405162461bcd60e51b815260040161039090614d91565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612040575050151592915050565b801561157d576001600160a01b038216600090815260166020526040902054613b13908263ffffffff61279c16565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af6358790612824908590614ef1565b60006121ab68056bc75e2d63100000613b89603e548561216e90919063ffffffff16565b9063ffffffff613e0f16565b60006121ab68056bc75e2d63100000613b896018548561216e90919063ffffffff16565b808015613cf5576001600160a01b038681166000908152603360205260409020541615613c63576001600160a01b03808716600090815260336020526040902054613c079116878684613e51565b5050613c60613c2e68056bc75e2d6310000061149e6039548561216e90919063ffffffff16565b611e70613c5368056bc75e2d6310000061149e6020548761216e90919063ffffffff16565b849063ffffffff6121f316565b90505b6001600160a01b038416600090815260196020526040902054613c8c908263ffffffff61279c16565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613ce0908690614ef1565b60405180910390a4613cf5868686868661346e565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613d44979296919592949293919291602401614a2a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613d9690849061495a565b600060405180830381855af49150503d8060008114613dd1576040519150601f19603f3d011682016040523d82523d6000602084013e613dd6565b606091505b509250905080613df85760405162461bcd60e51b815260040161039090614eb1565b602082015193506040820151925050509250929050565b60006121a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eea565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613e8c908990899089908990600401614a5f565b6040805180830381600087803b158015613ea557600080fd5b505af1158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613edd91908101906141c3565b9097909650945050505050565b60008183613f0b5760405162461bcd60e51b81526004016103909190614cd0565b5083613f19575060006129c9565b6000836001860381613f2757fe5b0460010195945050505050565b80356121ab8161508b565b80356121ab8161509f565b80516121ab8161509f565b80356121ab816150a8565b80356121ab816150b1565b600082601f830112613f7c57600080fd5b8135613f8f613f8a82614fd1565b614faa565b91508082526020830160208301858383011115613fab57600080fd5b613fb6838284615049565b50505092915050565b80516121ab816150a8565b600060208284031215613fdc57600080fd5b60006120408484613f34565b60008060408385031215613ffb57600080fd5b60006140078585613f34565b925050602061401885828601613f34565b9150509250929050565b6000806040838503121561403557600080fd5b60006140418585613f34565b925050602061401885828601613f55565b60006020828403121561406457600080fd5b60006120408484613f4a565b60006020828403121561408257600080fd5b60006120408484613f55565b600080604083850312156140a157600080fd5b60006140078585613f55565b6000806000606084860312156140c257600080fd5b60006140ce8686613f55565b93505060206140df86828701613f34565b92505060406140f086828701613f55565b9150509250925092565b600080600080600060a0868803121561411257600080fd5b600061411e8888613f55565b955050602061412f88828901613f34565b945050604061414088828901613f55565b935050606061415188828901613f3f565b925050608086013567ffffffffffffffff81111561416e57600080fd5b61417a88828901613f6b565b9150509295509295909350565b60006020828403121561419957600080fd5b60006120408484613f60565b6000602082840312156141b757600080fd5b60006120408484613fbf565b600080604083850312156141d657600080fd5b60006141e28585613fbf565b925050602061401885828601613fbf565b6141fc81615037565b82525050565b6141fc8161500b565b6141fc81615016565b6141fc8161501b565b600061422882614ff9565b6142328185614ffd565b9350614242818560208601615055565b9290920192915050565b6141fc8161503e565b600061426082614ff9565b61426a8185615002565b935061427a818560208601615055565b61428381615081565b9093019392505050565b600061429a600683615002565b6514185d5cd95960d21b815260200192915050565b60006142bc601b83615002565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b60006142f5602683615002565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061433d601b83615002565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614376601083615002565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b60006143a2602083615002565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006143db601383615002565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b600061440a601783615002565b7f65786365737369766520736f7572636520616d6f756e74000000000000000000815260200192915050565b6000614443603a83615002565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b60006144a2601d83615002565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b60006144db601c83615002565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b6000614514600e83615002565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061453e601883615002565b7f696e73756666696369656e74206465737420616d6f756e740000000000000000815260200192915050565b6000614577602183615002565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006145ba600c83615002565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006145e2601283615002565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b6000614610600a83615002565b6939bbb0b81032b93937b960b11b815260200192915050565b6000614636601583615002565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b6000614667601283615002565b7106465706f736974416d6f756e74203d3d20360741b815260200192915050565b6000614695601483615002565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006146c5601083615002565b6f6e6f7468696e6720746f20636c6f736560801b815260200192915050565b60006146f1601483615002565b7306c6f616e436c6f7365416d6f756e74203d3d20360641b815260200192915050565b6000614721602e83615002565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b60006121ab600083614ffd565b600061477e600f83615002565b6e073776170416d6f756e74203d3d203608c1b815260200192915050565b60006147a9600e83615002565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b60006147d3600c83615002565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006147fb601b83615002565b7f636c6f7365416d6f756e74206973203020616674657220737761700000000000815260200192915050565b6000614834600d83615002565b6c696e76616c696420737461746560981b815260200192915050565b600061485d602a83615002565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006148a9600b83615002565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b60006148d0601683615002565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b6000614902601f83615002565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061493b601083615002565b6f3737ba1032b737bab3b41032ba3432b960811b815260200192915050565b60006129c9828461421d565b60006121ab82614764565b602081016121ab8284614202565b60e0810161498d828a6141f3565b61499a6020830189614202565b6149a76040830188614202565b6149b46060830187614214565b6149c16080830186614214565b6149ce60a0830185614214565b6149db60c0830184614214565b98975050505050505050565b604081016149f58285614202565b6129c96020830184614202565b60e08101614a10828a614202565b614a1d6020830189614202565b6149a760408301886141f3565b60e08101614a38828a614202565b614a456020830189614202565b614a526040830188614202565b6149b46060830187614202565b60808101614a6d8287614202565b614a7a6020830186614202565b614a876040830185614202565b614a946060830184614214565b95945050505050565b60608101614aab8286614202565b614ab86020830185614202565b6120406040830184614214565b60808101614ad38287614202565b614ae06020830186614202565b614a876040830185614214565b60a08101614afb8288614202565b614b086020830187614202565b614b156040830186614214565b614b226060830185614214565b614b2f6080830184614214565b9695505050505050565b60408101614b478285614202565b6129c96020830184614214565b60608101614b628286614202565b614ab86020830185614214565b602081016121ab828461420b565b60808101614b8b828761420b565b614ae06020830186614214565b6101008101614ba7828b614214565b614bb4602083018a61420b565b614bc16040830189614202565b614bce6060830188614202565b614bdb6080830187614202565b614be860a0830186614214565b614bf560c0830185614214565b614c0260e0830184614214565b9998505050505050505050565b6101808101614c1e828f614214565b614c2b602083018e614214565b614c38604083018d614214565b614c45606083018c61420b565b614c52608083018b614214565b614c5f60a083018a614214565b614c6c60c0830189614214565b614c7960e0830188614214565b614c87610100830187614214565b614c95610120830186614214565b614ca3610140830185614202565b614cb1610160830184614202565b9d9c50505050505050505050505050565b602081016121ab828461424c565b602080825281016121a88184614255565b602080825281016121ab8161428d565b602080825281016121ab816142af565b602080825281016121ab816142e8565b602080825281016121ab81614330565b602080825281016121ab81614369565b602080825281016121ab81614395565b602080825281016121ab816143ce565b602080825281016121ab816143fd565b602080825281016121ab81614436565b602080825281016121ab81614495565b602080825281016121ab816144ce565b602080825281016121ab81614507565b602080825281016121ab81614531565b602080825281016121ab8161456a565b602080825281016121ab816145ad565b602080825281016121ab816145d5565b602080825281016121ab81614603565b602080825281016121ab81614629565b602080825281016121ab8161465a565b602080825281016121ab81614688565b602080825281016121ab816146b8565b602080825281016121ab816146e4565b602080825281016121ab81614714565b602080825281016121ab81614771565b602080825281016121ab8161479c565b602080825281016121ab816147c6565b602080825281016121ab816147ee565b602080825281016121ab81614827565b602080825281016121ab81614850565b602080825281016121ab8161489c565b602080825281016121ab816148c3565b602080825281016121ab816148f5565b602080825281016121ab8161492e565b602081016121ab8284614214565b60608101614f0d8286614214565b614f1a6020830185614214565b6120406040830184614202565b60608101614b628286614214565b60a08101614f438288614214565b614b086020830187614214565b60c08101614f5e8289614214565b614f6b6020830188614214565b614f786040830187614214565b614f856060830186614214565b614f926080830185614214565b614f9f60a0830184614214565b979650505050505050565b60405181810167ffffffffffffffff81118282101715614fc957600080fd5b604052919050565b600067ffffffffffffffff821115614fe857600080fd5b506020601f91909101601f19160190565b5190565b919050565b90815260200190565b60006121ab8261502b565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b60006121ab825b60006121ab8261500b565b82818337506000910152565b60005b83811015615070578181015183820152602001615058565b83811115612a215750506000910152565b601f01601f191690565b6150948161500b565b8114610f9657600080fd5b61509481615016565b6150948161501b565b6150948161501e56fea365627a7a72315820909f47cdbe6bcd7333144117f30f39bd528209d834828d4d83253fa4da74e9e76c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x60806040526004361061036b5760003560e01c80638f32d59b116101c6578063cd5d808d116100f7578063f0e085f511610095578063f6ddc8b31161006f578063f6ddc8b31461099a578063f706b1f2146109af578063f851a440146109c4578063f8de21d2146109d95761036b565b8063f0e085f514610950578063f2fde38b14610965578063f589a3e7146109855761036b565b8063d485045e116100d1578063d485045e146108f1578063e8f6276414610911578063edab119f14610926578063ee54a4ec1461093b5761036b565b8063cd5d808d146108a7578063d288208c146108c7578063d473c2da146108dc5761036b565b8063b7e1524111610164578063bdee453c1161013e578063bdee453c146107f9578063c4a9081514610819578063c4d66de814610851578063cb6eacd1146108735761036b565b8063b7e15241146107af578063b9cffa3e146107cf578063ba4861e9146107e45761036b565b8063acc04348116101a0578063acc0434814610743578063ae0a853014610758578063afe840091461076d578063b30643d91461078f5761036b565b80638f32d59b146106f957806392d894f81461070e578063959083d31461072e5761036b565b80634699f846116102a05780637420ca3e1161023e5780637a8faeb8116102185780637a8faeb81461069a5780638456cb59146106af5780638da5cb5b146106c45780638dc48ba5146106d95761036b565b80637420ca3e1461065b578063742e67981461067057806378d849ed146106855761036b565b8063574442cc1161027a578063574442cc146105d557806362fff3f6146105ea57806368c4ac261461061b5780636e6637301461063b5761036b565b80634699f8461461057c5780634f28cac214610591578063569fc1fb146105a65761036b565b80632f4707641161030d578063366f513b116102e7578063366f513b146104fa5780633fca506e1461051c5780634115a2b61461053c5780634203e3951461055c5761036b565b80632f470764146104a55780633432423c146104ba5780633452d2d4146104da5761036b565b80631b7bde74116103495780631b7bde7414610416578063218b39c61461044357806324cc5749146104635780632a324027146104905761036b565b8063065d810f146103995780630676c1b7146103d457806317548b79146103f6575b34801561037757600080fd5b5060405162461bcd60e51b815260040161039090614e11565b60405180910390fd5b3480156103a557600080fd5b506103b96103b4366004614022565b6109f9565b6040516103cb96959493929190614f50565b60405180910390f35b3480156103e057600080fd5b506103e9610a39565b6040516103cb9190614971565b34801561040257600080fd5b506103e9610411366004614187565b610a48565b34801561042257600080fd5b50610436610431366004613fe8565b610a63565b6040516103cb9190614ef1565b34801561044f57600080fd5b506103e961045e366004613fca565b610a80565b34801561046f57600080fd5b5061048361047e366004613fca565b610a9b565b6040516103cb9190614b6f565b34801561049c57600080fd5b50610436610ab0565b3480156104b157600080fd5b50610436610ab6565b3480156104c657600080fd5b506103b96104d5366004614022565b610abc565b3480156104e657600080fd5b506104366104f5366004613fca565b610afc565b61050d6105083660046140ad565b610b0e565b6040516103cb93929190614eff565b34801561052857600080fd5b50610436610537366004613fca565b610b7c565b34801561054857600080fd5b5061048361055736600461408e565b610b8e565b34801561056857600080fd5b50610436610577366004613fca565b610bae565b34801561058857600080fd5b50610436610bc0565b34801561059d57600080fd5b50610436610bc6565b3480156105b257600080fd5b506105c66105c1366004614070565b610bcc565b6040516103cb93929190614f27565b3480156105e157600080fd5b50610436610bed565b3480156105f657600080fd5b5061060a610605366004613fe8565b610bf3565b6040516103cb959493929190614f35565b34801561062757600080fd5b50610483610636366004613fca565b610c2d565b34801561064757600080fd5b506103e9610656366004613fca565b610c42565b34801561066757600080fd5b506103e9610c5d565b34801561067c57600080fd5b50610436610c6c565b34801561069157600080fd5b506103e9610c72565b3480156106a657600080fd5b50610436610c81565b3480156106bb57600080fd5b50610483610c87565b3480156106d057600080fd5b506103e9610c90565b3480156106e557600080fd5b506103e96106f4366004613fca565b610c9f565b34801561070557600080fd5b50610483610cba565b34801561071a57600080fd5b50610436610729366004613fca565b610ce0565b34801561073a57600080fd5b50610436610cf2565b34801561074f57600080fd5b50610436610cf8565b34801561076457600080fd5b50610436610cfe565b34801561077957600080fd5b50610782610d04565b6040516103cb9190614cc2565b34801561079b57600080fd5b506104366107aa366004613fca565b610d13565b3480156107bb57600080fd5b506104366107ca366004613fca565b610d25565b3480156107db57600080fd5b506103e9610d37565b3480156107f057600080fd5b506103e9610d46565b34801561080557600080fd5b50610436610814366004613fca565b610d55565b34801561082557600080fd5b50610839610834366004614070565b610d67565b6040516103cb9c9b9a99989796959493929190614c0f565b34801561085d57600080fd5b5061087161086c366004613fca565b610dd9565b005b34801561087f57600080fd5b5061089361088e366004614070565b610eae565b6040516103cb989796959493929190614b98565b3480156108b357600080fd5b506104366108c2366004613fe8565b610f00565b3480156108d357600080fd5b506103e9610f1d565b3480156108e857600080fd5b50610436610f2c565b3480156108fd57600080fd5b5061043661090c366004613fca565b610f32565b34801561091d57600080fd5b506103e9610f44565b34801561093257600080fd5b50610436610f53565b34801561094757600080fd5b50610436610f59565b34801561095c57600080fd5b50610436610f63565b34801561097157600080fd5b50610871610980366004613fca565b610f69565b34801561099157600080fd5b50610436610f99565b3480156109a657600080fd5b50610436610f9f565b3480156109bb57600080fd5b506103e9610fa5565b3480156109d057600080fd5b506103e9610fb4565b3480156109e557600080fd5b5061050d6109f43660046140fa565b610fc3565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b6000806000600160005414610b355760405162461bcd60e51b815260040161039090614e71565b6002600055603d5460ff1615610b5d5760405162461bcd60e51b815260040161039090614ce1565b610b68868686611044565b600160005591989097509095509350505050565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610cd1611503565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b610de1610cba565b610dfd5760405162461bcd60e51b815260040161039090614dc1565b63366f513b60e01b600081905260056020527ff4ddf72383625730676ae80f4e72796030e502d9e3dce442215377f640213bd6546001600160a01b031690610e459083611507565b610e56637c6f10e960e11b83611507565b6f098dec2dc86d8dee6d2dccee6aed2e8d60831b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6014546001600160a01b031681565b601b5481565b6509184e72a00081565b60285481565b610f71610cba565b610f8d5760405162461bcd60e51b815260040161039090614dc1565b610f9681611583565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6000806000600160005414610fea5760405162461bcd60e51b815260040161039090614e71565b6002600055603d5460ff16156110125760405162461bcd60e51b815260040161039090614ce1565b61102e8888888860405180602001604052806000815250611605565b6001600055919a90995090975095505050505050565b60008080836110655760405162461bcd60e51b815260040161039090614e01565b600060066000888152602001908152602001600020905060006007600083600101548152602001908152602001600020905061125c82604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508260405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050611f3f565b8160040154861161126d5785611273565b81600401545b9450600061143e83604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508360405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050888b611fda565b90508015611467576002820154600b840154611467916001600160a01b03908116911683612048565b826004015486141561147f57826005015494506114ad565b6114aa836004015461149e88866005015461216e90919063ffffffff16565b9063ffffffff6121b116565b94505b60038201546001600160a01b0316935084156114e85760058301546114d8908663ffffffff6121f316565b60058401556114e8848987612235565b6114f783838888600080612266565b50505093509350939050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156115625761155c600d6001600160e01b0319841663ffffffff61257716565b5061157f565b61157d600d6001600160e01b0319841663ffffffff6125bf16565b505b5050565b6001600160a01b0381166115a95760405162461bcd60e51b815260040161039090614d01565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008080856116265760405162461bcd60e51b815260040161039090614e51565b6000600660008a8152602001908152602001600020905060006007600083600101548152602001908152602001600020905061181d82604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508260405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050611f3f565b8160050154881161182e5787611834565b81600501545b9750600082600501548914806118475750875b15611a6e578260050154891461187b57611876836005015461149e8b866004015461216e90919063ffffffff16565b611881565b82600401545b9550856118a05760405162461bcd60e51b815260040161039090614e31565b611a6783604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508360405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815260200160058201548152602001600682015481525050888d611fda565b9050611a72565b5060005b600080611c3e85604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508560405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508d868e8e612680565b9d509850909250905082611e835781975084600401548214611c76576005850154611c739061149e8a8463ffffffff61216e16565b97505b87611c935760405162461bcd60e51b815260040161039090614e31565b611e5a85604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508560405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508a8f611fda565b9250611e7c83611e70898563ffffffff61279c16565b9063ffffffff6121f316565b9650611e87565b8192505b82611ea45760405162461bcd60e51b815260040161039090614e81565b8015611ec5576005850154611ebf908263ffffffff6121f316565b60058601555b6002840154600b860154611ee6916001600160a01b039081169116856127c1565b89611efe5760028401546001600160a01b0316611f0d565b60038401546001600160a01b03165b95508615611f2057611f20868d89612235565b611f2f85858a848f6001612266565b5050505050955095509592505050565b8160600151611f605760405162461bcd60e51b815260040161039090614e61565b8161014001516001600160a01b0316336001600160a01b03161480611fa0575081516000908152600a6020908152604080832033845290915290205460ff165b611fbc5760405162461bcd60e51b815260040161039090614dc1565b805161157f5760405162461bcd60e51b815260040161039090614df1565b60008281611fe9868884612831565b9050600081831061200257509081900390600090612020565b50600091908190039081156120205761202087606001518684612235565b801561203a5761203a8760600151896101600151836127c1565b50909150505b949350505050565b801561215057346120645761205f833384846129d0565b61214b565b602d546001600160a01b038481169116146120915760405162461bcd60e51b815260040161039090614d21565b803410156120b15760405162461bcd60e51b815260040161039090614ee1565b602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050506001600160a01b0383163014905061213757612137833084846129d0565b8034111561214b5761214b33823403612a27565b61157d565b341561157d5760405162461bcd60e51b815260040161039090614d21565b60008261217d575060006121ab565b8282028284828161218a57fe5b04146121a85760405162461bcd60e51b815260040161039090614db1565b90505b92915050565b60006121a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ac3565b60006121a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612afa565b801561157d57602d546001600160a01b038481169116141561225b5761214b8282612b26565b61157d8383836127c1565b6122708685612bfd565b60028054908601546003870154600489015460058a01546040516001600160a01b0395861695600095869586956060958a956317f8680960e11b956122be9581169416929190602401614ac5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122fc919061495a565b600060405180830381855afa9150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915060018214156123595760208101519350604081015192505b600086600281111561236757fe5b1480612375575060048b0154155b806123835750896005015484115b61239f5760405162461bcd60e51b815260040161039090614dd1565b61256a8a60405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508c604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508b8b878c8a8d612cd4565b5050505050505050505050565b60006125838383612e2d565b6125b757506001808301805480830180835560009283526020808420909201859055848352908590526040909120556121ab565b5060006121ab565b60006125cb8383612e2d565b156125b7576000828152602084905260409020546001840154600019918201910180821461264357600085600101828154811061260457fe5b906000526020600020015490508086600101848154811061262157fe5b6000918252602080832090910192909255918252869052604090206001830190555b6000848152602086905260408120556001850180548061265f57fe5b600190038181906000526020600020016000905590556001925050506121ab565b6000806000806000806126978c8c8c8c8c8c612e42565b9450909250905087156126fc57889550858211156126e3576126bf8b60600151878403612ed2565b156126df576126da8b606001518d6101400151888503612235565b6126e3565b8195505b808a116126f15760006126f5565b808a035b935061277c565b89811461271b5760405162461bcd60e51b815260040161039090614de1565b8b60a001518a141561273457889550888203935061277c565b8b608001518210612774578b6080015195508b60800151820393506127698b608001518d6101400151838f60a0015103612235565b5060a08b015161277c565b819550600093505b898111612789578961278b565b805b945050509650965096509692505050565b6000828201838110156121a85760405162461bcd60e51b815260040161039090614d11565b801561157d576127e16001600160a01b038416838363ffffffff612fd816565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516128249190614ef1565b60405180910390a3505050565b60006128468361016001518560600151613031565b82516000908152600c602090815260408083206101608701516001600160a01b039081168552600b845282852060608a0151909116855290925290912060e08501514290811115612898575060e08501515b6128b783876000015189606001518a608001518a610140015186613115565b600086608001518610156128e857608087015184546128e1919061149e908963ffffffff61216e16565b90506128ec565b5082545b83546128fe908263ffffffff6121f316565b84556001830154612915908263ffffffff6121f316565b600184015560e0870151600090612932908463ffffffff6121f316565b9050612944818363ffffffff61216e16565b9050612959816201518063ffffffff6121b116565b9050876080015187101561298657600185015461297c908263ffffffff6121f316565b600186015561298e565b600060018601555b83546129a0908863ffffffff6121f316565b845560028401548181116129b55760006129b9565b8181035b6002909501949094559450505050505b9392505050565b8015612a21576001600160a01b038316301415612a0657612a016001600160a01b038516838363ffffffff612fd816565b612a21565b612a216001600160a01b03851684848463ffffffff61317016565b50505050565b80471015612a475760405162461bcd60e51b815260040161039090614d71565b6000826001600160a01b031682604051612a6090614966565b60006040518083038185875af1925050503d8060008114612a9d576040519150601f19603f3d011682016040523d82523d6000602084013e612aa2565b606091505b505090508061157d5760405162461bcd60e51b815260040161039090614d61565b60008183612ae45760405162461bcd60e51b81526004016103909190614cd0565b506000838581612af057fe5b0495945050505050565b60008184841115612b1e5760405162461bcd60e51b81526004016103909190614cd0565b505050900390565b801561157f57602d546001600160a01b03164780831115612ba257604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d90612b6f9084870390600401614ef1565b600060405180830381600087803b158015612b8957600080fd5b505af1158015612b9d573d6000803e3d6000fd5b505050505b612bac8484612a27565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a185604051612bef9190614ef1565b60405180910390a350505050565b80612c1a5760405162461bcd60e51b815260040161039090614e21565b8160040154811415612cb65760006004830181905560038301805460ff1916905542600784015560028301558154612c5a90600f9063ffffffff6125bf16565b508154600b8301546001600160a01b03166000908152601160205260409020612c889163ffffffff6125bf16565b508154600a8301546001600160a01b0316600090815260126020526040902061155c9163ffffffff6125bf16565b6004820154612ccb908263ffffffff6121f316565b60048301555050565b6000816002811115612ce257fe5b1415612d5b5786600001518761016001516001600160a01b03168861014001516001600160a01b03167f6349c1a02ec126f7f4fc6e6837e1859006e90e9901635c442d29271e77b96fb6338c606001518d608001518c8c8c8b604051612d4e979695949392919061497f565b60405180910390a4612e23565b6001816002811115612d6957fe5b1415612e23578215612d9157612d8e6ec097ce7bc90715b34b9f1000000000846121b1565b92505b8115612db457612db16f4b3b4ca85a86c47a098a224000000000836121b1565b91505b86600001518761016001516001600160a01b03168861014001516001600160a01b03167f2ed7b29b4ca95cf3bb9a44f703872a66e6aa5e8f07b675fa9a5c124a1e5d73528b608001518c60600151338b8d8b8b604051612e1a9796959493929190614a02565b60405180910390a45b5050505050505050565b60009081526020919091526040902054151590565b6000806000612e7b896000015189608001518a606001518c61014001518b8e60a001518b612e71576000612e73565b8c5b60008c613194565b9194509250905085831015612ea25760405162461bcd60e51b815260040161039090614da1565b8860a00151821115612ec65760405162461bcd60e51b815260040161039090614d51565b96509650969350505050565b600254602d54604051630a7549df60e21b8152600092839283926001600160a01b03928316926329d5277c92612f10928a92909116906004016149e7565b604080518083038186803b158015612f2757600080fd5b505afa158015612f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f5f91908101906141c3565b90925090506000612f7a8261149e878663ffffffff61216e16565b90507fe46714304b3de2a7b58afcc0bafe0a6deabd30a647332cb479124142fdb14b0b6509184e72a000821186836509184e72a000604051612fbf9493929190614b7d565b60405180910390a16509184e72a0001095945050505050565b60405161157d90849063a9059cbb60e01b90612ffa9086908690602401614b39565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526132f2565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906130715750600482015415155b15613109576130a86201518061149e846001015461309c8660040154426121f390919063ffffffff16565b9063ffffffff61216e16565b42600484015560028301549091508111156130c4575060028101545b8015612a015760038201546130df908263ffffffff61279c16565b600383015560028201546130f9908263ffffffff6121f316565b6002830155612a018484836133d7565b42600483015550505050565b600061314b6a07259756a8d6199800000061149e60155461309c8b6000015461309c8d60020154896121f390919063ffffffff16565b600288018390559050801561316757613167838787878561346e565b50505050505050565b604051612a219085906323b872dd60e01b90612ffa90879087908790602401614a9d565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a166080840152835191820184528882528101879052918201859052600091829182916131f991908e8888866137b8565b90935091506132088b836139dd565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391613241918f918f9188918a91600401614aed565b60206040518083038186803b15801561325957600080fd5b505afa15801561326d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061329191908101906141a5565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c86886040516132db93929190614b54565b60405180910390a499509950999650505050505050565b613304826001600160a01b0316613aab565b6133205760405162461bcd60e51b815260040161039090614ed1565b60006060836001600160a01b03168360405161333c919061495a565b6000604051808303816000865af19150503d8060008114613379576040519150601f19603f3d011682016040523d82523d6000602084013e61337e565b606091505b5091509150816133a05760405162461bcd60e51b815260040161039090614d31565b805115612a2157808060200190516133bb9190810190614052565b612a215760405162461bcd60e51b815260040161039090614ea1565b60006133fb68056bc75e2d6310000061149e6015548561216e90919063ffffffff16565b9050613408848483613ae4565b613422838561341d858563ffffffff6121f316565b6127c1565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a613461858563ffffffff6121f316565b604051612bef9190614ef1565b602f546002546001600160a01b038581166000908152603c6020908152604080832088851684529091528120549093929190911690156134d1576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b911661350f68056bc75e2d6310000061149e8c8b63ffffffff61216e16565b60405160240161352193929190614a9d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161355f919061495a565b600060405180830381855afa9150503d806000811461359a576040519150601f19603f3d011682016040523d82523d6000602084013e61359f565b606091505b509150915060018214156135b557602081015194505b84156137ac5760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926135f1929116908990600401614b39565b602060405180830381600087803b15801561360b57600080fd5b505af115801561361f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136439190810190614052565b50603854603f546040516000926001600160a01b03169161366a918e918a91602401614b54565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b1790525161369f919061495a565b6000604051808303816000865af19150503d80600081146136dc576040519150601f19603f3d011682016040523d82523d6000602084013e6136e1565b606091505b50509050801561375857601f546136fe908763ffffffff61279c16565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db21509161374b918b918d91614f27565b60405180910390a461256a565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916137a2918b918d91614f27565b60405180910390a4505b50505050505050505050565b845160009081901515806137cf5750602087015115155b6137eb5760405162461bcd60e51b815260040161039090614e41565b60208701516137fc57865160208801525b6020870151875111156138215760405162461bcd60e51b815260040161039090614d81565b6000806000876138de5760408a015161389d5785156138525761384b8a60005b6020020151613b65565b9050613866565b6138638a60005b6020020151613b95565b90505b80156138985760808b01518b5161388991908b908e60015b602002015185613bb9565b895161389590826121f3565b8a525b6138de565b85156138b5576138ae8a6002613841565b90506138c3565b6138c08a6002613859565b90505b80156138de5760408a01516138d8908261279c565b60408b01525b8651156138fd5760405162461bcd60e51b815260040161039090614e91565b6139078b8b613cfd565b60408c0151919450925061395357895182146139355760405162461bcd60e51b815260040161039090614ec1565b801561394e5761394b828263ffffffff61279c16565b91505b6139cd565b60208a01518211156139775760405162461bcd60e51b815260040161039090614d41565b60408a015183101561399b5760405162461bcd60e51b815260040161039090614cf1565b80156139cd5760808b015160208c01516139ba91908b908e600061387e565b6139ca838263ffffffff6121f316565b92505b5090999098509650505050505050565b602954801561157d57602d546000906001600160a01b0385811691161415613a06575081613a8b565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea90613a389087908790600401614b39565b60206040518083038186803b158015613a5057600080fd5b505afa158015613a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a8891908101906141a5565b90505b81811115612a215760405162461bcd60e51b815260040161039090614d91565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612040575050151592915050565b801561157d576001600160a01b038216600090815260166020526040902054613b13908263ffffffff61279c16565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af6358790612824908590614ef1565b60006121ab68056bc75e2d63100000613b89603e548561216e90919063ffffffff16565b9063ffffffff613e0f16565b60006121ab68056bc75e2d63100000613b896018548561216e90919063ffffffff16565b808015613cf5576001600160a01b038681166000908152603360205260409020541615613c63576001600160a01b03808716600090815260336020526040902054613c079116878684613e51565b5050613c60613c2e68056bc75e2d6310000061149e6039548561216e90919063ffffffff16565b611e70613c5368056bc75e2d6310000061149e6020548761216e90919063ffffffff16565b849063ffffffff6121f316565b90505b6001600160a01b038416600090815260196020526040902054613c8c908263ffffffff61279c16565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613ce0908690614ef1565b60405180910390a4613cf5868686868661346e565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613d44979296919592949293919291602401614a2a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613d9690849061495a565b600060405180830381855af49150503d8060008114613dd1576040519150601f19603f3d011682016040523d82523d6000602084013e613dd6565b606091505b509250905080613df85760405162461bcd60e51b815260040161039090614eb1565b602082015193506040820151925050509250929050565b60006121a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eea565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613e8c908990899089908990600401614a5f565b6040805180830381600087803b158015613ea557600080fd5b505af1158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613edd91908101906141c3565b9097909650945050505050565b60008183613f0b5760405162461bcd60e51b81526004016103909190614cd0565b5083613f19575060006129c9565b6000836001860381613f2757fe5b0460010195945050505050565b80356121ab8161508b565b80356121ab8161509f565b80516121ab8161509f565b80356121ab816150a8565b80356121ab816150b1565b600082601f830112613f7c57600080fd5b8135613f8f613f8a82614fd1565b614faa565b91508082526020830160208301858383011115613fab57600080fd5b613fb6838284615049565b50505092915050565b80516121ab816150a8565b600060208284031215613fdc57600080fd5b60006120408484613f34565b60008060408385031215613ffb57600080fd5b60006140078585613f34565b925050602061401885828601613f34565b9150509250929050565b6000806040838503121561403557600080fd5b60006140418585613f34565b925050602061401885828601613f55565b60006020828403121561406457600080fd5b60006120408484613f4a565b60006020828403121561408257600080fd5b60006120408484613f55565b600080604083850312156140a157600080fd5b60006140078585613f55565b6000806000606084860312156140c257600080fd5b60006140ce8686613f55565b93505060206140df86828701613f34565b92505060406140f086828701613f55565b9150509250925092565b600080600080600060a0868803121561411257600080fd5b600061411e8888613f55565b955050602061412f88828901613f34565b945050604061414088828901613f55565b935050606061415188828901613f3f565b925050608086013567ffffffffffffffff81111561416e57600080fd5b61417a88828901613f6b565b9150509295509295909350565b60006020828403121561419957600080fd5b60006120408484613f60565b6000602082840312156141b757600080fd5b60006120408484613fbf565b600080604083850312156141d657600080fd5b60006141e28585613fbf565b925050602061401885828601613fbf565b6141fc81615037565b82525050565b6141fc8161500b565b6141fc81615016565b6141fc8161501b565b600061422882614ff9565b6142328185614ffd565b9350614242818560208601615055565b9290920192915050565b6141fc8161503e565b600061426082614ff9565b61426a8185615002565b935061427a818560208601615055565b61428381615081565b9093019392505050565b600061429a600683615002565b6514185d5cd95960d21b815260200192915050565b60006142bc601b83615002565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b60006142f5602683615002565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061433d601b83615002565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614376601083615002565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b60006143a2602083615002565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006143db601383615002565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b600061440a601783615002565b7f65786365737369766520736f7572636520616d6f756e74000000000000000000815260200192915050565b6000614443603a83615002565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b60006144a2601d83615002565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b60006144db601c83615002565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b6000614514600e83615002565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061453e601883615002565b7f696e73756666696369656e74206465737420616d6f756e740000000000000000815260200192915050565b6000614577602183615002565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006145ba600c83615002565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006145e2601283615002565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b6000614610600a83615002565b6939bbb0b81032b93937b960b11b815260200192915050565b6000614636601583615002565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b6000614667601283615002565b7106465706f736974416d6f756e74203d3d20360741b815260200192915050565b6000614695601483615002565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006146c5601083615002565b6f6e6f7468696e6720746f20636c6f736560801b815260200192915050565b60006146f1601483615002565b7306c6f616e436c6f7365416d6f756e74203d3d20360641b815260200192915050565b6000614721602e83615002565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b60006121ab600083614ffd565b600061477e600f83615002565b6e073776170416d6f756e74203d3d203608c1b815260200192915050565b60006147a9600e83615002565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b60006147d3600c83615002565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006147fb601b83615002565b7f636c6f7365416d6f756e74206973203020616674657220737761700000000000815260200192915050565b6000614834600d83615002565b6c696e76616c696420737461746560981b815260200192915050565b600061485d602a83615002565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006148a9600b83615002565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b60006148d0601683615002565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b6000614902601f83615002565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061493b601083615002565b6f3737ba1032b737bab3b41032ba3432b960811b815260200192915050565b60006129c9828461421d565b60006121ab82614764565b602081016121ab8284614202565b60e0810161498d828a6141f3565b61499a6020830189614202565b6149a76040830188614202565b6149b46060830187614214565b6149c16080830186614214565b6149ce60a0830185614214565b6149db60c0830184614214565b98975050505050505050565b604081016149f58285614202565b6129c96020830184614202565b60e08101614a10828a614202565b614a1d6020830189614202565b6149a760408301886141f3565b60e08101614a38828a614202565b614a456020830189614202565b614a526040830188614202565b6149b46060830187614202565b60808101614a6d8287614202565b614a7a6020830186614202565b614a876040830185614202565b614a946060830184614214565b95945050505050565b60608101614aab8286614202565b614ab86020830185614202565b6120406040830184614214565b60808101614ad38287614202565b614ae06020830186614202565b614a876040830185614214565b60a08101614afb8288614202565b614b086020830187614202565b614b156040830186614214565b614b226060830185614214565b614b2f6080830184614214565b9695505050505050565b60408101614b478285614202565b6129c96020830184614214565b60608101614b628286614202565b614ab86020830185614214565b602081016121ab828461420b565b60808101614b8b828761420b565b614ae06020830186614214565b6101008101614ba7828b614214565b614bb4602083018a61420b565b614bc16040830189614202565b614bce6060830188614202565b614bdb6080830187614202565b614be860a0830186614214565b614bf560c0830185614214565b614c0260e0830184614214565b9998505050505050505050565b6101808101614c1e828f614214565b614c2b602083018e614214565b614c38604083018d614214565b614c45606083018c61420b565b614c52608083018b614214565b614c5f60a083018a614214565b614c6c60c0830189614214565b614c7960e0830188614214565b614c87610100830187614214565b614c95610120830186614214565b614ca3610140830185614202565b614cb1610160830184614202565b9d9c50505050505050505050505050565b602081016121ab828461424c565b602080825281016121a88184614255565b602080825281016121ab8161428d565b602080825281016121ab816142af565b602080825281016121ab816142e8565b602080825281016121ab81614330565b602080825281016121ab81614369565b602080825281016121ab81614395565b602080825281016121ab816143ce565b602080825281016121ab816143fd565b602080825281016121ab81614436565b602080825281016121ab81614495565b602080825281016121ab816144ce565b602080825281016121ab81614507565b602080825281016121ab81614531565b602080825281016121ab8161456a565b602080825281016121ab816145ad565b602080825281016121ab816145d5565b602080825281016121ab81614603565b602080825281016121ab81614629565b602080825281016121ab8161465a565b602080825281016121ab81614688565b602080825281016121ab816146b8565b602080825281016121ab816146e4565b602080825281016121ab81614714565b602080825281016121ab81614771565b602080825281016121ab8161479c565b602080825281016121ab816147c6565b602080825281016121ab816147ee565b602080825281016121ab81614827565b602080825281016121ab81614850565b602080825281016121ab8161489c565b602080825281016121ab816148c3565b602080825281016121ab816148f5565b602080825281016121ab8161492e565b602081016121ab8284614214565b60608101614f0d8286614214565b614f1a6020830185614214565b6120406040830184614202565b60608101614b628286614214565b60a08101614f438288614214565b614b086020830187614214565b60c08101614f5e8289614214565b614f6b6020830188614214565b614f786040830187614214565b614f856060830186614214565b614f926080830185614214565b614f9f60a0830184614214565b979650505050505050565b60405181810167ffffffffffffffff81118282101715614fc957600080fd5b604052919050565b600067ffffffffffffffff821115614fe857600080fd5b506020601f91909101601f19160190565b5190565b919050565b90815260200190565b60006121ab8261502b565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b60006121ab825b60006121ab8261500b565b82818337506000910152565b60005b83811015615070578181015183820152602001615058565b83811115612a215750506000910152565b601f01601f191690565b6150948161500b565b8114610f9657600080fd5b61509481615016565b6150948161501b565b6150948161501e56fea365627a7a72315820909f47cdbe6bcd7333144117f30f39bd528209d834828d4d83253fa4da74e9e76c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
