{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanTokenLogicTest",
  "sourceName": "contracts/testhelpers/LoanTokenLogicTest.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "burner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loanAmount",
          "type": "uint256"
        }
      ],
      "name": "FlashBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "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": false,
          "internalType": "address[]",
          "name": "addresses",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "limits",
          "type": "uint256[]"
        }
      ],
      "name": "SetTransactionLimits",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetBorrow",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "_supplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "assetBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avgBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "baseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "burnAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "useLM",
          "type": "bool"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "redeemed",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "burnAmount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanAmountPaid",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        }
      ],
      "name": "checkPause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        }
      ],
      "name": "checkPriceDivergence",
      "outputs": [],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "checkpointPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "checkpointSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "collateralTokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "isTorqueLoans",
          "type": "bool[]"
        }
      ],
      "name": "disableLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "earlyAccessToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getBorrowAmountForDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getDepositAmountForBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getEstimatedMarginDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "getMarginBorrowAmountAndRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        }
      ],
      "name": "getMaxEscrowAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxEscrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kinkLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidityMiningAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "loanParamsIds",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "loanTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilBaseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilRateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTrade",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "affiliateReferrer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTradeAffiliate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "marketLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxScaleRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "useLM",
          "type": "bool"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minted",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "nextBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supplyAmount",
          "type": "uint256"
        }
      ],
      "name": "nextSupplyInterestRate",
      "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": "pauser",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "profitOf",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_baseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_rateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilBaseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilRateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_targetLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_kinkLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxScaleRate",
          "type": "uint256"
        }
      ],
      "name": "setDemandCurve",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "LMAddress",
          "type": "address"
        }
      ],
      "name": "setLiquidityMiningAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_pauser",
          "type": "address"
        }
      ],
      "name": "setPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "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"
            }
          ],
          "internalType": "struct LoanParamsStruct.LoanParams[]",
          "name": "loanParamsList",
          "type": "tuple[]"
        },
        {
          "internalType": "bool",
          "name": "areTorqueLoans",
          "type": "bool"
        }
      ],
      "name": "setupLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "targetLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "target_",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "name": "toggleFunctionPause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transactionLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052600160009081556200001e6001600160e01b036200007216565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076565b3390565b615ba380620000866000396000f3fe6080604052600436106103e45760003560e01c80637e37c08c11610208578063ca37e66611610118578063e3cded61116100ab578063ef2b0b391161007a578063ef2b0b3914610ace578063f2fde38b14610ae3578063f6b69f9914610b03578063f851a44014610b16578063ffa1ad7414610b2b576103e4565b8063e3cded6114610a4e578063e41b07e314610a6e578063e697d2ee14610a8e578063eebc508114610aae576103e4565b8063d759dbeb116100e7578063d759dbeb146109d9578063d8f06c83146109ee578063d97206a414610a0e578063dd62ed3e14610a2e576103e4565b8063ca37e66614610964578063cb926cb314610979578063d1a1beb414610999578063d65a5021146109b9576103e4565b80638fb807c51161019b5780639fd0506d1161016a5780639fd0506d146108da578063a9059cbb146108ef578063b9fe1a8f1461090f578063ba0e43bf1461092f578063be19421714610944576103e4565b80638fb807c51461087b57806395d89b41146108905780639bda3a98146108a55780639dc29fac146108ba576103e4565b80638d875e3c116101d75780638d875e3c1461081c5780638da5cb5b1461083c5780638ee6c4e6146108515780638f32d59b14610866576103e4565b80637e37c08c146107bd5780637ff9b596146107d2578063829b38f4146107e75780638325a1c014610807576103e4565b80632f6b600d11610303578063612ef80b1161029657806370a082311161026557806370a08231146107335780637288b3441461075357806376fd4fdf14610773578063797bf385146107935780637b7933b4146107a8576103e4565b8063612ef80b146106af578063631a3ef8146106c45780636b40cd40146106e4578063704b6c0214610713576103e4565b806340c10f19116102d257806340c10f191461064557806344a4a0031461066557806354198ce91461067a57806356e07d701461069a576103e4565b80632f6b600d146105d9578063313ce567146105ee5780633291c11a14610610578063330691ac14610630576103e4565b806318498b1d1161037b57806323b872dd1161034a57806323b872dd1461056557806328a02f19146105855780632d88af4a146105a65780632ea295fa146105c6576103e4565b806318498b1d146105045780631d0806ae146105265780631f68f20a1461053b57806320f6d07c14610550576103e4565b8063095ea7b3116103b7578063095ea7b31461048d57806309ec6b6b146104ba57806312416898146104cf57806318160ddd146104ef576103e4565b806304797930146103f357806306947a3a1461042957806306b3efd61461044b57806306fdde031461046b575b3480156103f057600080fd5b50005b3480156103ff57600080fd5b5061041361040e366004614ac6565b610b40565b604051610420919061573d565b60405180910390f35b34801561043557600080fd5b5061043e610ce9565b60405161042091906155b4565b34801561045757600080fd5b50610413610466366004614542565b610cf8565b34801561047757600080fd5b50610480610de4565b60405161042091906157bc565b34801561049957600080fd5b506104ad6104a8366004614605565b610e6f565b604051610420919061572f565b3480156104c657600080fd5b50610413610eda565b3480156104db57600080fd5b506104136104ea366004614a3b565b610eef565b3480156104fb57600080fd5b50610413610f1a565b34801561051057600080fd5b5061052461051f366004614b6a565b610f20565b005b34801561053257600080fd5b50610413610f63565b34801561054757600080fd5b50610413610f69565b34801561055c57600080fd5b50610413610f6f565b34801561057157600080fd5b506104ad6105803660046145b8565b610ffe565b610598610593366004614943565b6110c7565b6040516104209291906159bd565b3480156105b257600080fd5b506105246105c1366004614542565b6112ec565b6105986105d436600461479c565b611332565b3480156105e557600080fd5b5061043e611612565b3480156105fa57600080fd5b50610603611621565b60405161042091906159e6565b34801561061c57600080fd5b5061041361062b366004614a3b565b61162a565b34801561063c57600080fd5b5061041361163c565b34801561065157600080fd5b50610413610660366004614605565b611642565b34801561067157600080fd5b50610413611683565b34801561068657600080fd5b50610413610695366004614542565b611695565b3480156106a657600080fd5b50610413611736565b3480156106bb57600080fd5b5061041361173c565b3480156106d057600080fd5b506104136106df366004614ac6565b61176d565b3480156106f057600080fd5b506107046106ff366004614b09565b61190d565b604051610420939291906159cb565b34801561071f57600080fd5b5061052461072e366004614542565b611a1e565b34801561073f57600080fd5b5061041361074e366004614542565b611a64565b34801561075f57600080fd5b5061041361076e366004614a77565b611a7f565b34801561077f57600080fd5b5061041361078e366004614635565b611b62565b34801561079f57600080fd5b5061043e611c0d565b3480156107b457600080fd5b50610413611c21565b3480156107c957600080fd5b50610413611c27565b3480156107de57600080fd5b50610413611c2d565b3480156107f357600080fd5b50610413610802366004614a3b565b611c6b565b34801561081357600080fd5b50610413611ceb565b34801561082857600080fd5b50610598610837366004614a77565b611cf7565b34801561084857600080fd5b5061043e611d10565b34801561085d57600080fd5b5061043e611d1f565b34801561087257600080fd5b506104ad611d2e565b34801561088757600080fd5b50610413611d54565b34801561089c57600080fd5b50610480611d84565b3480156108b157600080fd5b5061043e611ddf565b3480156108c657600080fd5b506104136108d5366004614605565b611dee565b3480156108e657600080fd5b5061043e611e62565b3480156108fb57600080fd5b506104ad61090a366004614605565b611e71565b34801561091b57600080fd5b5061041361092a366004614a3b565b611e81565b34801561093b57600080fd5b50610413611e8c565b34801561095057600080fd5b506104ad61095f3660046149d2565b611e92565b34801561097057600080fd5b5061043e611f14565b34801561098557600080fd5b50610524610994366004614542565b611f23565b3480156109a557600080fd5b506104136109b4366004614635565b611f69565b3480156109c557600080fd5b506104136109d4366004614a3b565b611fb3565b3480156109e557600080fd5b50610413611fc6565b3480156109fa57600080fd5b50610524610a0936600461471a565b611fcc565b348015610a1a57600080fd5b50610524610a29366004614c66565b61219b565b348015610a3a57600080fd5b50610413610a4936600461457e565b6122a2565b348015610a5a57600080fd5b50610524610a69366004614a06565b6122cd565b348015610a7a57600080fd5b50610413610a89366004614542565b612372565b348015610a9a57600080fd5b50610524610aa9366004614678565b612384565b348015610aba57600080fd5b50610413610ac9366004614542565b612535565b348015610ada57600080fd5b50610413612550565b348015610aef57600080fd5b50610524610afe366004614542565b612556565b610598610b11366004614863565b612586565b348015610b2257600080fd5b5061043e612656565b348015610b3757600080fd5b50610413612665565b60008315610ce2576001600160a01b038216610b65576017546001600160a01b031691505b600060106000846001604051602001610b7f929190615540565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610bf0918a910161573d565b60206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c409190810190614a59565b60016040518663ffffffff1660e01b8152600401610c6295949392919061562e565b60206040518083038186803b158015610c7a57600080fd5b505afa158015610c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cb29190810190614a59565b9150610cc682610cc0611d54565b8661266a565b9350610cd491506126e39050565b821115610ce057600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d9357601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d4090309087906004016155d0565b60206040518083038186803b158015610d5857600080fd5b505afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d909190810190614a59565b90505b610ddb670de0b6b3a7640000610dcf610daa611c2d565b610dc385610db789611a64565b9063ffffffff61271916565b9063ffffffff61273e16565b9063ffffffff61277816565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e675780601f10610e3c57610100808354040283529160200191610e67565b820191906000526020600020905b815481529060010190602001808311610e4a57829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ec890869061573d565b60405180910390a35060015b92915050565b6000610ee96104ea60006127ba565b90505b90565b600080610efa610f6f565b90508015610f1457610f0c8184611a7f565b915050610ddf565b50919050565b60155490565b6000610f2e8686868661190d565b5091505081811015610f5b5760405162461bcd60e51b8152600401610f52906157cd565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610fae93309361010090920490911691016155d0565b60206040518083038186803b158015610fc657600080fd5b505afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ee99190810190614a59565b60165460405163115dd4b160e01b81526000916110bf918691869186916001600160a01b03169063115dd4b1906110399033906004016155c2565b60206040518083038186803b15801561105157600080fd5b505afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611089919081019061477e565b6110b6576001600160a01b03881660009081526014602090815260408083203384529091529020546110ba565b6000195b6127f4565b949350505050565b6000806001600054146110ec5760405162461bcd60e51b8152600401610f529061596d565b60026000556110f96129c7565b6111068989898988610f20565b6001600160a01b038616611123576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156111565760405162461bcd60e51b8152600401610f529061587d565b89158061116b5750336001600160a01b038616145b6111875760405162461bcd60e51b8152600401610f529061598d565b6001600160a01b038616600090815260126020526040902054156111ca576001600160a01b0386166000908152601260205260409020548711156111ca57600080fd5b60045461010090046001600160a01b03166000908152601260205260409020541561121b5760045461010090046001600160a01b031660009081526012602052604090205488111561121b57600080fd5b600061122887898b612a47565b9050806112475760405162461bcd60e51b8152600401610f52906158ad565b61124f614249565b611257614267565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a905261128f612c74565b6112a08c8260016020020151612d1a565b825260208201526112c16f4b3b4ca85a86c47a098a2240000000008d612778565b9b506112d38d60008e8c86868c612d69565b6001600055909e909d509b505050505050505050505050565b6112f4611d2e565b6113105760405162461bcd60e51b8152600401610f529061590d565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146113575760405162461bcd60e51b8152600401610f529061596d565b6002600055886113795760405162461bcd60e51b8152600401610f529061599d565b6113816129c7565b6001600160a01b038616600090815260126020526040902054156113c4576001600160a01b0386166000908152601260205260409020548711156113c457600080fd5b3415806113d057508634145b80156113e45750861515806113e457508915155b801561140b57506001600160a01b03861615158061140157503415155b8061140b57508915155b801561142757508915806114275750336001600160a01b038616145b6114435760405162461bcd60e51b8152600401610f529061583d565b6001600160a01b038616611460576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114935760405162461bcd60e51b8152600401610f52906157dd565b61149b612c74565b6114a3614249565b6114ab614267565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114e38b6114dd60006127ba565b8c61266a565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115fa8c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e600160405160200161154e929190615540565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b8152600401611592919061573d565b60206040518083038186803b1580156115aa57600080fd5b505afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e29190810190614a59565b8b868660405180602001604052806000815250612d69565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146116665760405162461bcd60e51b8152600401610f529061596d565b60026000556116758383612fc8565b90505b600160005592915050565b6000610ee9611690610f6f565b6130d4565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116ce929190615566565b604051602081830303815290604052805190602001209050610ddb8160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611718611c2d565b6001600160a01b03871660009081526011602052604090205461310c565b600a5481565b60008061174960006127ba565b90506000611755610f6f565b9050808211156117685790039050610eec565b505090565b60008315610ce257600061178385610cc0611d54565b9250505061178f6126e3565b8111610ce0576001600160a01b0383166117b2576017546001600160a01b031692505b6000601060008560016040516020016117cc929190615540565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061190493600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d991611842918c910161573d565b60206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118929190810190614a59565b60016040518663ffffffff1660e01b81526004016118b495949392919061562e565b60206040518083038186803b1580156118cc57600080fd5b505afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610db79190810190614a59565b92505050610ce2565b600080806001600160a01b03841661192e576017546001600160a01b031693505b600061193b858789612a47565b90506119478882612d1a565b90945091506119546126e3565b84111561196b575060009250829150819050611a14565b61197b878563ffffffff61271916565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119c09361010090930416918a918d918d918a918d9101615670565b60206040518083038186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a109190810190614a59565b9250505b9450945094915050565b611a26611d2e565b611a425760405162461bcd60e51b8152600401610f529061590d565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a905750828210155b15610ed457611b5b701d6329f1c35ca4bfabb9f5610000000000610dcf611b4568056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b409190810190614a59565b613166565b610dc3611b5288886131a8565b610dc3896130d4565b9050610ed4565b6000600160005414611b865760405162461bcd60e51b8152600401610f529061596d565b60026000558115611ba157611b9a836131da565b9050611bad565b611baa83613380565b90505b8015611c0157611c01600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b815250613537565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c5457611c50613597565b9150505b611c65611c60826127ba565b613663565b91505090565b600080611c8a61016d610dcf601c600b5461273e90919063ffffffff16565b90506000611ca768056bc75e2d631000008363ffffffff61316616565b90506000611cc468056bc75e2d63100000610dcf84610dc361173c565b9050611ce285610dcf83670de0b6b3a764000063ffffffff61273e16565b95945050505050565b6000610ee96000613692565b600080611d048484612d1a565b915091505b9250929050565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d456136e8565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d7b57611d77613597565b9150505b611c65816127ba565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e675780601f10610e3c57610100808354040283529160200191610e67565b6018546001600160a01b031681565b6000600160005414611e125760405162461bcd60e51b8152600401610f529061596d565b6002600055611e2082613380565b9050801561167857611678600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613537565b601b546001600160a01b031681565b6000610ce23384846000196127f4565b6000610ed482613692565b60095481565b60008082604051602001611ea691906155a8565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611ef392919061558c565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611f2b611d2e565b611f475760405162461bcd60e51b8152600401610f529061590d565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611f8d5760405162461bcd60e51b8152600401610f529061596d565b60026000558115611fa957611fa284846136ec565b9050611c01565b611fa28484612fc8565b6000610ed46104ea83610db760006127ba565b60075481565b611fd4611d2e565b80611fe957506019546001600160a01b031633145b6120055760405162461bcd60e51b8152600401610f529061590d565b60045460609061010090046001600160a01b031660005b845181101561208f578185828151811061203257fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083612064576224ea00612067565b60005b62ffffff1685828151811061207857fe5b602090810291909101015160e0015260010161201c565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e906120c090879060040161571e565b600060405180830381600087803b1580156120da57600080fd5b505af11580156120ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261211691908101906146e6565b915060005b82518110156121945782818151811061213057fe5b60200260200101516010600087848151811061214857fe5b60200260200101516080015187604051602001612166929190615540565b60408051601f198184030181529181528151602092830120835290820192909252016000205560010161211b565b5050505050565b6121a3611d2e565b806121b857506019546001600160a01b031633145b6121d45760405162461bcd60e51b8152600401610f529061590d565b68056bc75e2d631000006121ee878963ffffffff61271916565b111561220c5760405162461bcd60e51b8152600401610f529061589d565b68056bc75e2d63100000612226858763ffffffff61271916565b11156122445760405162461bcd60e51b8152600401610f529061589d565b68056bc75e2d631000008311158015612266575068056bc75e2d631000008211155b6122825760405162461bcd60e51b8152600401610f52906158cd565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146122f75760405162461bcd60e51b8152600401610f529061595d565b60008260405160200161230a91906155a8565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f260405160200161235292919061558c565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b61238c611d2e565b806123a157506019546001600160a01b031633145b6123bd5760405162461bcd60e51b8152600401610f529061590d565b8281146123dc5760405162461bcd60e51b8152600401610f529061582d565b604080518481526020808602820101909152606090848015612408578160200160208202803883390190505b50905060005b848110156124cb57600086868381811061242457fe5b90506020020160206124399190810190614542565b85858481811061244557fe5b905060200201602061245a9190810190614760565b60405160200161246b929190615540565b6040516020818303038152906040528051906020012060001c905060106000828152602001908152602001600020548383815181106124a657fe5b602090810291909101810191909152600091825260109052604081205560010161240e565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a906124fc90849060040161570d565b600060405180830381600087803b15801561251657600080fd5b505af115801561252a573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b61255e611d2e565b61257a5760405162461bcd60e51b8152600401610f529061590d565b61258381613775565b50565b6000806001600160a01b038516156125fd5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf448906125ca908a9089906004016155d0565b600060405180830381600087803b1580156125e457600080fd5b505af11580156125f8573d6000803e3d6000fd5b505050505b6126438c8c8c8c8c8c8c8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c792505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061267986866137f7565b92506126c66126ae670de0b6b3a7640000611b406b0a3098c68eb9427db8000000610dcf83610dc38a8c63ffffffff61273e16565b610dcf88670de0b6b3a764000063ffffffff61273e16565b90506126d8818763ffffffff61316616565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610fae913091016155b4565b600082820183811015610ce25760405162461bcd60e51b8152600401610f529061580d565b60008261274d57506000610ed4565b8282028284828161275a57fe5b0414610ce25760405162461bcd60e51b8152600401610f52906158fd565b6000610ce283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061390d565b6000601554600014610ddf57600c54806127e4576127e16127d9610f6f565b610db76126e3565b90505b610f0c818463ffffffff61271916565b60006000198214612850576040805180820190915260028152610c4d60f21b602082015261282b908390859063ffffffff61394416565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166128765760405162461bcd60e51b8152600401610f52906157ed565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b928201929092529091906128c1908390879063ffffffff61394416565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506128fa828863ffffffff61271916565b6001600160a01b0389166000908152601360205260408120829055909150612920611c2d565b601c549091506001600160a01b038b811691161480159061294f5750601c546001600160a01b038a8116911614155b1561296c576129608a868684613970565b61296c89848484613970565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516129af919061573d565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612a0792919061558c565b6040516020818303038152906040528051906020012090506000815490508015612a435760405162461bcd60e51b8152600401610f529061590d565b5050565b808215610ce257600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a9f57600080fd5b505afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ad79190810190614560565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612b10938c9361010090910490921691016155d0565b604080518083038186803b158015612b2757600080fd5b505afa158015612b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b5f9190810190614a96565b9150915081600014158015612b7357508015155b612b8f5760405162461bcd60e51b8152600401610f529061594d565b6000612ba582610dcf888663ffffffff61273e16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612be8936101009004909116918d91889101615606565b60206040518083038186803b158015612c0057600080fd5b505afa158015612c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c389190810190614a59565b9050868114612c5857612c5587610dcf848463ffffffff61273e16565b91505b612c68828663ffffffff61271916565b98975050505050505050565b600f5442906001600160581b038083169116146125835760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612cc493610100900490911691016155b4565b600060405180830381600087803b158015612cde57600080fd5b505af1158015612cf2573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612d3a670de0b6b3a7640000610dcf868863ffffffff61273e16565b9050612d4f81612d4a60006127ba565b6137f7565b9150612d5f826224ea0083613a26565b9250509250929050565b600080612d746129c7565b612d7c6126e3565b602085015111801590612d9b575060208501516001600160a01b031615155b612db75760405162461bcd60e51b8152600401610f529061586d565b60408501516001600160a01b0316612ddd5760208501516001600160a01b031660408601525b6000612deb8787878c613a87565b60208601516060870151919250612e029190612719565b60608601528815612e22576060850151612e1c908a613166565b60608601525b60008915612e2e575060015b6000601060008a84604051602001612e47929190615540565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612ebf979695949392919061574b565b60408051808303818588803b158015612ed757600080fd5b505af1158015612eeb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612f109190810190614a96565b608089015260208801819052612f385760405162461bcd60e51b8152600401610f52906158bd565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612f6b916004016155b4565b600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b5050505086600160058110612faa57fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612fd483613cbc565b601c5491935091506000906001600160a01b03161561307257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061301f90309089906004016155d0565b60206040518083038186803b15801561303757600080fd5b505afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061306f9190810190614a59565b90505b6001600160a01b03851660009081526013602052604081205461309b908363ffffffff61271916565b905060006130af828663ffffffff61271916565b90506130bd87868887613dc6565b506130ca87838387613970565b5050505092915050565b60008115610ddf5760006130e6613597565b509050610f0c83610dcf61016d610dc38568056bc75e2d6310000063ffffffff61273e16565b60008161311b575060006110bf565b508354611ce28161315a670de0b6b3a764000061314e88613142898963ffffffff613ee716565b9063ffffffff613f2d16565b9063ffffffff613f9816565b9063ffffffff613ffc16565b6000610ce283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613944565b600082158015906131b857508115155b15610ed457611b5b82610dcf8568056bc75e2d6310000063ffffffff61273e16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa69061321190309033906004016155eb565b60206040518083038186803b15801561322957600080fd5b505afa15801561323d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132619190810190614a59565b90508261327d61327033611a64565b839063ffffffff61271916565b101561329b5760405162461bcd60e51b8152600401610f529061584d565b801561337b578281101561331457601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906132dd903090859033906004016156e5565b600060405180830381600087803b1580156132f757600080fd5b505af115801561330b573d6000803e3d6000fd5b5050505061337b565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613348903090879033906004016156e5565b600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b610ddb835b60008161339f5760405162461bcd60e51b8152600401610f529061591d565b6133a833611a64565b8211156133dc5760001982146133d05760405162461bcd60e51b8152600401610f52906158dd565b6133d933611a64565b91505b6133e4612c74565b60006133f3611c6060006127ba565b90506000613413670de0b6b3a7640000610dcf868563ffffffff61273e16565b9050600061341f6126e3565b9050819350808411156134445760405162461bcd60e51b8152600401610f529061585d565b601c546000906001600160a01b0316156134dd57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061348a90309033906004016155eb565b60206040518083038186803b1580156134a257600080fd5b505afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134da9190810190614a59565b90505b336000908152601360205260408120546134fd908363ffffffff61271916565b90506000613511828963ffffffff61316616565b905061351f33898989614042565b5061352c33838389613970565b505050505050919050565b60405161359190859063a9059cbb60e01b9061355990879087906024016156ca565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614167565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb0936135d9933093610100900490911691016155d0565b60c06040518083038186803b1580156135f157600080fd5b505afa158015613605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136299190810190614bdf565b509196509450925061365c915068056bc75e2d631000009050610dcf61364f8285613166565b859063ffffffff61273e16565b9150509091565b6015546000908061367657600e54610ddb565b610ddb81610dcf85670de0b6b3a764000063ffffffff61273e16565b60008082156136db57600f54426001600160581b039081169116146136bd576136b9613597565b9150505b60006136cb82610db76126e3565b9050808411156136d9578093505b505b610ddb83612d4a836127ba565b3390565b60006136f88383612fc8565b601c549091506137149084906001600160a01b031683806127f4565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c49061374790869085906004016156ca565b600060405180830381600087803b15801561376157600080fd5b505af11580156130ca573d6000803e3d6000fd5b6001600160a01b03811661379b5760405162461bcd60e51b8152600401610f52906157fd565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008061380f61380985610db7610f6f565b846131a8565b600554600654600954600a54600b5494955060009485949392919082881015613836578297505b818811156138a957968190039668056bc75e2d631000008290038089111561385c578098505b61387d68056bc75e2d63100000610dcf85610dc3898b63ffffffff61271916565b96506138a187610db783610dcf613894878d613166565b8e9063ffffffff61273e16565b9950506138ff565b6138ca85610db768056bc75e2d63100000610dcf8c8963ffffffff61273e16565b985093955085936138e1848663ffffffff61271916565b9550868910156138f3578698506138ff565b858911156138ff578598505b505050505050505092915050565b6000818361392e5760405162461bcd60e51b8152600401610f5291906157bc565b50600083858161393a57fe5b0495945050505050565b600081848411156139685760405162461bcd60e51b8152600401610f5291906157bc565b505050900390565b6040516000906139a69086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb690602001615566565b604051602081830303815290604052805190602001209050600083600014156139d25760009250613a03565b8415613a03576001600160a01b038616600090815260116020526040902054613a009083908790869061310c565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b600080613a416301e13380610dcf878763ffffffff61273e16565b90506000613a5e68056bc75e2d631000008363ffffffff61316616565b9050613a7d81610dcf8668056bc75e2d6310000063ffffffff61273e16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613add5760405162461bcd60e51b8152600401610f529061592d565b3496508715613b3b57613b0185858a60405180602001604052806000815250613537565b87831115613b3657601654604080516020810190915260008152613b369187916001600160a01b03909116908b870390613537565b613b70565b601654604080518082019091526002815261323760f01b6020820152613b709187916001600160a01b03909116908690613537565b8015613c7357856001600160a01b03168b6001600160a01b0316148015613b9657508615155b8015613ba25750808710155b15613c3c57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613be257600080fd5b505af1158015613bf6573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613c3294508f93506001600160a01b0390911691508490613537565b8087039650613c73565b601654604080518082019091526004815263191c16b160e11b6020820152613c73918d9133916001600160a01b0316908590614225565b8115613cae57601654604080518082019091526002815261323960f01b6020820152613cae91879133916001600160a01b0316908690614225565b505050505050949350505050565b60008082613cdc5760405162461bcd60e51b8152600401610f52906158ed565b613ce4612c74565b613cf1611c6060006127ba565b9050613d0f81610dcf85670de0b6b3a764000063ffffffff61273e16565b915034613d5757613d52600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b815250614225565b613dc1565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613dee5760405162461bcd60e51b8152600401610f52906157ed565b6001600160a01b038516600090815260136020526040812054613e17908663ffffffff61271916565b6001600160a01b0387166000908152601360205260409020819055601554909150613e48908663ffffffff61271916565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613e8a908890889088906159cb565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613ed6919061573d565b60405180910390a395945050505050565b6000818303818312801590613efc5750838113155b80613f115750600083128015613f1157508381135b610ce25760405162461bcd60e51b8152600401610f529061597d565b600082613f3c57506000610ed4565b82600019148015613f505750600160ff1b82145b15613f6d5760405162461bcd60e51b8152600401610f529061593d565b82820282848281613f7a57fe5b0514610ce25760405162461bcd60e51b8152600401610f529061593d565b600081613fb75760405162461bcd60e51b8152600401610f52906159ad565b81600019148015613fcb5750600160ff1b83145b15613fe85760405162461bcd60e51b8152600401610f529061588d565b6000828481613ff357fe5b05949350505050565b60008282018183128015906140115750838112155b80614026575060008312801561402657508381125b610ce25760405162461bcd60e51b8152600401610f529061581d565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b0387166000908152601390915291822054829161408a9190879063ffffffff61394416565b9050600a81116140ab576140a4858263ffffffff61271916565b9450600090505b6001600160a01b03861660009081526013602052604090208190556015546140d9908663ffffffff61316616565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449061411b908890889088906159cb565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613ed6919061573d565b60006060846001600160a01b03168460405161418391906155a8565b6000604051808303816000865af19150503d80600081146141c0576040519150601f19603f3d011682016040523d82523d6000602084013e6141c5565b606091505b50915091508183906141ea5760405162461bcd60e51b8152600401610f5291906157bc565b508051156121945780806020019051614206919081019061477e565b8390610f5b5760405162461bcd60e51b8152600401610f5291906157bc565b6040516121949086906323b872dd60e01b9061355990889088908890602401615606565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610ed481615b3a565b8051610ed481615b3a565b60008083601f8401126142ad57600080fd5b5081356001600160401b038111156142c457600080fd5b602083019150836020820283011115611d0957600080fd5b600082601f8301126142ed57600080fd5b81516143006142fb82615a1a565b6159f4565b9150818183526020840193506020810190508385602084028201111561432557600080fd5b60005b838110156130ca578161433b88826143e6565b8452506020928301929190910190600101614328565b600082601f83011261436257600080fd5b81356143706142fb82615a1a565b915081818352602084019350602081019050838561010084028201111561439657600080fd5b60005b838110156130ca57816143ac8882614481565b8452506020909201916101009190910190600101614399565b8035610ed481615b4e565b8051610ed481615b4e565b8035610ed481615b57565b8051610ed481615b57565b60008083601f84011261440357600080fd5b5081356001600160401b0381111561441a57600080fd5b602083019150836001820283011115611d0957600080fd5b600082601f83011261444357600080fd5b81356144516142fb82615a3a565b9150808252602083016020830185838301111561446d57600080fd5b614478838284615ac0565b50505092915050565b6000610100828403121561449457600080fd5b61449f6101006159f4565b905060006144ad84846143db565b82525060206144be848483016143c5565b60208301525060406144d284828501614285565b60408301525060606144e684828501614285565b60608301525060806144fa84828501614285565b60808301525060a061450e848285016143db565b60a08301525060c0614522848285016143db565b60c08301525060e0614536848285016143db565b60e08301525092915050565b60006020828403121561455457600080fd5b60006110bf8484614285565b60006020828403121561457257600080fd5b60006110bf8484614290565b6000806040838503121561459157600080fd5b600061459d8585614285565b92505060206145ae85828601614285565b9150509250929050565b6000806000606084860312156145cd57600080fd5b60006145d98686614285565b93505060206145ea86828701614285565b92505060406145fb868287016143db565b9150509250925092565b6000806040838503121561461857600080fd5b60006146248585614285565b92505060206145ae858286016143db565b60008060006060848603121561464a57600080fd5b60006146568686614285565b9350506020614667868287016143db565b92505060406145fb868287016143c5565b6000806000806040858703121561468e57600080fd5b84356001600160401b038111156146a457600080fd5b6146b08782880161429b565b945094505060208501356001600160401b038111156146ce57600080fd5b6146da8782880161429b565b95989497509550505050565b6000602082840312156146f857600080fd5b81516001600160401b0381111561470e57600080fd5b6110bf848285016142dc565b6000806040838503121561472d57600080fd5b82356001600160401b0381111561474357600080fd5b61474f85828601614351565b92505060206145ae858286016143c5565b60006020828403121561477257600080fd5b60006110bf84846143c5565b60006020828403121561479057600080fd5b60006110bf84846143d0565b600080600080600080600080610100898b0312156147b957600080fd5b60006147c58b8b6143db565b98505060206147d68b828c016143db565b97505060406147e78b828c016143db565b96505060606147f88b828c016143db565b95505060806148098b828c01614285565b94505060a061481a8b828c01614285565b93505060c061482b8b828c01614285565b92505060e08901356001600160401b0381111561484757600080fd5b6148538b828c01614432565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561488357600080fd5b600061488f8d8d6143db565b9a505060206148a08d828e016143db565b99505060406148b18d828e016143db565b98505060606148c28d828e016143db565b97505060806148d38d828e01614285565b96505060a06148e48d828e01614285565b95505060c06148f58d828e016143db565b94505060e06149068d828e01614285565b9350506101008b01356001600160401b0381111561492357600080fd5b61492f8d828e016143f1565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561496057600080fd5b600061496c8b8b6143db565b985050602061497d8b828c016143db565b975050604061498e8b828c016143db565b965050606061499f8b828c016143db565b95505060806149b08b828c01614285565b94505060a06149c18b828c01614285565b93505060c061482b8b828c016143db565b6000602082840312156149e457600080fd5b81356001600160401b038111156149fa57600080fd5b6110bf84828501614432565b60008060408385031215614a1957600080fd5b82356001600160401b03811115614a2f57600080fd5b61474f85828601614432565b600060208284031215614a4d57600080fd5b60006110bf84846143db565b600060208284031215614a6b57600080fd5b60006110bf84846143e6565b60008060408385031215614a8a57600080fd5b600061462485856143db565b60008060408385031215614aa957600080fd5b6000614ab585856143e6565b92505060206145ae858286016143e6565b600080600060608486031215614adb57600080fd5b6000614ae786866143db565b9350506020614af8868287016143db565b92505060406145fb86828701614285565b60008060008060808587031215614b1f57600080fd5b6000614b2b87876143db565b9450506020614b3c878288016143db565b9350506040614b4d878288016143db565b9250506060614b5e87828801614285565b91505092959194509250565b600080600080600060a08688031215614b8257600080fd5b6000614b8e88886143db565b9550506020614b9f888289016143db565b9450506040614bb0888289016143db565b9350506060614bc188828901614285565b9250506080614bd2888289016143db565b9150509295509295909350565b60008060008060008060c08789031215614bf857600080fd5b6000614c0489896143e6565b9650506020614c1589828a016143e6565b9550506040614c2689828a016143e6565b9450506060614c3789828a016143e6565b9350506080614c4889828a016143e6565b92505060a0614c5989828a016143e6565b9150509295509295509295565b600080600080600080600060e0888a031215614c8157600080fd5b6000614c8d8a8a6143db565b9750506020614c9e8a828b016143db565b9650506040614caf8a828b016143db565b9550506060614cc08a828b016143db565b9450506080614cd18a828b016143db565b93505060a0614ce28a828b016143db565b92505060c0614cf38a828b016143db565b91505092959891949750929550565b6000614d0e8383614d46565b505060200190565b6000614d0e8383614eb9565b6000614d2e83836154a0565b50506101000190565b614d4081615aaf565b82525050565b614d4081615a80565b614d40614d5b82615a80565b615af8565b614d6981615a67565b614d738184610ddf565b9250614d7e82610eec565b8060005b83811015610f5b578151614d968782614d02565b9650614da183615a61565b925050600101614d82565b6000614db782615a6d565b614dc18185615a77565b9350614dcc83615a61565b8060005b83811015614dfa578151614de48882614d16565b9750614def83615a61565b925050600101614dd0565b509495945050505050565b6000614e1082615a6d565b614e1a8185615a77565b9350614e2583615a61565b8060005b83811015614dfa578151614e3d8882614d22565b9750614e4883615a61565b925050600101614e29565b614e5c81615a71565b614e668184610ddf565b9250614e7182610eec565b8060005b83811015610f5b578151614e898782614d16565b9650614e9483615a61565b925050600101614e75565b614d4081615a8b565b614d40614eb482615a8b565b615b03565b614d4081610eec565b614d40614ece82610eec565b610eec565b614d40614ece82615a90565b6000614eea82615a6d565b614ef48185615a77565b9350614f04818560208601615acc565b614f0d81615b24565b9093019392505050565b6000614f2282615a6d565b614f2c8185610ddf565b9350614f3c818560208601615acc565b9290920192915050565b6000614f53600c83615a77565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614f7b600283615a77565b61031360f41b815260200192915050565b6000614f99600283615a77565b61313560f01b815260200192915050565b6000614fb7602683615a77565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614fff601b83615a77565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000615038602183615a77565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061507b600e83615a77565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b60006150a5600183615a77565b603760f81b815260200192915050565b60006150c2601283615a77565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006150f0600283615a77565b61333760f01b815260200192915050565b600061510e600283615a77565b610c8d60f21b815260200192915050565b600061512c600283615a77565b61313160f01b815260200192915050565b600061514a602183615a77565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061518d601583615a77565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b60006151be600283615a77565b61189960f11b815260200192915050565b60006151dc600283615a77565b61323560f01b815260200192915050565b60006151fa600f83615a77565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b6000615225600283615a77565b61199960f11b815260200192915050565b6000615243600283615a77565b61313760f01b815260200192915050565b6000615261602183615a77565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006152a4600c83615a77565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006152cc600283615a77565b61313960f01b815260200192915050565b60006152ea600283615a77565b61191b60f11b815260200192915050565b6000615308602783615a77565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615351601d83615a77565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b600061538a600a83615a77565b6937b7363ca830bab9b2b960b11b815260200192915050565b60006153b0600c83615a77565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006153d8602483615a77565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b600061541e601883615a77565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b6000615457600183615a77565b601b60f91b815260200192915050565b6000615474602083615a77565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906154b28482614eb9565b5060208201516154c56020850182614e9f565b5060408201516154d86040850182614d46565b5060608201516154eb6060850182614d46565b5060808201516154fe6080850182614d46565b5060a082015161551160a0850182614eb9565b5060c082015161552460c0850182614eb9565b5060e082015161359160e0850182614eb9565b614d4081615aa9565b600061554c8285614d4f565b60148201915061555c8284614ea8565b5060010192915050565b60006155728285614d4f565b6014820191506155828284614ec2565b5060200192915050565b60006155988285614ed3565b6004820191506155828284614ec2565b6000610ce28284614f17565b60208101610ed48284614d46565b60208101610ed48284614d37565b604081016155de8285614d46565b610ce26020830184614d46565b604081016155f98285614d46565b610ce26020830184614d37565b606081016156148286614d46565b6156216020830185614d46565b6110bf6040830184614eb9565b60a0810161563c8288614d46565b6156496020830187614d46565b6156566040830186614eb9565b6156636060830185614eb9565b613a7d6080830184614e9f565b60c0810161567e8289614d46565b61568b6020830188614d46565b6156986040830187614eb9565b6156a56060830186614eb9565b6156b26080830185614eb9565b6156bf60a0830184614eb9565b979650505050505050565b604081016156d88285614d46565b610ce26020830184614eb9565b606081016156f38286614d46565b6157006020830185614eb9565b6110bf6040830184614d37565b60208082528101610ce28184614dac565b60208082528101610ce28184614e05565b60208101610ed48284614e9f565b60208101610ed48284614eb9565b6101c0810161575a828a614eb9565b6157676020830189614eb9565b6157746040830188614e9f565b6157816060830187614eb9565b61578e6080830186614d60565b61579c610100830185614e53565b8181036101a08301526157af8184614edf565b9998505050505050505050565b60208082528101610ce28184614edf565b60208082528101610ed481614f46565b60208082528101610ed481614f6e565b60208082528101610ed481614f8c565b60208082528101610ed481614faa565b60208082528101610ed481614ff2565b60208082528101610ed48161502b565b60208082528101610ed48161506e565b60208082528101610ed481615098565b60208082528101610ed4816150b5565b60208082528101610ed4816150e3565b60208082528101610ed481615101565b60208082528101610ed48161511f565b60208082528101610ed48161513d565b60208082528101610ed481615180565b60208082528101610ed4816151b1565b60208082528101610ed4816151cf565b60208082528101610ed4816151ed565b60208082528101610ed481615218565b60208082528101610ed481615236565b60208082528101610ed481615254565b60208082528101610ed481615297565b60208082528101610ed4816152bf565b60208082528101610ed4816152dd565b60208082528101610ed4816152fb565b60208082528101610ed481615344565b60208082528101610ed48161537d565b60208082528101610ed4816153a3565b60208082528101610ed4816153cb565b60208082528101610ed481615411565b60208082528101610ed48161544a565b60208082528101610ed481615467565b604081016156d88285614eb9565b606081016159d98286614eb9565b6156216020830185614eb9565b60208101610ed48284615537565b6040518181016001600160401b0381118282101715615a1257600080fd5b604052919050565b60006001600160401b03821115615a3057600080fd5b5060209081020190565b60006001600160401b03821115615a5057600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610ed482615a9d565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610ed4826000610ed482615a80565b82818337506000910152565b60005b83811015615ae7578181015183820152602001615acf565b838111156135915750506000910152565b6000610ed482615b0e565b6000610ed482615b19565b6000610ed482615b34565b6000610ed482615b2e565b601f01601f191690565b60f81b90565b60601b90565b615b4381615a80565b811461258357600080fd5b615b4381615a8b565b615b4381610eec56fea365627a7a72315820b1119067289ba830ac5e34407071c22d97663395cb09deb2a30fb0a7c9bf9bd86c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103e45760003560e01c80637e37c08c11610208578063ca37e66611610118578063e3cded61116100ab578063ef2b0b391161007a578063ef2b0b3914610ace578063f2fde38b14610ae3578063f6b69f9914610b03578063f851a44014610b16578063ffa1ad7414610b2b576103e4565b8063e3cded6114610a4e578063e41b07e314610a6e578063e697d2ee14610a8e578063eebc508114610aae576103e4565b8063d759dbeb116100e7578063d759dbeb146109d9578063d8f06c83146109ee578063d97206a414610a0e578063dd62ed3e14610a2e576103e4565b8063ca37e66614610964578063cb926cb314610979578063d1a1beb414610999578063d65a5021146109b9576103e4565b80638fb807c51161019b5780639fd0506d1161016a5780639fd0506d146108da578063a9059cbb146108ef578063b9fe1a8f1461090f578063ba0e43bf1461092f578063be19421714610944576103e4565b80638fb807c51461087b57806395d89b41146108905780639bda3a98146108a55780639dc29fac146108ba576103e4565b80638d875e3c116101d75780638d875e3c1461081c5780638da5cb5b1461083c5780638ee6c4e6146108515780638f32d59b14610866576103e4565b80637e37c08c146107bd5780637ff9b596146107d2578063829b38f4146107e75780638325a1c014610807576103e4565b80632f6b600d11610303578063612ef80b1161029657806370a082311161026557806370a08231146107335780637288b3441461075357806376fd4fdf14610773578063797bf385146107935780637b7933b4146107a8576103e4565b8063612ef80b146106af578063631a3ef8146106c45780636b40cd40146106e4578063704b6c0214610713576103e4565b806340c10f19116102d257806340c10f191461064557806344a4a0031461066557806354198ce91461067a57806356e07d701461069a576103e4565b80632f6b600d146105d9578063313ce567146105ee5780633291c11a14610610578063330691ac14610630576103e4565b806318498b1d1161037b57806323b872dd1161034a57806323b872dd1461056557806328a02f19146105855780632d88af4a146105a65780632ea295fa146105c6576103e4565b806318498b1d146105045780631d0806ae146105265780631f68f20a1461053b57806320f6d07c14610550576103e4565b8063095ea7b3116103b7578063095ea7b31461048d57806309ec6b6b146104ba57806312416898146104cf57806318160ddd146104ef576103e4565b806304797930146103f357806306947a3a1461042957806306b3efd61461044b57806306fdde031461046b575b3480156103f057600080fd5b50005b3480156103ff57600080fd5b5061041361040e366004614ac6565b610b40565b604051610420919061573d565b60405180910390f35b34801561043557600080fd5b5061043e610ce9565b60405161042091906155b4565b34801561045757600080fd5b50610413610466366004614542565b610cf8565b34801561047757600080fd5b50610480610de4565b60405161042091906157bc565b34801561049957600080fd5b506104ad6104a8366004614605565b610e6f565b604051610420919061572f565b3480156104c657600080fd5b50610413610eda565b3480156104db57600080fd5b506104136104ea366004614a3b565b610eef565b3480156104fb57600080fd5b50610413610f1a565b34801561051057600080fd5b5061052461051f366004614b6a565b610f20565b005b34801561053257600080fd5b50610413610f63565b34801561054757600080fd5b50610413610f69565b34801561055c57600080fd5b50610413610f6f565b34801561057157600080fd5b506104ad6105803660046145b8565b610ffe565b610598610593366004614943565b6110c7565b6040516104209291906159bd565b3480156105b257600080fd5b506105246105c1366004614542565b6112ec565b6105986105d436600461479c565b611332565b3480156105e557600080fd5b5061043e611612565b3480156105fa57600080fd5b50610603611621565b60405161042091906159e6565b34801561061c57600080fd5b5061041361062b366004614a3b565b61162a565b34801561063c57600080fd5b5061041361163c565b34801561065157600080fd5b50610413610660366004614605565b611642565b34801561067157600080fd5b50610413611683565b34801561068657600080fd5b50610413610695366004614542565b611695565b3480156106a657600080fd5b50610413611736565b3480156106bb57600080fd5b5061041361173c565b3480156106d057600080fd5b506104136106df366004614ac6565b61176d565b3480156106f057600080fd5b506107046106ff366004614b09565b61190d565b604051610420939291906159cb565b34801561071f57600080fd5b5061052461072e366004614542565b611a1e565b34801561073f57600080fd5b5061041361074e366004614542565b611a64565b34801561075f57600080fd5b5061041361076e366004614a77565b611a7f565b34801561077f57600080fd5b5061041361078e366004614635565b611b62565b34801561079f57600080fd5b5061043e611c0d565b3480156107b457600080fd5b50610413611c21565b3480156107c957600080fd5b50610413611c27565b3480156107de57600080fd5b50610413611c2d565b3480156107f357600080fd5b50610413610802366004614a3b565b611c6b565b34801561081357600080fd5b50610413611ceb565b34801561082857600080fd5b50610598610837366004614a77565b611cf7565b34801561084857600080fd5b5061043e611d10565b34801561085d57600080fd5b5061043e611d1f565b34801561087257600080fd5b506104ad611d2e565b34801561088757600080fd5b50610413611d54565b34801561089c57600080fd5b50610480611d84565b3480156108b157600080fd5b5061043e611ddf565b3480156108c657600080fd5b506104136108d5366004614605565b611dee565b3480156108e657600080fd5b5061043e611e62565b3480156108fb57600080fd5b506104ad61090a366004614605565b611e71565b34801561091b57600080fd5b5061041361092a366004614a3b565b611e81565b34801561093b57600080fd5b50610413611e8c565b34801561095057600080fd5b506104ad61095f3660046149d2565b611e92565b34801561097057600080fd5b5061043e611f14565b34801561098557600080fd5b50610524610994366004614542565b611f23565b3480156109a557600080fd5b506104136109b4366004614635565b611f69565b3480156109c557600080fd5b506104136109d4366004614a3b565b611fb3565b3480156109e557600080fd5b50610413611fc6565b3480156109fa57600080fd5b50610524610a0936600461471a565b611fcc565b348015610a1a57600080fd5b50610524610a29366004614c66565b61219b565b348015610a3a57600080fd5b50610413610a4936600461457e565b6122a2565b348015610a5a57600080fd5b50610524610a69366004614a06565b6122cd565b348015610a7a57600080fd5b50610413610a89366004614542565b612372565b348015610a9a57600080fd5b50610524610aa9366004614678565b612384565b348015610aba57600080fd5b50610413610ac9366004614542565b612535565b348015610ada57600080fd5b50610413612550565b348015610aef57600080fd5b50610524610afe366004614542565b612556565b610598610b11366004614863565b612586565b348015610b2257600080fd5b5061043e612656565b348015610b3757600080fd5b50610413612665565b60008315610ce2576001600160a01b038216610b65576017546001600160a01b031691505b600060106000846001604051602001610b7f929190615540565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610bf0918a910161573d565b60206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c409190810190614a59565b60016040518663ffffffff1660e01b8152600401610c6295949392919061562e565b60206040518083038186803b158015610c7a57600080fd5b505afa158015610c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cb29190810190614a59565b9150610cc682610cc0611d54565b8661266a565b9350610cd491506126e39050565b821115610ce057600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d9357601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d4090309087906004016155d0565b60206040518083038186803b158015610d5857600080fd5b505afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d909190810190614a59565b90505b610ddb670de0b6b3a7640000610dcf610daa611c2d565b610dc385610db789611a64565b9063ffffffff61271916565b9063ffffffff61273e16565b9063ffffffff61277816565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e675780601f10610e3c57610100808354040283529160200191610e67565b820191906000526020600020905b815481529060010190602001808311610e4a57829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ec890869061573d565b60405180910390a35060015b92915050565b6000610ee96104ea60006127ba565b90505b90565b600080610efa610f6f565b90508015610f1457610f0c8184611a7f565b915050610ddf565b50919050565b60155490565b6000610f2e8686868661190d565b5091505081811015610f5b5760405162461bcd60e51b8152600401610f52906157cd565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610fae93309361010090920490911691016155d0565b60206040518083038186803b158015610fc657600080fd5b505afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ee99190810190614a59565b60165460405163115dd4b160e01b81526000916110bf918691869186916001600160a01b03169063115dd4b1906110399033906004016155c2565b60206040518083038186803b15801561105157600080fd5b505afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611089919081019061477e565b6110b6576001600160a01b03881660009081526014602090815260408083203384529091529020546110ba565b6000195b6127f4565b949350505050565b6000806001600054146110ec5760405162461bcd60e51b8152600401610f529061596d565b60026000556110f96129c7565b6111068989898988610f20565b6001600160a01b038616611123576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156111565760405162461bcd60e51b8152600401610f529061587d565b89158061116b5750336001600160a01b038616145b6111875760405162461bcd60e51b8152600401610f529061598d565b6001600160a01b038616600090815260126020526040902054156111ca576001600160a01b0386166000908152601260205260409020548711156111ca57600080fd5b60045461010090046001600160a01b03166000908152601260205260409020541561121b5760045461010090046001600160a01b031660009081526012602052604090205488111561121b57600080fd5b600061122887898b612a47565b9050806112475760405162461bcd60e51b8152600401610f52906158ad565b61124f614249565b611257614267565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a905261128f612c74565b6112a08c8260016020020151612d1a565b825260208201526112c16f4b3b4ca85a86c47a098a2240000000008d612778565b9b506112d38d60008e8c86868c612d69565b6001600055909e909d509b505050505050505050505050565b6112f4611d2e565b6113105760405162461bcd60e51b8152600401610f529061590d565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146113575760405162461bcd60e51b8152600401610f529061596d565b6002600055886113795760405162461bcd60e51b8152600401610f529061599d565b6113816129c7565b6001600160a01b038616600090815260126020526040902054156113c4576001600160a01b0386166000908152601260205260409020548711156113c457600080fd5b3415806113d057508634145b80156113e45750861515806113e457508915155b801561140b57506001600160a01b03861615158061140157503415155b8061140b57508915155b801561142757508915806114275750336001600160a01b038616145b6114435760405162461bcd60e51b8152600401610f529061583d565b6001600160a01b038616611460576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114935760405162461bcd60e51b8152600401610f52906157dd565b61149b612c74565b6114a3614249565b6114ab614267565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114e38b6114dd60006127ba565b8c61266a565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115fa8c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e600160405160200161154e929190615540565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b8152600401611592919061573d565b60206040518083038186803b1580156115aa57600080fd5b505afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e29190810190614a59565b8b868660405180602001604052806000815250612d69565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146116665760405162461bcd60e51b8152600401610f529061596d565b60026000556116758383612fc8565b90505b600160005592915050565b6000610ee9611690610f6f565b6130d4565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116ce929190615566565b604051602081830303815290604052805190602001209050610ddb8160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611718611c2d565b6001600160a01b03871660009081526011602052604090205461310c565b600a5481565b60008061174960006127ba565b90506000611755610f6f565b9050808211156117685790039050610eec565b505090565b60008315610ce257600061178385610cc0611d54565b9250505061178f6126e3565b8111610ce0576001600160a01b0383166117b2576017546001600160a01b031692505b6000601060008560016040516020016117cc929190615540565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061190493600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d991611842918c910161573d565b60206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118929190810190614a59565b60016040518663ffffffff1660e01b81526004016118b495949392919061562e565b60206040518083038186803b1580156118cc57600080fd5b505afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610db79190810190614a59565b92505050610ce2565b600080806001600160a01b03841661192e576017546001600160a01b031693505b600061193b858789612a47565b90506119478882612d1a565b90945091506119546126e3565b84111561196b575060009250829150819050611a14565b61197b878563ffffffff61271916565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119c09361010090930416918a918d918d918a918d9101615670565b60206040518083038186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a109190810190614a59565b9250505b9450945094915050565b611a26611d2e565b611a425760405162461bcd60e51b8152600401610f529061590d565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a905750828210155b15610ed457611b5b701d6329f1c35ca4bfabb9f5610000000000610dcf611b4568056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b409190810190614a59565b613166565b610dc3611b5288886131a8565b610dc3896130d4565b9050610ed4565b6000600160005414611b865760405162461bcd60e51b8152600401610f529061596d565b60026000558115611ba157611b9a836131da565b9050611bad565b611baa83613380565b90505b8015611c0157611c01600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b815250613537565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c5457611c50613597565b9150505b611c65611c60826127ba565b613663565b91505090565b600080611c8a61016d610dcf601c600b5461273e90919063ffffffff16565b90506000611ca768056bc75e2d631000008363ffffffff61316616565b90506000611cc468056bc75e2d63100000610dcf84610dc361173c565b9050611ce285610dcf83670de0b6b3a764000063ffffffff61273e16565b95945050505050565b6000610ee96000613692565b600080611d048484612d1a565b915091505b9250929050565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d456136e8565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d7b57611d77613597565b9150505b611c65816127ba565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e675780601f10610e3c57610100808354040283529160200191610e67565b6018546001600160a01b031681565b6000600160005414611e125760405162461bcd60e51b8152600401610f529061596d565b6002600055611e2082613380565b9050801561167857611678600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613537565b601b546001600160a01b031681565b6000610ce23384846000196127f4565b6000610ed482613692565b60095481565b60008082604051602001611ea691906155a8565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611ef392919061558c565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611f2b611d2e565b611f475760405162461bcd60e51b8152600401610f529061590d565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611f8d5760405162461bcd60e51b8152600401610f529061596d565b60026000558115611fa957611fa284846136ec565b9050611c01565b611fa28484612fc8565b6000610ed46104ea83610db760006127ba565b60075481565b611fd4611d2e565b80611fe957506019546001600160a01b031633145b6120055760405162461bcd60e51b8152600401610f529061590d565b60045460609061010090046001600160a01b031660005b845181101561208f578185828151811061203257fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083612064576224ea00612067565b60005b62ffffff1685828151811061207857fe5b602090810291909101015160e0015260010161201c565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e906120c090879060040161571e565b600060405180830381600087803b1580156120da57600080fd5b505af11580156120ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261211691908101906146e6565b915060005b82518110156121945782818151811061213057fe5b60200260200101516010600087848151811061214857fe5b60200260200101516080015187604051602001612166929190615540565b60408051601f198184030181529181528151602092830120835290820192909252016000205560010161211b565b5050505050565b6121a3611d2e565b806121b857506019546001600160a01b031633145b6121d45760405162461bcd60e51b8152600401610f529061590d565b68056bc75e2d631000006121ee878963ffffffff61271916565b111561220c5760405162461bcd60e51b8152600401610f529061589d565b68056bc75e2d63100000612226858763ffffffff61271916565b11156122445760405162461bcd60e51b8152600401610f529061589d565b68056bc75e2d631000008311158015612266575068056bc75e2d631000008211155b6122825760405162461bcd60e51b8152600401610f52906158cd565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146122f75760405162461bcd60e51b8152600401610f529061595d565b60008260405160200161230a91906155a8565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f260405160200161235292919061558c565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b61238c611d2e565b806123a157506019546001600160a01b031633145b6123bd5760405162461bcd60e51b8152600401610f529061590d565b8281146123dc5760405162461bcd60e51b8152600401610f529061582d565b604080518481526020808602820101909152606090848015612408578160200160208202803883390190505b50905060005b848110156124cb57600086868381811061242457fe5b90506020020160206124399190810190614542565b85858481811061244557fe5b905060200201602061245a9190810190614760565b60405160200161246b929190615540565b6040516020818303038152906040528051906020012060001c905060106000828152602001908152602001600020548383815181106124a657fe5b602090810291909101810191909152600091825260109052604081205560010161240e565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a906124fc90849060040161570d565b600060405180830381600087803b15801561251657600080fd5b505af115801561252a573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b61255e611d2e565b61257a5760405162461bcd60e51b8152600401610f529061590d565b61258381613775565b50565b6000806001600160a01b038516156125fd5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf448906125ca908a9089906004016155d0565b600060405180830381600087803b1580156125e457600080fd5b505af11580156125f8573d6000803e3d6000fd5b505050505b6126438c8c8c8c8c8c8c8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c792505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061267986866137f7565b92506126c66126ae670de0b6b3a7640000611b406b0a3098c68eb9427db8000000610dcf83610dc38a8c63ffffffff61273e16565b610dcf88670de0b6b3a764000063ffffffff61273e16565b90506126d8818763ffffffff61316616565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610fae913091016155b4565b600082820183811015610ce25760405162461bcd60e51b8152600401610f529061580d565b60008261274d57506000610ed4565b8282028284828161275a57fe5b0414610ce25760405162461bcd60e51b8152600401610f52906158fd565b6000610ce283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061390d565b6000601554600014610ddf57600c54806127e4576127e16127d9610f6f565b610db76126e3565b90505b610f0c818463ffffffff61271916565b60006000198214612850576040805180820190915260028152610c4d60f21b602082015261282b908390859063ffffffff61394416565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166128765760405162461bcd60e51b8152600401610f52906157ed565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b928201929092529091906128c1908390879063ffffffff61394416565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506128fa828863ffffffff61271916565b6001600160a01b0389166000908152601360205260408120829055909150612920611c2d565b601c549091506001600160a01b038b811691161480159061294f5750601c546001600160a01b038a8116911614155b1561296c576129608a868684613970565b61296c89848484613970565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516129af919061573d565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612a0792919061558c565b6040516020818303038152906040528051906020012090506000815490508015612a435760405162461bcd60e51b8152600401610f529061590d565b5050565b808215610ce257600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a9f57600080fd5b505afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ad79190810190614560565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612b10938c9361010090910490921691016155d0565b604080518083038186803b158015612b2757600080fd5b505afa158015612b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b5f9190810190614a96565b9150915081600014158015612b7357508015155b612b8f5760405162461bcd60e51b8152600401610f529061594d565b6000612ba582610dcf888663ffffffff61273e16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612be8936101009004909116918d91889101615606565b60206040518083038186803b158015612c0057600080fd5b505afa158015612c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c389190810190614a59565b9050868114612c5857612c5587610dcf848463ffffffff61273e16565b91505b612c68828663ffffffff61271916565b98975050505050505050565b600f5442906001600160581b038083169116146125835760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612cc493610100900490911691016155b4565b600060405180830381600087803b158015612cde57600080fd5b505af1158015612cf2573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612d3a670de0b6b3a7640000610dcf868863ffffffff61273e16565b9050612d4f81612d4a60006127ba565b6137f7565b9150612d5f826224ea0083613a26565b9250509250929050565b600080612d746129c7565b612d7c6126e3565b602085015111801590612d9b575060208501516001600160a01b031615155b612db75760405162461bcd60e51b8152600401610f529061586d565b60408501516001600160a01b0316612ddd5760208501516001600160a01b031660408601525b6000612deb8787878c613a87565b60208601516060870151919250612e029190612719565b60608601528815612e22576060850151612e1c908a613166565b60608601525b60008915612e2e575060015b6000601060008a84604051602001612e47929190615540565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612ebf979695949392919061574b565b60408051808303818588803b158015612ed757600080fd5b505af1158015612eeb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612f109190810190614a96565b608089015260208801819052612f385760405162461bcd60e51b8152600401610f52906158bd565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612f6b916004016155b4565b600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b5050505086600160058110612faa57fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612fd483613cbc565b601c5491935091506000906001600160a01b03161561307257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061301f90309089906004016155d0565b60206040518083038186803b15801561303757600080fd5b505afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061306f9190810190614a59565b90505b6001600160a01b03851660009081526013602052604081205461309b908363ffffffff61271916565b905060006130af828663ffffffff61271916565b90506130bd87868887613dc6565b506130ca87838387613970565b5050505092915050565b60008115610ddf5760006130e6613597565b509050610f0c83610dcf61016d610dc38568056bc75e2d6310000063ffffffff61273e16565b60008161311b575060006110bf565b508354611ce28161315a670de0b6b3a764000061314e88613142898963ffffffff613ee716565b9063ffffffff613f2d16565b9063ffffffff613f9816565b9063ffffffff613ffc16565b6000610ce283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613944565b600082158015906131b857508115155b15610ed457611b5b82610dcf8568056bc75e2d6310000063ffffffff61273e16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa69061321190309033906004016155eb565b60206040518083038186803b15801561322957600080fd5b505afa15801561323d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132619190810190614a59565b90508261327d61327033611a64565b839063ffffffff61271916565b101561329b5760405162461bcd60e51b8152600401610f529061584d565b801561337b578281101561331457601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906132dd903090859033906004016156e5565b600060405180830381600087803b1580156132f757600080fd5b505af115801561330b573d6000803e3d6000fd5b5050505061337b565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613348903090879033906004016156e5565b600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b610ddb835b60008161339f5760405162461bcd60e51b8152600401610f529061591d565b6133a833611a64565b8211156133dc5760001982146133d05760405162461bcd60e51b8152600401610f52906158dd565b6133d933611a64565b91505b6133e4612c74565b60006133f3611c6060006127ba565b90506000613413670de0b6b3a7640000610dcf868563ffffffff61273e16565b9050600061341f6126e3565b9050819350808411156134445760405162461bcd60e51b8152600401610f529061585d565b601c546000906001600160a01b0316156134dd57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061348a90309033906004016155eb565b60206040518083038186803b1580156134a257600080fd5b505afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134da9190810190614a59565b90505b336000908152601360205260408120546134fd908363ffffffff61271916565b90506000613511828963ffffffff61316616565b905061351f33898989614042565b5061352c33838389613970565b505050505050919050565b60405161359190859063a9059cbb60e01b9061355990879087906024016156ca565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614167565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb0936135d9933093610100900490911691016155d0565b60c06040518083038186803b1580156135f157600080fd5b505afa158015613605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136299190810190614bdf565b509196509450925061365c915068056bc75e2d631000009050610dcf61364f8285613166565b859063ffffffff61273e16565b9150509091565b6015546000908061367657600e54610ddb565b610ddb81610dcf85670de0b6b3a764000063ffffffff61273e16565b60008082156136db57600f54426001600160581b039081169116146136bd576136b9613597565b9150505b60006136cb82610db76126e3565b9050808411156136d9578093505b505b610ddb83612d4a836127ba565b3390565b60006136f88383612fc8565b601c549091506137149084906001600160a01b031683806127f4565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c49061374790869085906004016156ca565b600060405180830381600087803b15801561376157600080fd5b505af11580156130ca573d6000803e3d6000fd5b6001600160a01b03811661379b5760405162461bcd60e51b8152600401610f52906157fd565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008061380f61380985610db7610f6f565b846131a8565b600554600654600954600a54600b5494955060009485949392919082881015613836578297505b818811156138a957968190039668056bc75e2d631000008290038089111561385c578098505b61387d68056bc75e2d63100000610dcf85610dc3898b63ffffffff61271916565b96506138a187610db783610dcf613894878d613166565b8e9063ffffffff61273e16565b9950506138ff565b6138ca85610db768056bc75e2d63100000610dcf8c8963ffffffff61273e16565b985093955085936138e1848663ffffffff61271916565b9550868910156138f3578698506138ff565b858911156138ff578598505b505050505050505092915050565b6000818361392e5760405162461bcd60e51b8152600401610f5291906157bc565b50600083858161393a57fe5b0495945050505050565b600081848411156139685760405162461bcd60e51b8152600401610f5291906157bc565b505050900390565b6040516000906139a69086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb690602001615566565b604051602081830303815290604052805190602001209050600083600014156139d25760009250613a03565b8415613a03576001600160a01b038616600090815260116020526040902054613a009083908790869061310c565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b600080613a416301e13380610dcf878763ffffffff61273e16565b90506000613a5e68056bc75e2d631000008363ffffffff61316616565b9050613a7d81610dcf8668056bc75e2d6310000063ffffffff61273e16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613add5760405162461bcd60e51b8152600401610f529061592d565b3496508715613b3b57613b0185858a60405180602001604052806000815250613537565b87831115613b3657601654604080516020810190915260008152613b369187916001600160a01b03909116908b870390613537565b613b70565b601654604080518082019091526002815261323760f01b6020820152613b709187916001600160a01b03909116908690613537565b8015613c7357856001600160a01b03168b6001600160a01b0316148015613b9657508615155b8015613ba25750808710155b15613c3c57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613be257600080fd5b505af1158015613bf6573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613c3294508f93506001600160a01b0390911691508490613537565b8087039650613c73565b601654604080518082019091526004815263191c16b160e11b6020820152613c73918d9133916001600160a01b0316908590614225565b8115613cae57601654604080518082019091526002815261323960f01b6020820152613cae91879133916001600160a01b0316908690614225565b505050505050949350505050565b60008082613cdc5760405162461bcd60e51b8152600401610f52906158ed565b613ce4612c74565b613cf1611c6060006127ba565b9050613d0f81610dcf85670de0b6b3a764000063ffffffff61273e16565b915034613d5757613d52600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b815250614225565b613dc1565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613dee5760405162461bcd60e51b8152600401610f52906157ed565b6001600160a01b038516600090815260136020526040812054613e17908663ffffffff61271916565b6001600160a01b0387166000908152601360205260409020819055601554909150613e48908663ffffffff61271916565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613e8a908890889088906159cb565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613ed6919061573d565b60405180910390a395945050505050565b6000818303818312801590613efc5750838113155b80613f115750600083128015613f1157508381135b610ce25760405162461bcd60e51b8152600401610f529061597d565b600082613f3c57506000610ed4565b82600019148015613f505750600160ff1b82145b15613f6d5760405162461bcd60e51b8152600401610f529061593d565b82820282848281613f7a57fe5b0514610ce25760405162461bcd60e51b8152600401610f529061593d565b600081613fb75760405162461bcd60e51b8152600401610f52906159ad565b81600019148015613fcb5750600160ff1b83145b15613fe85760405162461bcd60e51b8152600401610f529061588d565b6000828481613ff357fe5b05949350505050565b60008282018183128015906140115750838112155b80614026575060008312801561402657508381125b610ce25760405162461bcd60e51b8152600401610f529061581d565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b0387166000908152601390915291822054829161408a9190879063ffffffff61394416565b9050600a81116140ab576140a4858263ffffffff61271916565b9450600090505b6001600160a01b03861660009081526013602052604090208190556015546140d9908663ffffffff61316616565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449061411b908890889088906159cb565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613ed6919061573d565b60006060846001600160a01b03168460405161418391906155a8565b6000604051808303816000865af19150503d80600081146141c0576040519150601f19603f3d011682016040523d82523d6000602084013e6141c5565b606091505b50915091508183906141ea5760405162461bcd60e51b8152600401610f5291906157bc565b508051156121945780806020019051614206919081019061477e565b8390610f5b5760405162461bcd60e51b8152600401610f5291906157bc565b6040516121949086906323b872dd60e01b9061355990889088908890602401615606565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610ed481615b3a565b8051610ed481615b3a565b60008083601f8401126142ad57600080fd5b5081356001600160401b038111156142c457600080fd5b602083019150836020820283011115611d0957600080fd5b600082601f8301126142ed57600080fd5b81516143006142fb82615a1a565b6159f4565b9150818183526020840193506020810190508385602084028201111561432557600080fd5b60005b838110156130ca578161433b88826143e6565b8452506020928301929190910190600101614328565b600082601f83011261436257600080fd5b81356143706142fb82615a1a565b915081818352602084019350602081019050838561010084028201111561439657600080fd5b60005b838110156130ca57816143ac8882614481565b8452506020909201916101009190910190600101614399565b8035610ed481615b4e565b8051610ed481615b4e565b8035610ed481615b57565b8051610ed481615b57565b60008083601f84011261440357600080fd5b5081356001600160401b0381111561441a57600080fd5b602083019150836001820283011115611d0957600080fd5b600082601f83011261444357600080fd5b81356144516142fb82615a3a565b9150808252602083016020830185838301111561446d57600080fd5b614478838284615ac0565b50505092915050565b6000610100828403121561449457600080fd5b61449f6101006159f4565b905060006144ad84846143db565b82525060206144be848483016143c5565b60208301525060406144d284828501614285565b60408301525060606144e684828501614285565b60608301525060806144fa84828501614285565b60808301525060a061450e848285016143db565b60a08301525060c0614522848285016143db565b60c08301525060e0614536848285016143db565b60e08301525092915050565b60006020828403121561455457600080fd5b60006110bf8484614285565b60006020828403121561457257600080fd5b60006110bf8484614290565b6000806040838503121561459157600080fd5b600061459d8585614285565b92505060206145ae85828601614285565b9150509250929050565b6000806000606084860312156145cd57600080fd5b60006145d98686614285565b93505060206145ea86828701614285565b92505060406145fb868287016143db565b9150509250925092565b6000806040838503121561461857600080fd5b60006146248585614285565b92505060206145ae858286016143db565b60008060006060848603121561464a57600080fd5b60006146568686614285565b9350506020614667868287016143db565b92505060406145fb868287016143c5565b6000806000806040858703121561468e57600080fd5b84356001600160401b038111156146a457600080fd5b6146b08782880161429b565b945094505060208501356001600160401b038111156146ce57600080fd5b6146da8782880161429b565b95989497509550505050565b6000602082840312156146f857600080fd5b81516001600160401b0381111561470e57600080fd5b6110bf848285016142dc565b6000806040838503121561472d57600080fd5b82356001600160401b0381111561474357600080fd5b61474f85828601614351565b92505060206145ae858286016143c5565b60006020828403121561477257600080fd5b60006110bf84846143c5565b60006020828403121561479057600080fd5b60006110bf84846143d0565b600080600080600080600080610100898b0312156147b957600080fd5b60006147c58b8b6143db565b98505060206147d68b828c016143db565b97505060406147e78b828c016143db565b96505060606147f88b828c016143db565b95505060806148098b828c01614285565b94505060a061481a8b828c01614285565b93505060c061482b8b828c01614285565b92505060e08901356001600160401b0381111561484757600080fd5b6148538b828c01614432565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561488357600080fd5b600061488f8d8d6143db565b9a505060206148a08d828e016143db565b99505060406148b18d828e016143db565b98505060606148c28d828e016143db565b97505060806148d38d828e01614285565b96505060a06148e48d828e01614285565b95505060c06148f58d828e016143db565b94505060e06149068d828e01614285565b9350506101008b01356001600160401b0381111561492357600080fd5b61492f8d828e016143f1565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561496057600080fd5b600061496c8b8b6143db565b985050602061497d8b828c016143db565b975050604061498e8b828c016143db565b965050606061499f8b828c016143db565b95505060806149b08b828c01614285565b94505060a06149c18b828c01614285565b93505060c061482b8b828c016143db565b6000602082840312156149e457600080fd5b81356001600160401b038111156149fa57600080fd5b6110bf84828501614432565b60008060408385031215614a1957600080fd5b82356001600160401b03811115614a2f57600080fd5b61474f85828601614432565b600060208284031215614a4d57600080fd5b60006110bf84846143db565b600060208284031215614a6b57600080fd5b60006110bf84846143e6565b60008060408385031215614a8a57600080fd5b600061462485856143db565b60008060408385031215614aa957600080fd5b6000614ab585856143e6565b92505060206145ae858286016143e6565b600080600060608486031215614adb57600080fd5b6000614ae786866143db565b9350506020614af8868287016143db565b92505060406145fb86828701614285565b60008060008060808587031215614b1f57600080fd5b6000614b2b87876143db565b9450506020614b3c878288016143db565b9350506040614b4d878288016143db565b9250506060614b5e87828801614285565b91505092959194509250565b600080600080600060a08688031215614b8257600080fd5b6000614b8e88886143db565b9550506020614b9f888289016143db565b9450506040614bb0888289016143db565b9350506060614bc188828901614285565b9250506080614bd2888289016143db565b9150509295509295909350565b60008060008060008060c08789031215614bf857600080fd5b6000614c0489896143e6565b9650506020614c1589828a016143e6565b9550506040614c2689828a016143e6565b9450506060614c3789828a016143e6565b9350506080614c4889828a016143e6565b92505060a0614c5989828a016143e6565b9150509295509295509295565b600080600080600080600060e0888a031215614c8157600080fd5b6000614c8d8a8a6143db565b9750506020614c9e8a828b016143db565b9650506040614caf8a828b016143db565b9550506060614cc08a828b016143db565b9450506080614cd18a828b016143db565b93505060a0614ce28a828b016143db565b92505060c0614cf38a828b016143db565b91505092959891949750929550565b6000614d0e8383614d46565b505060200190565b6000614d0e8383614eb9565b6000614d2e83836154a0565b50506101000190565b614d4081615aaf565b82525050565b614d4081615a80565b614d40614d5b82615a80565b615af8565b614d6981615a67565b614d738184610ddf565b9250614d7e82610eec565b8060005b83811015610f5b578151614d968782614d02565b9650614da183615a61565b925050600101614d82565b6000614db782615a6d565b614dc18185615a77565b9350614dcc83615a61565b8060005b83811015614dfa578151614de48882614d16565b9750614def83615a61565b925050600101614dd0565b509495945050505050565b6000614e1082615a6d565b614e1a8185615a77565b9350614e2583615a61565b8060005b83811015614dfa578151614e3d8882614d22565b9750614e4883615a61565b925050600101614e29565b614e5c81615a71565b614e668184610ddf565b9250614e7182610eec565b8060005b83811015610f5b578151614e898782614d16565b9650614e9483615a61565b925050600101614e75565b614d4081615a8b565b614d40614eb482615a8b565b615b03565b614d4081610eec565b614d40614ece82610eec565b610eec565b614d40614ece82615a90565b6000614eea82615a6d565b614ef48185615a77565b9350614f04818560208601615acc565b614f0d81615b24565b9093019392505050565b6000614f2282615a6d565b614f2c8185610ddf565b9350614f3c818560208601615acc565b9290920192915050565b6000614f53600c83615a77565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614f7b600283615a77565b61031360f41b815260200192915050565b6000614f99600283615a77565b61313560f01b815260200192915050565b6000614fb7602683615a77565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614fff601b83615a77565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000615038602183615a77565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061507b600e83615a77565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b60006150a5600183615a77565b603760f81b815260200192915050565b60006150c2601283615a77565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006150f0600283615a77565b61333760f01b815260200192915050565b600061510e600283615a77565b610c8d60f21b815260200192915050565b600061512c600283615a77565b61313160f01b815260200192915050565b600061514a602183615a77565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061518d601583615a77565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b60006151be600283615a77565b61189960f11b815260200192915050565b60006151dc600283615a77565b61323560f01b815260200192915050565b60006151fa600f83615a77565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b6000615225600283615a77565b61199960f11b815260200192915050565b6000615243600283615a77565b61313760f01b815260200192915050565b6000615261602183615a77565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006152a4600c83615a77565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006152cc600283615a77565b61313960f01b815260200192915050565b60006152ea600283615a77565b61191b60f11b815260200192915050565b6000615308602783615a77565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615351601d83615a77565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b600061538a600a83615a77565b6937b7363ca830bab9b2b960b11b815260200192915050565b60006153b0600c83615a77565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006153d8602483615a77565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b600061541e601883615a77565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b6000615457600183615a77565b601b60f91b815260200192915050565b6000615474602083615a77565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906154b28482614eb9565b5060208201516154c56020850182614e9f565b5060408201516154d86040850182614d46565b5060608201516154eb6060850182614d46565b5060808201516154fe6080850182614d46565b5060a082015161551160a0850182614eb9565b5060c082015161552460c0850182614eb9565b5060e082015161359160e0850182614eb9565b614d4081615aa9565b600061554c8285614d4f565b60148201915061555c8284614ea8565b5060010192915050565b60006155728285614d4f565b6014820191506155828284614ec2565b5060200192915050565b60006155988285614ed3565b6004820191506155828284614ec2565b6000610ce28284614f17565b60208101610ed48284614d46565b60208101610ed48284614d37565b604081016155de8285614d46565b610ce26020830184614d46565b604081016155f98285614d46565b610ce26020830184614d37565b606081016156148286614d46565b6156216020830185614d46565b6110bf6040830184614eb9565b60a0810161563c8288614d46565b6156496020830187614d46565b6156566040830186614eb9565b6156636060830185614eb9565b613a7d6080830184614e9f565b60c0810161567e8289614d46565b61568b6020830188614d46565b6156986040830187614eb9565b6156a56060830186614eb9565b6156b26080830185614eb9565b6156bf60a0830184614eb9565b979650505050505050565b604081016156d88285614d46565b610ce26020830184614eb9565b606081016156f38286614d46565b6157006020830185614eb9565b6110bf6040830184614d37565b60208082528101610ce28184614dac565b60208082528101610ce28184614e05565b60208101610ed48284614e9f565b60208101610ed48284614eb9565b6101c0810161575a828a614eb9565b6157676020830189614eb9565b6157746040830188614e9f565b6157816060830187614eb9565b61578e6080830186614d60565b61579c610100830185614e53565b8181036101a08301526157af8184614edf565b9998505050505050505050565b60208082528101610ce28184614edf565b60208082528101610ed481614f46565b60208082528101610ed481614f6e565b60208082528101610ed481614f8c565b60208082528101610ed481614faa565b60208082528101610ed481614ff2565b60208082528101610ed48161502b565b60208082528101610ed48161506e565b60208082528101610ed481615098565b60208082528101610ed4816150b5565b60208082528101610ed4816150e3565b60208082528101610ed481615101565b60208082528101610ed48161511f565b60208082528101610ed48161513d565b60208082528101610ed481615180565b60208082528101610ed4816151b1565b60208082528101610ed4816151cf565b60208082528101610ed4816151ed565b60208082528101610ed481615218565b60208082528101610ed481615236565b60208082528101610ed481615254565b60208082528101610ed481615297565b60208082528101610ed4816152bf565b60208082528101610ed4816152dd565b60208082528101610ed4816152fb565b60208082528101610ed481615344565b60208082528101610ed48161537d565b60208082528101610ed4816153a3565b60208082528101610ed4816153cb565b60208082528101610ed481615411565b60208082528101610ed48161544a565b60208082528101610ed481615467565b604081016156d88285614eb9565b606081016159d98286614eb9565b6156216020830185614eb9565b60208101610ed48284615537565b6040518181016001600160401b0381118282101715615a1257600080fd5b604052919050565b60006001600160401b03821115615a3057600080fd5b5060209081020190565b60006001600160401b03821115615a5057600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610ed482615a9d565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610ed4826000610ed482615a80565b82818337506000910152565b60005b83811015615ae7578181015183820152602001615acf565b838111156135915750506000910152565b6000610ed482615b0e565b6000610ed482615b19565b6000610ed482615b34565b6000610ed482615b2e565b601f01601f191690565b60f81b90565b60601b90565b615b4381615a80565b811461258357600080fd5b615b4381615a8b565b615b4381610eec56fea365627a7a72315820b1119067289ba830ac5e34407071c22d97663395cb09deb2a30fb0a7c9bf9bd86c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
