{
  "_format": "hh-sol-artifact-1",
  "contractName": "Joetroller",
  "sourceName": "contracts/Joetroller.sol",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "action",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "pauseState",
          "type": "bool"
        }
      ],
      "name": "ActionPaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "action",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "pauseState",
          "type": "bool"
        }
      ],
      "name": "ActionPaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "protocol",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "creditLimit",
          "type": "uint256"
        }
      ],
      "name": "CreditLimitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "error",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "info",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detail",
          "type": "uint256"
        }
      ],
      "name": "Failure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        }
      ],
      "name": "MarketDelisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "MarketEntered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "MarketExited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        }
      ],
      "name": "MarketListed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBorrowCap",
          "type": "uint256"
        }
      ],
      "name": "NewBorrowCap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldBorrowCapGuardian",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newBorrowCapGuardian",
          "type": "address"
        }
      ],
      "name": "NewBorrowCapGuardian",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldCloseFactorMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCloseFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewCloseFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldCollateralFactorMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCollateralFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewCollateralFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum JoetrollerV1Storage.Version",
          "name": "oldVersion",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "enum JoetrollerV1Storage.Version",
          "name": "newVersion",
          "type": "uint8"
        }
      ],
      "name": "NewJTokenVersion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldLiquidationIncentiveMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newLiquidationIncentiveMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewLiquidationIncentive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldPauseGuardian",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPauseGuardian",
          "type": "address"
        }
      ],
      "name": "NewPauseGuardian",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract PriceOracle",
          "name": "oldPriceOracle",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract PriceOracle",
          "name": "newPriceOracle",
          "type": "address"
        }
      ],
      "name": "NewPriceOracle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newSupplyCap",
          "type": "uint256"
        }
      ],
      "name": "NewSupplyCap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldSupplyCapGuardian",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newSupplyCapGuardian",
          "type": "address"
        }
      ],
      "name": "NewSupplyCapGuardian",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Unitroller",
          "name": "unitroller",
          "type": "address"
        }
      ],
      "name": "_become",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_borrowGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        }
      ],
      "name": "_delistMarket",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_mintGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newBorrowCapGuardian",
          "type": "address"
        }
      ],
      "name": "_setBorrowCapGuardian",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "state",
          "type": "bool"
        }
      ],
      "name": "_setBorrowPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newCloseFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setCloseFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "newCollateralFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setCollateralFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "protocol",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "creditLimit",
          "type": "uint256"
        }
      ],
      "name": "_setCreditLimit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "state",
          "type": "bool"
        }
      ],
      "name": "_setFlashloanPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newLiquidationIncentiveMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setLiquidationIncentive",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken[]",
          "name": "jTokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "newBorrowCaps",
          "type": "uint256[]"
        }
      ],
      "name": "_setMarketBorrowCaps",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken[]",
          "name": "jTokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "newSupplyCaps",
          "type": "uint256[]"
        }
      ],
      "name": "_setMarketSupplyCaps",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "state",
          "type": "bool"
        }
      ],
      "name": "_setMintPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newPauseGuardian",
          "type": "address"
        }
      ],
      "name": "_setPauseGuardian",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract PriceOracle",
          "name": "newOracle",
          "type": "address"
        }
      ],
      "name": "_setPriceOracle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "newRewardDistributor",
          "type": "address"
        }
      ],
      "name": "_setRewardDistributor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "state",
          "type": "bool"
        }
      ],
      "name": "_setSeizePaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newSupplyCapGuardian",
          "type": "address"
        }
      ],
      "name": "_setSupplyCapGuardian",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "state",
          "type": "bool"
        }
      ],
      "name": "_setTransferPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "enum JoetrollerV1Storage.Version",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "_supportMarket",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "accountAssets",
      "outputs": [
        {
          "internalType": "contract JToken",
          "name": "",
          "type": "address"
        }
      ],
      "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": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "allMarkets",
      "outputs": [
        {
          "internalType": "contract JToken",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "borrowAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowCapGuardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowCaps",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "borrowVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "contract JToken",
          "name": "jToken",
          "type": "address"
        }
      ],
      "name": "checkMembership",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "rewardType",
          "type": "uint8"
        },
        {
          "internalType": "address payable",
          "name": "holder",
          "type": "address"
        }
      ],
      "name": "claimReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "rewardType",
          "type": "uint8"
        },
        {
          "internalType": "address payable",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "contract JToken[]",
          "name": "jTokens",
          "type": "address[]"
        }
      ],
      "name": "claimReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "rewardType",
          "type": "uint8"
        },
        {
          "internalType": "address payable[]",
          "name": "holders",
          "type": "address[]"
        },
        {
          "internalType": "contract JToken[]",
          "name": "jTokens",
          "type": "address[]"
        },
        {
          "internalType": "bool",
          "name": "borrowers",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "suppliers",
          "type": "bool"
        }
      ],
      "name": "claimReward",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "closeFactorMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "creditLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "jTokens",
          "type": "address[]"
        }
      ],
      "name": "enterMarkets",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenAddress",
          "type": "address"
        }
      ],
      "name": "exitMarket",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "flashloanAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "flashloanGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAccountLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAllMarkets",
      "outputs": [
        {
          "internalType": "contract JToken[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAssetsIn",
      "outputs": [
        {
          "internalType": "contract JToken[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getBlockTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenModify",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "getHypotheticalAccountLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isCreditAccount",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isJoetroller",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenAddress",
          "type": "address"
        }
      ],
      "name": "isMarketListed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenBorrowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "liquidateBorrowAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenBorrowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "actualRepayAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "liquidateBorrowVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenBorrowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "actualRepayAmount",
          "type": "uint256"
        }
      ],
      "name": "liquidateCalculateSeizeTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidationIncentiveMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "markets",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isListed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "collateralFactorMantissa",
          "type": "uint256"
        },
        {
          "internalType": "enum JoetrollerV1Storage.Version",
          "name": "version",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mintAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "mintGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "actualMintAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "mintTokens",
          "type": "uint256"
        }
      ],
      "name": "mintVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract PriceOracle",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pauseGuardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeemAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeemVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "repayBorrowAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "actualRepayAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowerIndex",
          "type": "uint256"
        }
      ],
      "name": "repayBorrowVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rewardDistributor",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenBorrowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "seizeAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "seizeGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jTokenCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "jTokenBorrowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "seizeVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyCapGuardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "supplyCaps",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "transferTokens",
          "type": "uint256"
        }
      ],
      "name": "transferAllowed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "transferGuardianPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "transferTokens",
          "type": "uint256"
        }
      ],
      "name": "transferVerify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "jToken",
          "type": "address"
        },
        {
          "internalType": "enum JoetrollerV1Storage.Version",
          "name": "newVersion",
          "type": "uint8"
        }
      ],
      "name": "updateJTokenVersion",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055615cca80620000336000396000f3fe6080604052600436106104315760003560e01c8063607ef6c111610229578063b0772d0b1161012e578063d82ecc48116100b6578063e87554461161007a578063e875544614610c94578063eabe7d9114610ca9578063ede4edd014610cc9578063f349760014610ce9578063f851a44014610d0957610431565b8063d82ecc4814610bff578063da3d454c14610c1f578063dce1544914610c3f578063e4028eee14610c5f578063e6653f3d14610c7f57610431565b8063bdcdc258116100fd578063bdcdc25814610b44578063c299823814610b64578063c488847b14610b91578063d02f735114610bbf578063d672d3e214610bdf57610431565b8063b0772d0b14610acf578063b1ab78e614610ae4578063b1e1af2414610b04578063bc93082b14610b2457610431565b80638805714b116101b157806399bc18731161018057806399bc187314610a43578063a979f0c514610a63578063abfceffc14610a78578063ac0b0bb714610aa5578063acc2166a14610aba57610431565b80638805714b146109c15780638e8f294b146109d45780638ebf636414610a03578063929fe9a114610a2357610431565b8063731f0c2b116101f8578063731f0c2b14610942578063744532ae14610962578063796b89b9146109825780637dc0d1d01461099757806387f76303146109ac57610431565b8063607ef6c1146108cc5780636a56947e146108ec5780636d154ea5146109075780636d35bf911461092757610431565b80633d98a1e51161033a57806351a485e4116102c25780635c60da1b116102865780635c60da1b146108375780635c7786051461084c5780635ec88c791461086c5780635f5af1aa1461088c5780635fc7e71e146108ac57610431565b806351a485e41461078a57806351dff989146107aa57806352d84d1e146107ca57806355ee1fe1146107f75780635c254d111461081757610431565b80634a584432116103095780634a584432146106e65780634ada90af146107065780634e79238f1461071b5780634ef4c3e11461074a5780634fd42e171461076a57610431565b80633d98a1e51461067157806340e6dcc51461069157806341c728b9146106a657806347ef3b3b146106c657610431565b806326782247116103bd57806338b8f4c31161038c57806338b8f4c3146105e7578063391957d714610607578063396f7b23146106275780633bcf7ec11461063c5780633c94786f1461065c57610431565b806326782247146105725780632d70db7814610587578063317b0b77146105a757806336bdd087146105c757610431565b80631d504dc6116104045780631d504dc6146104db5780631ededc91146104fb57806321af45691461051b57806324008a621461053d57806324a3d6221461055d57610431565b806302c3bcbb1461043657806303c03f0f1461046c5780630952c5631461048e57806318c882a5146104ae575b600080fd5b34801561044257600080fd5b50610456610451366004614582565b610d1e565b6040516104639190615a67565b60405180910390f35b34801561047857600080fd5b5061048c6104873660046148bb565b610d30565b005b34801561049a57600080fd5b5061048c6104a9366004614b37565b610deb565b3480156104ba57600080fd5b506104ce6104c9366004614a1a565b610e53565b60405161046391906156e2565b3480156104e757600080fd5b5061048c6104f63660046149fc565b610f57565b34801561050757600080fd5b5061048c61051636600461471b565b61108b565b34801561052757600080fd5b50610530611092565b6040516104639190615646565b34801561054957600080fd5b506104566105583660046146ba565b6110a1565b34801561056957600080fd5b506105306111ba565b34801561057e57600080fd5b506105306111c9565b34801561059357600080fd5b506104ce6105a23660046149c0565b6111d8565b3480156105b357600080fd5b506104566105c2366004614aa6565b6112a8565b3480156105d357600080fd5b506104566105e2366004614a4a565b611319565b3480156105f357600080fd5b5061048c610602366004614582565b6114a0565b34801561061357600080fd5b5061048c610622366004614582565b611529565b34801561063357600080fd5b506105306115a6565b34801561064857600080fd5b506104ce610657366004614a1a565b6115b5565b34801561066857600080fd5b506104ce6116a8565b34801561067d57600080fd5b506104ce61068c366004614582565b6116b8565b34801561069d57600080fd5b506104ce6116d6565b3480156106b257600080fd5b5061048c6106c136600461483d565b6116db565b3480156106d257600080fd5b5061048c6106e1366004614633565b6116e1565b3480156106f257600080fd5b50610456610701366004614582565b6116e6565b34801561071257600080fd5b506104566116f8565b34801561072757600080fd5b5061073b61073636600461483d565b6116fe565b60405161046393929190615aab565b34801561075657600080fd5b50610456610765366004614772565b611738565b34801561077657600080fd5b50610456610785366004614aa6565b611a14565b34801561079657600080fd5b5061048c6107a5366004614950565b611a6d565b3480156107b657600080fd5b5061048c6107c536600461483d565b611bb9565b3480156107d657600080fd5b506107ea6107e5366004614aa6565b611be4565b6040516104639190615718565b34801561080357600080fd5b506104566108123660046149fc565b611c0b565b34801561082357600080fd5b50610456610832366004614582565b611c7d565b34801561084357600080fd5b50610530611d67565b34801561085857600080fd5b5061048c610867366004614772565b611d76565b34801561087857600080fd5b5061073b610887366004614582565b611d7b565b34801561089857600080fd5b506104566108a7366004614582565b611db0565b3480156108b857600080fd5b506104566108c73660046145be565b611e24565b3480156108d857600080fd5b5061048c6108e7366004614950565b611f82565b3480156108f857600080fd5b5061048c6106c13660046146ba565b34801561091357600080fd5b506104ce610922366004614582565b6120c5565b34801561093357600080fd5b5061048c6105163660046145be565b34801561094e57600080fd5b506104ce61095d366004614582565b6120da565b34801561096e57600080fd5b5061048c61097d366004614b67565b6120ef565b34801561098e57600080fd5b50610456612151565b3480156109a357600080fd5b506107ea612156565b3480156109b857600080fd5b506104ce612165565b61048c6109cf366004614bc2565b612175565b3480156109e057600080fd5b506109f46109ef366004614582565b6121e6565b604051610463939291906156f0565b348015610a0f57600080fd5b506104ce610a1e3660046149c0565b61220c565b348015610a2f57600080fd5b506104ce610a3e366004614881565b6122cc565b348015610a4f57600080fd5b50610456610a5e366004614582565b6122ff565b348015610a6f57600080fd5b50610530612311565b348015610a8457600080fd5b50610a98610a93366004614582565b612320565b60405161046391906156c0565b348015610ab157600080fd5b506104ce6123a9565b348015610ac657600080fd5b506105306123b9565b348015610adb57600080fd5b50610a986123c8565b348015610af057600080fd5b506104ce610aff3660046147bf565b61242a565b348015610b1057600080fd5b506104ce610b1f366004614a1a565b61244d565b348015610b3057600080fd5b5061048c610b3f3660046148eb565b612540565b348015610b5057600080fd5b50610456610b5f3660046146ba565b6125b7565b348015610b7057600080fd5b50610b84610b7f36600461491b565b6126bc565b60405161046391906156d1565b348015610b9d57600080fd5b50610bb1610bac366004614772565b612753565b604051610463929190615a75565b348015610bcb57600080fd5b50610456610bda3660046145be565b61298d565b348015610beb57600080fd5b506104ce610bfa366004614582565b612be2565b348015610c0b57600080fd5b506104ce610c1a366004614582565b612bf7565b348015610c2b57600080fd5b50610456610c3a366004614772565b612c14565b348015610c4b57600080fd5b506107ea610c5a3660046148eb565b612fc2565b348015610c6b57600080fd5b50610456610c7a366004614a69565b612ff7565b348015610c8b57600080fd5b506104ce61319c565b348015610ca057600080fd5b506104566131ac565b348015610cb557600080fd5b50610456610cc4366004614772565b6131b2565b348015610cd557600080fd5b50610456610ce4366004614582565b6131cf565b348015610cf557600080fd5b5061048c610d043660046149fc565b613535565b348015610d1557600080fd5b506105306137de565b60106020526000908152604090205481565b336001600160a01b03831614610d615760405162461bcd60e51b8152600401610d5890615967565b60405180910390fd5b610d6a826116b8565b15610de7576001600160a01b0382166000908152600860205260409020600301805460ff811691839160ff19166001836002811115610da557fe5b02179055507f558960558f6e261a396bbd1ff5293b87f450019866e91b3579650bc3b6bcb00d838284604051610ddd9392919061574f565b60405180910390a1505b5050565b601354604051630952c56360e01b81526001600160a01b0390911690630952c56390610e1d9085908590600401615ab9565b600060405180830381600087803b158015610e3757600080fd5b505af1158015610e4b573d6000803e3d6000fd5b505050505050565b6000610e5e836116b8565b610e7a5760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b0316331480610e9d57506000546001600160a01b031633145b610eb95760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b0316331480610ed457506001821515145b610ef05760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b0383166000908152600b602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f469085908590615798565b60405180910390a150805b92915050565b806001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc891908101906145a0565b6001600160a01b0316336001600160a01b031614610ff85760405162461bcd60e51b8152600401610d5890615a47565b806001600160a01b031663c1e803346040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106b9190810190614ac4565b156110885760405162461bcd60e51b8152600401610d5890615997565b50565b5050505050565b600d546001600160a01b031681565b60006110ac856116b8565b6110b8575060096111b2565b6110c0614272565b6040518060200160405280876001600160a01b031663aa5af0fd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113c9190810190614ac4565b9052601354604051639c39e29360e01b81529192506001600160a01b031690639c39e293906111739089908890869060040161567d565b600060405180830381600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b50600092506111ae915050565b9150505b949350505050565b6009546001600160a01b031681565b6001546001600160a01b031681565b6009546000906001600160a01b03163314806111fe57506000546001600160a01b031633145b61121a5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061123557506001821515145b6112515760405162461bcd60e51b8152600401610d5890615888565b6009805460ff60b81b1916600160b81b841515021790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de0906112989084906158a8565b60405180910390a150805b919050565b600080546001600160a01b031633146112ce576112c7600160046137ed565b90506112a3565b60058054908390556040517f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9906113089083908690615a75565b60405180910390a160009392505050565b600080546001600160a01b031633146113445760405162461bcd60e51b8152600401610d5890615a37565b61134d836116b8565b1561136a5760405162461bcd60e51b8152600401610d58906158d7565b826001600160a01b031663406de0b66040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a357600080fd5b505afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113db91908101906149de565b5060408051606081018252600181526000602082015290810183600281111561140057fe5b90526001600160a01b0384166000908152600860209081526040918290208351815490151560ff199182161782559184015160018083019190915592840151600382018054929491939092169083600281111561145957fe5b021790555090505061146a8361384d565b7fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f836040516113089190615718565b9392505050565b6000546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610d5890615937565b600f80546001600160a01b038381166001600160a01b03198316179092556040519116907fb0d3622c24ac9bd967d8f37a25808b3e668fe7ed4f3075bbe82842d3e287c0449061151d9083908590615662565b60405180910390a15050565b6000546001600160a01b031633146115535760405162461bcd60e51b8152600401610d58906158e7565b600d80546001600160a01b038381166001600160a01b03198316179092556040519116907feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e299061151d9083908590615662565b6003546001600160a01b031681565b60006115c0836116b8565b6115dc5760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b03163314806115ff57506000546001600160a01b031633145b61161b5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061163657506001821515145b6116525760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b0383166000908152600a602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f46908590859061576a565b600954600160a01b900460ff1681565b6001600160a01b031660009081526008602052604090205460ff1690565b600181565b50505050565b610e4b565b600e6020526000908152604090205481565b60065481565b6000806000806000806117138a8a8a8a6138ff565b92509250925082601181111561172557fe5b95509093509150505b9450945094915050565b6001600160a01b0383166000908152600a602052604081205460ff16156117715760405162461bcd60e51b8152600401610d5890615a27565b61177a83612bf7565b156117975760405162461bcd60e51b8152600401610d5890615927565b6117a0846116b8565b6117ae5760095b9050611499565b6001600160a01b038416600090815260106020526040902054801561199e576000856001600160a01b0316633b1d21a26040518163ffffffff1660e01b815260040160206040518083038186803b15801561180857600080fd5b505afa15801561181c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118409190810190614ac4565b90506000866001600160a01b03166347bd37186040518163ffffffff1660e01b815260040160206040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118b59190810190614ac4565b90506000876001600160a01b0316638f840ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f257600080fd5b505afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061192a9190810190614ac4565b905060008061193a858585613cd2565b9092509050600082600381111561194d57fe5b1461196a5760405162461bcd60e51b8152600401610d5890615917565b6000611976828a613d1e565b90508681106119975760405162461bcd60e51b8152600401610d5890615838565b5050505050505b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd906119d09088908890600401615662565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b5060009250611a0b915050565b95945050505050565b600080546001600160a01b03163314611a33576112c76001600b6137ed565b60068054908390556040517faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316906113089083908690615a75565b6000546001600160a01b0316331480611a905750600f546001600160a01b031633145b611aac5760405162461bcd60e51b8152600401610d5890615868565b82818115801590611abc57508082145b611ad85760405162461bcd60e51b8152600401610d58906159d7565b60005b82811015611bb057848482818110611aef57fe5b9050602002013560106000898985818110611b0657fe5b9050602002016020611b1b91908101906149fc565b6001600160a01b03168152602081019190915260400160002055868682818110611b4157fe5b9050602002016020611b5691908101906149fc565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f8868684818110611b8c57fe5b90506020020135604051611ba09190615a67565b60405180910390a2600101611adb565b50505050505050565b80158015611bc75750600082115b156116db5760405162461bcd60e51b8152600401610d5890615957565b600c8181548110611bf157fe5b6000918252602090912001546001600160a01b0316905081565b600080546001600160a01b03163314611c2a576112c7600160106137ed565b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e229061130890839086906157fe565b600080546001600160a01b03163314611c975760016112c7565b6000826001600160a01b0316600080604051602401611cb69190615819565b60408051601f198184030181529181526020820180516001600160e01b031663204a7f0760e21b17905251611ceb919061563a565b60006040518083038185875af1925050503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b5050905080611d4057600e9150506112a3565b5050601380546001600160a01b0319166001600160a01b0392909216919091179055600090565b6002546001600160a01b031681565b505050565b600080600080600080611d928760008060006138ff565b925092509250826011811115611da457fe5b97919650945092505050565b600080546001600160a01b03163314611dcf576112c7600160136137ed565b600980546001600160a01b038481166001600160a01b031983161792839055604051918116927f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e926113089285921690615662565b6000611e2f83612bf7565b15611e4c5760405162461bcd60e51b8152600401610d5890615898565b611e55866116b8565b1580611e675750611e65856116b8565b155b15611e765760095b9050611a0b565b600080611e8285613d54565b91935090915060009050826011811115611e9857fe5b14611eb257816011811115611ea957fe5b92505050611a0b565b80611ebe576003611ea9565b6040516395dd919360e01b81526000906001600160a01b038a16906395dd919390611eed908990600401615646565b60206040518083038186803b158015611f0557600080fd5b505afa158015611f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f3d9190810190614ac4565b90506000611f5b604051806020016040528060055481525083613d74565b905080861115611f72576011945050505050611a0b565b5060009998505050505050505050565b6000546001600160a01b0316331480611fa55750600d546001600160a01b031633145b611fc15760405162461bcd60e51b8152600401610d5890615987565b82818115801590611fd157508082145b611fed5760405162461bcd60e51b8152600401610d58906159d7565b60005b82811015611bb05784848281811061200457fe5b90506020020135600e600089898581811061201b57fe5b905060200201602061203091908101906149fc565b6001600160a01b0316815260208101919091526040016000205586868281811061205657fe5b905060200201602061206b91908101906149fc565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f68686848181106120a157fe5b905060200201356040516120b59190615a67565b60405180910390a2600101611ff0565b600b6020526000908152604090205460ff1681565b600a6020526000908152604090205460ff1681565b601354604051633a22995760e11b81526001600160a01b039091169063744532ae9061212390869086908690600401615ac7565b600060405180830381600087803b15801561213d57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b425b90565b6004546001600160a01b031681565b600954600160b01b900460ff1681565b601354604051638805714b60e01b81526001600160a01b0390911690638805714b906121ad9088908890889088908890600401615af4565b600060405180830381600087803b1580156121c757600080fd5b505af11580156121db573d6000803e3d6000fd5b505050505050505050565b60086020526000908152604090208054600182015460039092015460ff91821692911683565b6009546000906001600160a01b031633148061223257506000546001600160a01b031633145b61224e5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061226957506001821515145b6122855760405162461bcd60e51b8152600401610d5890615888565b6009805460ff60b01b1916600160b01b841515021790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090611298908490615a07565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b60116020526000908152604090205481565b600f546001600160a01b031681565b60608060076000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561239c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161237e575b5093979650505050505050565b600954600160b81b900460ff1681565b6013546001600160a01b031681565b6060600c80548060200260200160405190810160405280929190818152602001828054801561242057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612402575b5050505050905090565b505050506001600160a01b031660009081526012602052604090205460ff161590565b6000612458836116b8565b6124745760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b031633148061249757506000546001600160a01b031633145b6124b35760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b03163314806124ce57506001821515145b6124ea5760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b03831660009081526012602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f4690859085906157b7565b6000546001600160a01b0316331461256a5760405162461bcd60e51b8152600401610d5890615977565b6001600160a01b03821660009081526011602052604090819020829055517facba5197b02f201109f99752a9adb58c2598809f6acb3c34b7f1445f0cbeee879061151d90849084906156a5565b600954600090600160b01b900460ff16156125e45760405162461bcd60e51b8152600401610d5890615947565b6125ed83612bf7565b1561260a5760405162461bcd60e51b8152600401610d58906158f7565b6000612617868685613d93565b905080156126265790506111b2565b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd906126589089908990600401615662565b600060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b505060135460405163670e8afd60e01b81526001600160a01b03909116925063670e8afd91506111739089908890600401615662565b60606000825190506060816040519080825280602002602001820160405280156126f0578160200160208202803883390190505b50905060005b8281101561274b57600085828151811061270c57fe5b602002602001015190506127208133613e3a565b601181111561272b57fe5b83838151811061273757fe5b6020908102919091010152506001016126f6565b509392505050565b6004805460405163fc57d4df60e01b8152600092839283926001600160a01b039091169163fc57d4df91612789918a9101615718565b60206040518083038186803b1580156127a157600080fd5b505afa1580156127b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127d99190810190614ac4565b6004805460405163fc57d4df60e01b81529293506000926001600160a01b039091169163fc57d4df9161280e918a9101615718565b60206040518083038186803b15801561282657600080fd5b505afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061285e9190810190614ac4565b905081158061286b575080155b1561288057600d935060009250612985915050565b6000866001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156128bb57600080fd5b505afa1580156128cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128f39190810190614ac4565b90506128fd614272565b6129256040518060200160405280600654815250604051806020016040528087815250613fcc565b905061292f614272565b612955604051806020016040528086815250604051806020016040528086815250613fcc565b905061295f614272565b612969838361400b565b90506000612977828b613d74565b600099509750505050505050505b935093915050565b600954600090600160b81b900460ff16156129ba5760405162461bcd60e51b8152600401610d58906159c7565b6129c383612bf7565b156129e05760405162461bcd60e51b8152600401610d5890615878565b6129e9866116b8565b15806129fb57506129f9856116b8565b155b15612a07576009611e6f565b846001600160a01b0316636330533c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a4057600080fd5b505afa158015612a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a789190810190614a88565b6001600160a01b0316866001600160a01b0316636330533c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612aba57600080fd5b505afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af29190810190614a88565b6001600160a01b031614612b07576002611e6f565b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd90612b399089908790600401615662565b600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b505060135460405163670e8afd60e01b81526001600160a01b03909116925063670e8afd9150612b9d9089908890600401615662565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b5060009250612bd8915050565b9695505050505050565b60126020526000908152604090205460ff1681565b6001600160a01b0316600090815260116020526040902054151590565b6001600160a01b0383166000908152600b602052604081205460ff1615612c4d5760405162461bcd60e51b8152600401610d5890615a57565b612c56846116b8565b612c615760096117a7565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612d2457336001600160a01b03851614612cba5760405162461bcd60e51b8152600401610d58906159f7565b6000612cc68585613e3a565b90506000816011811115612cd657fe5b14612cef57806011811115612ce757fe5b915050611499565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612d2257fe5b505b6004805460405163fc57d4df60e01b81526001600160a01b039091169163fc57d4df91612d5391889101615718565b60206040518083038186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612da39190810190614ac4565b612dae57600d6117a7565b6001600160a01b0384166000908152600e60205260409020548015612e72576000856001600160a01b03166347bd37186040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0857600080fd5b505afa158015612e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e409190810190614ac4565b90506000612e4e8286613d1e565b9050828110612e6f5760405162461bcd60e51b8152600401610d58906159b7565b50505b600080612e8286886000886138ff565b91935090915060009050826011811115612e9857fe5b14612eb357816011811115612ea957fe5b9350505050611499565b8015612ec0576004612ea9565b612ec8614272565b6040518060200160405280896001600160a01b031663aa5af0fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0c57600080fd5b505afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f449190810190614ac4565b9052601354604051639c39e29360e01b81529192506001600160a01b031690639c39e29390612f7b908b908b90869060040161567d565b600060405180830381600087803b158015612f9557600080fd5b505af1158015612fa9573d6000803e3d6000fd5b5060009250612fb6915050565b98975050505050505050565b60076020528160005260406000208181548110612fdb57fe5b6000918252602090912001546001600160a01b03169150829050565b600080546001600160a01b0316331461301d57613016600160066137ed565b9050610f51565b6001600160a01b0383166000908152600860205260409020805460ff166130525761304a600960076137ed565b915050610f51565b61305a614272565b506040805160208101909152838152613071614272565b506040805160208101909152670c7d713b49da000081526130928183614047565b156130ad576130a3600660086137ed565b9350505050610f51565b841580159061313857506004805460405163fc57d4df60e01b81526001600160a01b039091169163fc57d4df916130e6918a9101615718565b60206040518083038186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131369190810190614ac4565b155b15613149576130a3600d60096137ed565b600183018054908690556040517f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59061318790899084908a906157d6565b60405180910390a16000979650505050505050565b600954600160a81b900460ff1681565b60055481565b6000806131c0858585613d93565b9050801561199e579050611499565b6000808290506000806000836001600160a01b031663c37f68e2336040518263ffffffff1660e01b81526004016132069190615654565b60806040518083038186803b15801561321e57600080fd5b505afa158015613232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132569190810190614ae2565b509250925092508260001461327d5760405162461bcd60e51b8152600401610d58906159a7565b801561329a5761328f600c60026137ed565b9450505050506112a3565b60006132a7873385613d93565b905080156132c8576132bc600e60038361404e565b955050505050506112a3565b6001600160a01b03871660009081526008602052604090206001600382015460ff1660028111156132f557fe5b141561335a57604051638b35776b60e01b81526001600160a01b03891690638b35776b90613327903390600401615654565b600060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050505b33600090815260028201602052604090205460ff1661338257600096505050505050506112a3565b3360009081526002820160209081526040808320805460ff1916905560078252918290208054835181840281018401909452808452606093928301828280156133f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116133d6575b5050835193945083925060009150505b8281101561344957896001600160a01b031684828151811061342257fe5b60200260200101516001600160a01b0316141561344157809150613449565b600101613404565b5081811061345357fe5b33600090815260076020526040902080546000190182146134d95780548190600019810190811061348057fe5b9060005260206000200160009054906101000a90046001600160a01b03168183815481106134aa57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80546134e9826000198301614285565b507fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d8a3360405161351b929190615734565b60405180910390a160009c9b505050505050505050505050565b6000546001600160a01b0316331461355f5760405162461bcd60e51b8152600401610d5890615907565b613568816116b8565b6135845760405162461bcd60e51b8152600401610d5890615a17565b806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135bd57600080fd5b505afa1580156135d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135f59190810190614ac4565b156136125760405162461bcd60e51b8152600401610d58906159e7565b806001600160a01b031663406de0b66040518163ffffffff1660e01b815260040160206040518083038186803b15801561364b57600080fd5b505afa15801561365f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061368391908101906149de565b506001600160a01b0381166000908152600860205260408120805460ff199081168255600182018390556003909101805490911690555b600c548110156137a357816001600160a01b0316600c82815481106136db57fe5b6000918252602090912001546001600160a01b0316141561379b57600c8054600019810190811061370857fe5b600091825260209091200154600c80546001600160a01b03909216918390811061372e57fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600c8054600019810190811061376957fe5b600091825260209091200180546001600160a01b0319169055600c805490613795906000198301614285565b506137a3565b6001016136ba565b507f9710c341258431a6380fd1febe8985e6b6221e8398c287ea971f2ba85a6e1a10816040516137d39190615718565b60405180910390a150565b6000546001600160a01b031681565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601181111561381c57fe5b83601381111561382857fe5b600060405161383993929190615a83565b60405180910390a182601181111561149957fe5b60005b600c548110156138ac57816001600160a01b0316600c828154811061387157fe5b6000918252602090912001546001600160a01b031614156138a45760405162461bcd60e51b8152600401610d5890615848565b600101613850565b50600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03841660009081526011602052604081205481908190600019141561393557506000915060001990508161172e565b61393d6142a9565b6001600160a01b038816600090815260076020908152604080832080548251818502810185019093528083526060938301828280156139a557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613987575b50939450600093505050505b8151811015613c595760008282815181106139c857fe5b60200260200101519050806001600160a01b031663c37f68e28d6040518263ffffffff1660e01b81526004016139fe9190615646565b60806040518083038186803b158015613a1657600080fd5b505afa158015613a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a4e9190810190614ae2565b60808901526060880152604087015293508315613a7b5750600f96506000955085945061172e9350505050565b6040850151158015613a8f57506060850151155b8015613aad57508a6001600160a01b0316816001600160a01b031614155b15613ab85750613c51565b60408051602080820183526001600160a01b0380851660009081526008835284902060010154835260c0890192909252825190810183526080880151815260e088015260048054925163fc57d4df60e01b8152929091169163fc57d4df91613b2291859101615718565b60206040518083038186803b158015613b3a57600080fd5b505afa158015613b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b729190810190614ac4565b60a08601819052613b935750600d96506000955085945061172e9350505050565b604080516020810190915260a0860151815261010086015260c085015160e0860151613bcd91613bc291613fcc565b866101000151613fcc565b610120860181905260408601518651613be79291906140ad565b855261010085015160608601516020870151613c049291906140ad565b60208601526001600160a01b03818116908c161415613c4f57613c318561012001518b87602001516140ad565b60208601819052610100860151613c49918b906140ad565b60208601525b505b6001016139b1565b506001600160a01b038a1660009081526011602052604090205415613c94576001600160a01b038a1660009081526011602052604090205483525b602083015183511115613cb9575050602081015190516000945003915082905061172e565b505080516020909101516000945084935003905061172e565b600080600080613ce287876140d5565b90925090506000826003811115613cf557fe5b14613d065750915060009050612985565b613d1081866140fe565b935093505050935093915050565b60006114998383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250614121565b6000806000613d678460008060006138ff565b9250925092509193909250565b6000613d7e614272565b613d888484614151565b90506111b281614172565b6000613d9e846116b8565b613da95760096117a7565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16613de15760006117a7565b600080613df185878660006138ff565b91935090915060009050826011811115613e0757fe5b14613e2157816011811115613e1857fe5b92505050611499565b8015613e2e576004613e18565b60009695505050505050565b6001600160a01b0382166000908152600860205260408120805460ff16613e65576009915050610f51565b6001600382015460ff166002811115613e7a57fe5b1415613f0057604051638897bd8560e01b81526001600160a01b03851690638897bd8590613eac908690600401615646565b602060405180830381600087803b158015613ec657600080fd5b505af1158015613eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613efe9190810190614ac4565b505b6001600160a01b038316600090815260028201602052604090205460ff16151560011415613f32576000915050610f51565b6001600160a01b03838116600090815260028301602090815260408083208054600160ff19909116811790915560078352818420805491820181558452919092200180546001600160a01b03191692871692909217909155517f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a590613fba9086908690615726565b60405180910390a15060009392505050565b613fd4614272565b6040518060200160405280670de0b6b3a7640000613ffa86600001518660000151614181565b8161400157fe5b0490529392505050565b614013614272565b604051806020016040528061403e6140378660000151670de0b6b3a7640000614181565b85516141c3565b90529392505050565b5190511090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561407d57fe5b84601381111561408957fe5b8460405161409993929190615aab565b60405180910390a18360118111156111b257fe5b60006140b7614272565b6140c18585614151565b9050611a0b6140cf82614172565b84613d1e565b6000808383018481106140ed576000925090506140f7565b5060029150600090505b9250929050565b6000808383116141155750600090508183036140f7565b506003905060006140f7565b600083830182858210156141485760405162461bcd60e51b8152600401610d589190615827565b50949350505050565b614159614272565b604051806020016040528061403e856000015185614181565b51670de0b6b3a7640000900490565b600061149983836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000008152506141f6565b600061149983836040518060400160405280600e81526020016d646976696465206279207a65726f60901b81525061423e565b6000831580614203575082155b1561421057506000611499565b8383028385828161421d57fe5b041483906141485760405162461bcd60e51b8152600401610d589190615827565b6000818361425f5760405162461bcd60e51b8152600401610d589190615827565b5082848161426957fe5b04949350505050565b6040518060200160405280600081525090565b815481835581811115611d7657600083815260209020611d76918101908301614313565b6040518061014001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016142e7614272565b81526020016142f4614272565b8152602001614301614272565b815260200161430e614272565b905290565b61215391905b8082111561432d5760008155600101614319565b5090565b8035610f5181615c42565b8051610f5181615c42565b600082601f83011261435857600080fd5b813561436b61436682615b6b565b615b44565b9150818183526020840193506020810190508385602084028201111561439057600080fd5b60005b838110156143bc57816143a68882614331565b8452506020928301929190910190600101614393565b5050505092915050565b600082601f8301126143d757600080fd5b81356143e561436682615b6b565b9150818183526020840193506020810190508385602084028201111561440a57600080fd5b60005b838110156143bc57816144208882614331565b845250602092830192919091019060010161440d565b60008083601f84011261444857600080fd5b50813567ffffffffffffffff81111561446057600080fd5b6020830191508360208202830111156140f757600080fd5b600082601f83011261448957600080fd5b813561449761436682615b6b565b915081818352602084019350602081019050838560208402820111156144bc57600080fd5b60005b838110156143bc57816144d28882614540565b84525060209283019291909101906001016144bf565b8035610f5181615c56565b8051610f5181615c56565b60008083601f84011261451057600080fd5b50813567ffffffffffffffff81111561452857600080fd5b6020830191508360018202830111156140f757600080fd5b8035610f5181615c5f565b8051610f5181615c5f565b8035610f5181615c68565b8035610f5181615c75565b8051610f5181615c75565b8035610f5181615c7e565b60006020828403121561459457600080fd5b60006111b28484614331565b6000602082840312156145b257600080fd5b60006111b2848461433c565b600080600080600060a086880312156145d657600080fd5b60006145e28888614331565b95505060206145f388828901614331565b945050604061460488828901614331565b935050606061461588828901614331565b925050608061462688828901614561565b9150509295509295909350565b60008060008060008060c0878903121561464c57600080fd5b60006146588989614331565b965050602061466989828a01614331565b955050604061467a89828a01614331565b945050606061468b89828a01614331565b935050608061469c89828a01614561565b92505060a06146ad89828a01614561565b9150509295509295509295565b600080600080608085870312156146d057600080fd5b60006146dc8787614331565b94505060206146ed87828801614331565b93505060406146fe87828801614331565b925050606061470f87828801614561565b91505092959194509250565b600080600080600060a0868803121561473357600080fd5b600061473f8888614331565b955050602061475088828901614331565b945050604061476188828901614331565b935050606061461588828901614561565b60008060006060848603121561478757600080fd5b60006147938686614331565b93505060206147a486828701614331565b92505060406147b586828701614561565b9150509250925092565b6000806000806000608086880312156147d757600080fd5b60006147e38888614331565b95505060206147f488828901614331565b945050604061480588828901614561565b935050606086013567ffffffffffffffff81111561482257600080fd5b61482e888289016144fe565b92509250509295509295909350565b6000806000806080858703121561485357600080fd5b600061485f8787614331565b945050602061487087828801614331565b93505060406146fe87828801614561565b6000806040838503121561489457600080fd5b60006148a08585614331565b92505060206148b185828601614540565b9150509250929050565b600080604083850312156148ce57600080fd5b60006148da8585614331565b92505060206148b185828601614556565b600080604083850312156148fe57600080fd5b600061490a8585614331565b92505060206148b185828601614561565b60006020828403121561492d57600080fd5b813567ffffffffffffffff81111561494457600080fd5b6111b284828501614347565b6000806000806040858703121561496657600080fd5b843567ffffffffffffffff81111561497d57600080fd5b61498987828801614436565b9450945050602085013567ffffffffffffffff8111156149a857600080fd5b6149b487828801614436565b95989497509550505050565b6000602082840312156149d257600080fd5b60006111b284846144e8565b6000602082840312156149f057600080fd5b60006111b284846144f3565b600060208284031215614a0e57600080fd5b60006111b28484614540565b60008060408385031215614a2d57600080fd5b6000614a398585614540565b92505060206148b1858286016144e8565b60008060408385031215614a5d57600080fd5b60006148da8585614540565b60008060408385031215614a7c57600080fd5b600061490a8585614540565b600060208284031215614a9a57600080fd5b60006111b2848461454b565b600060208284031215614ab857600080fd5b60006111b28484614561565b600060208284031215614ad657600080fd5b60006111b2848461456c565b60008060008060808587031215614af857600080fd5b6000614b04878761456c565b9450506020614b158782880161456c565b9350506040614b268782880161456c565b925050606061470f8782880161456c565b60008060408385031215614b4a57600080fd5b6000614b568585614577565b92505060206148b185828601614331565b600080600060608486031215614b7c57600080fd5b6000614b888686614577565b9350506020614b9986828701614331565b925050604084013567ffffffffffffffff811115614bb657600080fd5b6147b586828701614478565b600080600080600060a08688031215614bda57600080fd5b6000614be68888614577565b955050602086013567ffffffffffffffff811115614c0357600080fd5b614c0f888289016143c6565b945050604086013567ffffffffffffffff811115614c2c57600080fd5b614c3888828901614478565b9350506060614c49888289016144e8565b9250506080614626888289016144e8565b6000614c668383614c95565b505060200190565b6000614c668383614dcb565b6000614c668383615628565b614c8f81615bd6565b82525050565b614c8f81615b9f565b6000614ca982615b92565b614cb38185615b96565b9350614cbe83615b8c565b8060005b83811015614cec578151614cd68882614c5a565b9750614ce183615b8c565b925050600101614cc2565b509495945050505050565b6000614d0282615b92565b614d0c8185615b96565b9350614d1783615b8c565b8060005b83811015614cec578151614d2f8882614c6e565b9750614d3a83615b8c565b925050600101614d1b565b6000614d5082615b92565b614d5a8185615b96565b9350614d6583615b8c565b8060005b83811015614cec578151614d7d8882614c7a565b9750614d8883615b8c565b925050600101614d69565b614c8f81615baa565b6000614da782615b92565b614db181856112a3565b9350614dc1818560208601615c02565b9290920192915050565b614c8f81615baf565b614c8f81615be1565b614c8f81615bec565b614c8f81615bf7565b6000614dfa82615b92565b614e048185615b96565b9350614e14818560208601615c02565b614e1d81615c2e565b9093019392505050565b6000614e34601983615b96565b7f6d61726b657420737570706c7920636170207265616368656400000000000000815260200192915050565b6000614e6d601483615b96565b731b585c9ad95d08185b1c9958591e48185919195960621b815260200192915050565b6000614e9d602883615b96565b7f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f8152671d081b1a5cdd195960c21b602082015260400192915050565b6000614ee7600483615b96565b63135a5b9d60e21b815260200192915050565b6000614f07603583615b96565b7f6f6e6c792061646d696e206f7220737570706c792063617020677561726469618152746e2063616e2073657420737570706c79206361707360581b602082015260400192915050565b6000614f5e602083615b96565b7f63616e6e6f74207369657a652066726f6d20637265646974206163636f756e74815260200192915050565b6000614f97601683615b96565b756f6e6c792061646d696e2063616e20756e706175736560501b815260200192915050565b6000614fc9601f83615b96565b7f63616e6e6f74206c697175696461746520637265646974206163636f756e7400815260200192915050565b6000615002600583615b96565b645365697a6560d81b815260200192915050565b6000615023602783615b96565b7f6f6e6c7920706175736520677561726469616e20616e642061646d696e2063618152666e20706175736560c81b602082015260400192915050565b600061506c601583615b96565b741b585c9ad95d08185b1c9958591e481b1a5cdd1959605a1b815260200192915050565b600061509d602683615b96565b7f6f6e6c792061646d696e2063616e2073657420626f72726f772063617020677581526530b93234b0b760d11b602082015260400192915050565b60006150e5602383615b96565b7f63616e6e6f74207472616e7366657220746f206120637265646974206163636f8152621d5b9d60ea1b602082015260400192915050565b600061512a600683615b96565b65426f72726f7760d01b815260200192915050565b600061514c601c83615b96565b7f6f6e6c792061646d696e206d61792064656c697374206d61726b657400000000815260200192915050565b6000615185601483615b96565b731d1bdd185b14dd5c1c1b1a595cc819985a5b195960621b815260200192915050565b60006151b5601a83615b96565b7f637265646974206163636f756e742063616e6e6f74206d696e74000000000000815260200192915050565b60006151ee602683615b96565b7f6f6e6c792061646d696e2063616e2073657420737570706c792063617020677581526530b93234b0b760d11b602082015260400192915050565b6000615236601283615b96565b711d1c985b9cd9995c881a5cc81c185d5cd95960721b815260200192915050565b6000615264601183615b96565b7072656465656d546f6b656e73207a65726f60781b815260200192915050565b6000615291602483615b96565b7f6f6e6c79206a546f6b656e20636f756c6420757064617465206974732076657281526339b4b7b760e11b602082015260400192915050565b60006152d7602883615b96565b7f6f6e6c792061646d696e2063616e207365742070726f746f636f6c20637265648152671a5d081b1a5b5a5d60c21b602082015260400192915050565b6000615321603583615b96565b7f6f6e6c792061646d696e206f7220626f72726f772063617020677561726469618152746e2063616e2073657420626f72726f77206361707360581b602082015260400192915050565b6000615378601583615b96565b7418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b815260200192915050565b60006153a9602583615b96565b7f657869744d61726b65743a206765744163636f756e74536e617073686f742066815264185a5b195960da1b602082015260400192915050565b60006153f0601983615b96565b7f6d61726b657420626f72726f7720636170207265616368656400000000000000815260200192915050565b6000615429600f83615b96565b6e1cd95a5e99481a5cc81c185d5cd959608a1b815260200192915050565b6000615454600d83615b96565b6c1a5b9d985b1a59081a5b9c1d5d609a1b815260200192915050565b600061547d601083615b96565b6f6d61726b6574206e6f7420656d70747960801b815260200192915050565b60006154a9601583615b96565b7439b2b73232b91036bab9ba10313290352a37b5b2b760591b815260200192915050565b60006154da600883615b96565b672a3930b739b332b960c11b815260200192915050565b60006154fe601183615b96565b701b585c9ad95d081b9bdd081b1a5cdd1959607a1b815260200192915050565b600061552b600e83615b96565b6d1b5a5b9d081a5cc81c185d5cd95960921b815260200192915050565b6000615555601d83615b96565b7f6f6e6c792061646d696e206d617920737570706f7274206d61726b6574000000815260200192915050565b600061558e602783615b96565b7f6f6e6c7920756e6974726f6c6c65722061646d696e2063616e206368616e676581526620627261696e7360c81b602082015260400192915050565b60006155d7600983615b96565b68233630b9b43637b0b760b91b815260200192915050565b60006155fc601083615b96565b6f189bdc9c9bddc81a5cc81c185d5cd95960821b815260200192915050565b805160208301906116db84825b614c8f81612153565b614c8f81615bd0565b60006114998284614d9c565b60208101610f518284614c95565b60208101610f518284614c86565b604081016156708285614c95565b6114996020830184614c95565b6060810161568b8286614c95565b6156986020830185614c95565b6111b2604083018461561b565b604081016156b38285614c95565b6114996020830184615628565b602080825281016114998184614cf7565b602080825281016114998184614d45565b60208101610f518284614d93565b606081016156fe8286614d93565b61570b6020830185615628565b6111b26040830184614dd4565b60208101610f518284614dcb565b604081016156708285614dcb565b604081016157428285614dcb565b6114996020830184614c86565b6060810161575d8286614dcb565b61570b6020830185614dd4565b606081016157788285614dcb565b818103602083015261578981614eda565b90506114996040830184614d93565b606081016157a68285614dcb565b81810360208301526157898161511d565b606081016157c58285614dcb565b8181036020830152615789816155ca565b606081016157e48286614dcb565b6157f16020830185615628565b6111b26040830184615628565b6040810161580c8285614dcb565b6114996020830184614dcb565b60208101610f518284614de6565b602080825281016114998184614def565b60208082528101610f5181614e27565b60208082528101610f5181614e60565b60208082528101610f5181614e90565b60208082528101610f5181614efa565b60208082528101610f5181614f51565b60208082528101610f5181614f8a565b60208082528101610f5181614fbc565b604080825281016158b881614ff5565b9050610f516020830184614d93565b60208082528101610f5181615016565b60208082528101610f518161505f565b60208082528101610f5181615090565b60208082528101610f51816150d8565b60208082528101610f518161513f565b60208082528101610f5181615178565b60208082528101610f51816151a8565b60208082528101610f51816151e1565b60208082528101610f5181615229565b60208082528101610f5181615257565b60208082528101610f5181615284565b60208082528101610f51816152ca565b60208082528101610f5181615314565b60208082528101610f518161536b565b60208082528101610f518161539c565b60208082528101610f51816153e3565b60208082528101610f518161541c565b60208082528101610f5181615447565b60208082528101610f5181615470565b60208082528101610f518161549c565b604080825281016158b8816154cd565b60208082528101610f51816154f1565b60208082528101610f518161551e565b60208082528101610f5181615548565b60208082528101610f5181615581565b60208082528101610f51816155ef565b60208101610f518284615628565b604081016156b38285615628565b60608101615a918286615628565b615a9e6020830185615628565b6111b26040830184614ddd565b606081016157e48286615628565b604081016156708285615631565b60608101615ad58286615631565b615ae26020830185614c95565b8181036040830152611a0b8184614cf7565b60a08101615b028288615631565b8181036020830152615b148187614c9e565b90508181036040830152615b288186614cf7565b9050615b376060830185614d93565b612bd86080830184614d93565b60405181810167ffffffffffffffff81118282101715615b6357600080fd5b604052919050565b600067ffffffffffffffff821115615b8257600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000610f5182615bc4565b151590565b6000610f5182615b9f565b806112a381615c38565b6001600160a01b031690565b60ff1690565b6000610f5182615baf565b6000610f5182615bba565b6000610f5182612153565b6000610f5182615bd0565b60005b83811015615c1d578181015183820152602001615c05565b838111156116db5750506000910152565b601f01601f191690565b6003811061108857fe5b615c4b81615b9f565b811461108857600080fd5b615c4b81615baa565b615c4b81615baf565b6003811061108857600080fd5b615c4b81612153565b615c4b81615bd056fea365627a7a72315820698955ae98fb951bc54a02c44b1b94de06b18d43cb19268ca682102347631cc56c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x6080604052600436106104315760003560e01c8063607ef6c111610229578063b0772d0b1161012e578063d82ecc48116100b6578063e87554461161007a578063e875544614610c94578063eabe7d9114610ca9578063ede4edd014610cc9578063f349760014610ce9578063f851a44014610d0957610431565b8063d82ecc4814610bff578063da3d454c14610c1f578063dce1544914610c3f578063e4028eee14610c5f578063e6653f3d14610c7f57610431565b8063bdcdc258116100fd578063bdcdc25814610b44578063c299823814610b64578063c488847b14610b91578063d02f735114610bbf578063d672d3e214610bdf57610431565b8063b0772d0b14610acf578063b1ab78e614610ae4578063b1e1af2414610b04578063bc93082b14610b2457610431565b80638805714b116101b157806399bc18731161018057806399bc187314610a43578063a979f0c514610a63578063abfceffc14610a78578063ac0b0bb714610aa5578063acc2166a14610aba57610431565b80638805714b146109c15780638e8f294b146109d45780638ebf636414610a03578063929fe9a114610a2357610431565b8063731f0c2b116101f8578063731f0c2b14610942578063744532ae14610962578063796b89b9146109825780637dc0d1d01461099757806387f76303146109ac57610431565b8063607ef6c1146108cc5780636a56947e146108ec5780636d154ea5146109075780636d35bf911461092757610431565b80633d98a1e51161033a57806351a485e4116102c25780635c60da1b116102865780635c60da1b146108375780635c7786051461084c5780635ec88c791461086c5780635f5af1aa1461088c5780635fc7e71e146108ac57610431565b806351a485e41461078a57806351dff989146107aa57806352d84d1e146107ca57806355ee1fe1146107f75780635c254d111461081757610431565b80634a584432116103095780634a584432146106e65780634ada90af146107065780634e79238f1461071b5780634ef4c3e11461074a5780634fd42e171461076a57610431565b80633d98a1e51461067157806340e6dcc51461069157806341c728b9146106a657806347ef3b3b146106c657610431565b806326782247116103bd57806338b8f4c31161038c57806338b8f4c3146105e7578063391957d714610607578063396f7b23146106275780633bcf7ec11461063c5780633c94786f1461065c57610431565b806326782247146105725780632d70db7814610587578063317b0b77146105a757806336bdd087146105c757610431565b80631d504dc6116104045780631d504dc6146104db5780631ededc91146104fb57806321af45691461051b57806324008a621461053d57806324a3d6221461055d57610431565b806302c3bcbb1461043657806303c03f0f1461046c5780630952c5631461048e57806318c882a5146104ae575b600080fd5b34801561044257600080fd5b50610456610451366004614582565b610d1e565b6040516104639190615a67565b60405180910390f35b34801561047857600080fd5b5061048c6104873660046148bb565b610d30565b005b34801561049a57600080fd5b5061048c6104a9366004614b37565b610deb565b3480156104ba57600080fd5b506104ce6104c9366004614a1a565b610e53565b60405161046391906156e2565b3480156104e757600080fd5b5061048c6104f63660046149fc565b610f57565b34801561050757600080fd5b5061048c61051636600461471b565b61108b565b34801561052757600080fd5b50610530611092565b6040516104639190615646565b34801561054957600080fd5b506104566105583660046146ba565b6110a1565b34801561056957600080fd5b506105306111ba565b34801561057e57600080fd5b506105306111c9565b34801561059357600080fd5b506104ce6105a23660046149c0565b6111d8565b3480156105b357600080fd5b506104566105c2366004614aa6565b6112a8565b3480156105d357600080fd5b506104566105e2366004614a4a565b611319565b3480156105f357600080fd5b5061048c610602366004614582565b6114a0565b34801561061357600080fd5b5061048c610622366004614582565b611529565b34801561063357600080fd5b506105306115a6565b34801561064857600080fd5b506104ce610657366004614a1a565b6115b5565b34801561066857600080fd5b506104ce6116a8565b34801561067d57600080fd5b506104ce61068c366004614582565b6116b8565b34801561069d57600080fd5b506104ce6116d6565b3480156106b257600080fd5b5061048c6106c136600461483d565b6116db565b3480156106d257600080fd5b5061048c6106e1366004614633565b6116e1565b3480156106f257600080fd5b50610456610701366004614582565b6116e6565b34801561071257600080fd5b506104566116f8565b34801561072757600080fd5b5061073b61073636600461483d565b6116fe565b60405161046393929190615aab565b34801561075657600080fd5b50610456610765366004614772565b611738565b34801561077657600080fd5b50610456610785366004614aa6565b611a14565b34801561079657600080fd5b5061048c6107a5366004614950565b611a6d565b3480156107b657600080fd5b5061048c6107c536600461483d565b611bb9565b3480156107d657600080fd5b506107ea6107e5366004614aa6565b611be4565b6040516104639190615718565b34801561080357600080fd5b506104566108123660046149fc565b611c0b565b34801561082357600080fd5b50610456610832366004614582565b611c7d565b34801561084357600080fd5b50610530611d67565b34801561085857600080fd5b5061048c610867366004614772565b611d76565b34801561087857600080fd5b5061073b610887366004614582565b611d7b565b34801561089857600080fd5b506104566108a7366004614582565b611db0565b3480156108b857600080fd5b506104566108c73660046145be565b611e24565b3480156108d857600080fd5b5061048c6108e7366004614950565b611f82565b3480156108f857600080fd5b5061048c6106c13660046146ba565b34801561091357600080fd5b506104ce610922366004614582565b6120c5565b34801561093357600080fd5b5061048c6105163660046145be565b34801561094e57600080fd5b506104ce61095d366004614582565b6120da565b34801561096e57600080fd5b5061048c61097d366004614b67565b6120ef565b34801561098e57600080fd5b50610456612151565b3480156109a357600080fd5b506107ea612156565b3480156109b857600080fd5b506104ce612165565b61048c6109cf366004614bc2565b612175565b3480156109e057600080fd5b506109f46109ef366004614582565b6121e6565b604051610463939291906156f0565b348015610a0f57600080fd5b506104ce610a1e3660046149c0565b61220c565b348015610a2f57600080fd5b506104ce610a3e366004614881565b6122cc565b348015610a4f57600080fd5b50610456610a5e366004614582565b6122ff565b348015610a6f57600080fd5b50610530612311565b348015610a8457600080fd5b50610a98610a93366004614582565b612320565b60405161046391906156c0565b348015610ab157600080fd5b506104ce6123a9565b348015610ac657600080fd5b506105306123b9565b348015610adb57600080fd5b50610a986123c8565b348015610af057600080fd5b506104ce610aff3660046147bf565b61242a565b348015610b1057600080fd5b506104ce610b1f366004614a1a565b61244d565b348015610b3057600080fd5b5061048c610b3f3660046148eb565b612540565b348015610b5057600080fd5b50610456610b5f3660046146ba565b6125b7565b348015610b7057600080fd5b50610b84610b7f36600461491b565b6126bc565b60405161046391906156d1565b348015610b9d57600080fd5b50610bb1610bac366004614772565b612753565b604051610463929190615a75565b348015610bcb57600080fd5b50610456610bda3660046145be565b61298d565b348015610beb57600080fd5b506104ce610bfa366004614582565b612be2565b348015610c0b57600080fd5b506104ce610c1a366004614582565b612bf7565b348015610c2b57600080fd5b50610456610c3a366004614772565b612c14565b348015610c4b57600080fd5b506107ea610c5a3660046148eb565b612fc2565b348015610c6b57600080fd5b50610456610c7a366004614a69565b612ff7565b348015610c8b57600080fd5b506104ce61319c565b348015610ca057600080fd5b506104566131ac565b348015610cb557600080fd5b50610456610cc4366004614772565b6131b2565b348015610cd557600080fd5b50610456610ce4366004614582565b6131cf565b348015610cf557600080fd5b5061048c610d043660046149fc565b613535565b348015610d1557600080fd5b506105306137de565b60106020526000908152604090205481565b336001600160a01b03831614610d615760405162461bcd60e51b8152600401610d5890615967565b60405180910390fd5b610d6a826116b8565b15610de7576001600160a01b0382166000908152600860205260409020600301805460ff811691839160ff19166001836002811115610da557fe5b02179055507f558960558f6e261a396bbd1ff5293b87f450019866e91b3579650bc3b6bcb00d838284604051610ddd9392919061574f565b60405180910390a1505b5050565b601354604051630952c56360e01b81526001600160a01b0390911690630952c56390610e1d9085908590600401615ab9565b600060405180830381600087803b158015610e3757600080fd5b505af1158015610e4b573d6000803e3d6000fd5b505050505050565b6000610e5e836116b8565b610e7a5760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b0316331480610e9d57506000546001600160a01b031633145b610eb95760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b0316331480610ed457506001821515145b610ef05760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b0383166000908152600b602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f469085908590615798565b60405180910390a150805b92915050565b806001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc891908101906145a0565b6001600160a01b0316336001600160a01b031614610ff85760405162461bcd60e51b8152600401610d5890615a47565b806001600160a01b031663c1e803346040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106b9190810190614ac4565b156110885760405162461bcd60e51b8152600401610d5890615997565b50565b5050505050565b600d546001600160a01b031681565b60006110ac856116b8565b6110b8575060096111b2565b6110c0614272565b6040518060200160405280876001600160a01b031663aa5af0fd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113c9190810190614ac4565b9052601354604051639c39e29360e01b81529192506001600160a01b031690639c39e293906111739089908890869060040161567d565b600060405180830381600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b50600092506111ae915050565b9150505b949350505050565b6009546001600160a01b031681565b6001546001600160a01b031681565b6009546000906001600160a01b03163314806111fe57506000546001600160a01b031633145b61121a5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061123557506001821515145b6112515760405162461bcd60e51b8152600401610d5890615888565b6009805460ff60b81b1916600160b81b841515021790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de0906112989084906158a8565b60405180910390a150805b919050565b600080546001600160a01b031633146112ce576112c7600160046137ed565b90506112a3565b60058054908390556040517f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9906113089083908690615a75565b60405180910390a160009392505050565b600080546001600160a01b031633146113445760405162461bcd60e51b8152600401610d5890615a37565b61134d836116b8565b1561136a5760405162461bcd60e51b8152600401610d58906158d7565b826001600160a01b031663406de0b66040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a357600080fd5b505afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113db91908101906149de565b5060408051606081018252600181526000602082015290810183600281111561140057fe5b90526001600160a01b0384166000908152600860209081526040918290208351815490151560ff199182161782559184015160018083019190915592840151600382018054929491939092169083600281111561145957fe5b021790555090505061146a8361384d565b7fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f836040516113089190615718565b9392505050565b6000546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610d5890615937565b600f80546001600160a01b038381166001600160a01b03198316179092556040519116907fb0d3622c24ac9bd967d8f37a25808b3e668fe7ed4f3075bbe82842d3e287c0449061151d9083908590615662565b60405180910390a15050565b6000546001600160a01b031633146115535760405162461bcd60e51b8152600401610d58906158e7565b600d80546001600160a01b038381166001600160a01b03198316179092556040519116907feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e299061151d9083908590615662565b6003546001600160a01b031681565b60006115c0836116b8565b6115dc5760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b03163314806115ff57506000546001600160a01b031633145b61161b5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061163657506001821515145b6116525760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b0383166000908152600a602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f46908590859061576a565b600954600160a01b900460ff1681565b6001600160a01b031660009081526008602052604090205460ff1690565b600181565b50505050565b610e4b565b600e6020526000908152604090205481565b60065481565b6000806000806000806117138a8a8a8a6138ff565b92509250925082601181111561172557fe5b95509093509150505b9450945094915050565b6001600160a01b0383166000908152600a602052604081205460ff16156117715760405162461bcd60e51b8152600401610d5890615a27565b61177a83612bf7565b156117975760405162461bcd60e51b8152600401610d5890615927565b6117a0846116b8565b6117ae5760095b9050611499565b6001600160a01b038416600090815260106020526040902054801561199e576000856001600160a01b0316633b1d21a26040518163ffffffff1660e01b815260040160206040518083038186803b15801561180857600080fd5b505afa15801561181c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118409190810190614ac4565b90506000866001600160a01b03166347bd37186040518163ffffffff1660e01b815260040160206040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118b59190810190614ac4565b90506000876001600160a01b0316638f840ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f257600080fd5b505afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061192a9190810190614ac4565b905060008061193a858585613cd2565b9092509050600082600381111561194d57fe5b1461196a5760405162461bcd60e51b8152600401610d5890615917565b6000611976828a613d1e565b90508681106119975760405162461bcd60e51b8152600401610d5890615838565b5050505050505b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd906119d09088908890600401615662565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b5060009250611a0b915050565b95945050505050565b600080546001600160a01b03163314611a33576112c76001600b6137ed565b60068054908390556040517faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316906113089083908690615a75565b6000546001600160a01b0316331480611a905750600f546001600160a01b031633145b611aac5760405162461bcd60e51b8152600401610d5890615868565b82818115801590611abc57508082145b611ad85760405162461bcd60e51b8152600401610d58906159d7565b60005b82811015611bb057848482818110611aef57fe5b9050602002013560106000898985818110611b0657fe5b9050602002016020611b1b91908101906149fc565b6001600160a01b03168152602081019190915260400160002055868682818110611b4157fe5b9050602002016020611b5691908101906149fc565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f8868684818110611b8c57fe5b90506020020135604051611ba09190615a67565b60405180910390a2600101611adb565b50505050505050565b80158015611bc75750600082115b156116db5760405162461bcd60e51b8152600401610d5890615957565b600c8181548110611bf157fe5b6000918252602090912001546001600160a01b0316905081565b600080546001600160a01b03163314611c2a576112c7600160106137ed565b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e229061130890839086906157fe565b600080546001600160a01b03163314611c975760016112c7565b6000826001600160a01b0316600080604051602401611cb69190615819565b60408051601f198184030181529181526020820180516001600160e01b031663204a7f0760e21b17905251611ceb919061563a565b60006040518083038185875af1925050503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b5050905080611d4057600e9150506112a3565b5050601380546001600160a01b0319166001600160a01b0392909216919091179055600090565b6002546001600160a01b031681565b505050565b600080600080600080611d928760008060006138ff565b925092509250826011811115611da457fe5b97919650945092505050565b600080546001600160a01b03163314611dcf576112c7600160136137ed565b600980546001600160a01b038481166001600160a01b031983161792839055604051918116927f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e926113089285921690615662565b6000611e2f83612bf7565b15611e4c5760405162461bcd60e51b8152600401610d5890615898565b611e55866116b8565b1580611e675750611e65856116b8565b155b15611e765760095b9050611a0b565b600080611e8285613d54565b91935090915060009050826011811115611e9857fe5b14611eb257816011811115611ea957fe5b92505050611a0b565b80611ebe576003611ea9565b6040516395dd919360e01b81526000906001600160a01b038a16906395dd919390611eed908990600401615646565b60206040518083038186803b158015611f0557600080fd5b505afa158015611f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f3d9190810190614ac4565b90506000611f5b604051806020016040528060055481525083613d74565b905080861115611f72576011945050505050611a0b565b5060009998505050505050505050565b6000546001600160a01b0316331480611fa55750600d546001600160a01b031633145b611fc15760405162461bcd60e51b8152600401610d5890615987565b82818115801590611fd157508082145b611fed5760405162461bcd60e51b8152600401610d58906159d7565b60005b82811015611bb05784848281811061200457fe5b90506020020135600e600089898581811061201b57fe5b905060200201602061203091908101906149fc565b6001600160a01b0316815260208101919091526040016000205586868281811061205657fe5b905060200201602061206b91908101906149fc565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f68686848181106120a157fe5b905060200201356040516120b59190615a67565b60405180910390a2600101611ff0565b600b6020526000908152604090205460ff1681565b600a6020526000908152604090205460ff1681565b601354604051633a22995760e11b81526001600160a01b039091169063744532ae9061212390869086908690600401615ac7565b600060405180830381600087803b15801561213d57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b425b90565b6004546001600160a01b031681565b600954600160b01b900460ff1681565b601354604051638805714b60e01b81526001600160a01b0390911690638805714b906121ad9088908890889088908890600401615af4565b600060405180830381600087803b1580156121c757600080fd5b505af11580156121db573d6000803e3d6000fd5b505050505050505050565b60086020526000908152604090208054600182015460039092015460ff91821692911683565b6009546000906001600160a01b031633148061223257506000546001600160a01b031633145b61224e5760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b031633148061226957506001821515145b6122855760405162461bcd60e51b8152600401610d5890615888565b6009805460ff60b01b1916600160b01b841515021790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090611298908490615a07565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b60116020526000908152604090205481565b600f546001600160a01b031681565b60608060076000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561239c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161237e575b5093979650505050505050565b600954600160b81b900460ff1681565b6013546001600160a01b031681565b6060600c80548060200260200160405190810160405280929190818152602001828054801561242057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612402575b5050505050905090565b505050506001600160a01b031660009081526012602052604090205460ff161590565b6000612458836116b8565b6124745760405162461bcd60e51b8152600401610d5890615858565b6009546001600160a01b031633148061249757506000546001600160a01b031633145b6124b35760405162461bcd60e51b8152600401610d58906158c7565b6000546001600160a01b03163314806124ce57506001821515145b6124ea5760405162461bcd60e51b8152600401610d5890615888565b6001600160a01b03831660009081526012602052604090819020805460ff1916841515179055517f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b090610f4690859085906157b7565b6000546001600160a01b0316331461256a5760405162461bcd60e51b8152600401610d5890615977565b6001600160a01b03821660009081526011602052604090819020829055517facba5197b02f201109f99752a9adb58c2598809f6acb3c34b7f1445f0cbeee879061151d90849084906156a5565b600954600090600160b01b900460ff16156125e45760405162461bcd60e51b8152600401610d5890615947565b6125ed83612bf7565b1561260a5760405162461bcd60e51b8152600401610d58906158f7565b6000612617868685613d93565b905080156126265790506111b2565b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd906126589089908990600401615662565b600060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b505060135460405163670e8afd60e01b81526001600160a01b03909116925063670e8afd91506111739089908890600401615662565b60606000825190506060816040519080825280602002602001820160405280156126f0578160200160208202803883390190505b50905060005b8281101561274b57600085828151811061270c57fe5b602002602001015190506127208133613e3a565b601181111561272b57fe5b83838151811061273757fe5b6020908102919091010152506001016126f6565b509392505050565b6004805460405163fc57d4df60e01b8152600092839283926001600160a01b039091169163fc57d4df91612789918a9101615718565b60206040518083038186803b1580156127a157600080fd5b505afa1580156127b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127d99190810190614ac4565b6004805460405163fc57d4df60e01b81529293506000926001600160a01b039091169163fc57d4df9161280e918a9101615718565b60206040518083038186803b15801561282657600080fd5b505afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061285e9190810190614ac4565b905081158061286b575080155b1561288057600d935060009250612985915050565b6000866001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156128bb57600080fd5b505afa1580156128cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128f39190810190614ac4565b90506128fd614272565b6129256040518060200160405280600654815250604051806020016040528087815250613fcc565b905061292f614272565b612955604051806020016040528086815250604051806020016040528086815250613fcc565b905061295f614272565b612969838361400b565b90506000612977828b613d74565b600099509750505050505050505b935093915050565b600954600090600160b81b900460ff16156129ba5760405162461bcd60e51b8152600401610d58906159c7565b6129c383612bf7565b156129e05760405162461bcd60e51b8152600401610d5890615878565b6129e9866116b8565b15806129fb57506129f9856116b8565b155b15612a07576009611e6f565b846001600160a01b0316636330533c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a4057600080fd5b505afa158015612a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a789190810190614a88565b6001600160a01b0316866001600160a01b0316636330533c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612aba57600080fd5b505afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af29190810190614a88565b6001600160a01b031614612b07576002611e6f565b60135460405163670e8afd60e01b81526001600160a01b039091169063670e8afd90612b399089908790600401615662565b600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b505060135460405163670e8afd60e01b81526001600160a01b03909116925063670e8afd9150612b9d9089908890600401615662565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b5060009250612bd8915050565b9695505050505050565b60126020526000908152604090205460ff1681565b6001600160a01b0316600090815260116020526040902054151590565b6001600160a01b0383166000908152600b602052604081205460ff1615612c4d5760405162461bcd60e51b8152600401610d5890615a57565b612c56846116b8565b612c615760096117a7565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612d2457336001600160a01b03851614612cba5760405162461bcd60e51b8152600401610d58906159f7565b6000612cc68585613e3a565b90506000816011811115612cd657fe5b14612cef57806011811115612ce757fe5b915050611499565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612d2257fe5b505b6004805460405163fc57d4df60e01b81526001600160a01b039091169163fc57d4df91612d5391889101615718565b60206040518083038186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612da39190810190614ac4565b612dae57600d6117a7565b6001600160a01b0384166000908152600e60205260409020548015612e72576000856001600160a01b03166347bd37186040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0857600080fd5b505afa158015612e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e409190810190614ac4565b90506000612e4e8286613d1e565b9050828110612e6f5760405162461bcd60e51b8152600401610d58906159b7565b50505b600080612e8286886000886138ff565b91935090915060009050826011811115612e9857fe5b14612eb357816011811115612ea957fe5b9350505050611499565b8015612ec0576004612ea9565b612ec8614272565b6040518060200160405280896001600160a01b031663aa5af0fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0c57600080fd5b505afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f449190810190614ac4565b9052601354604051639c39e29360e01b81529192506001600160a01b031690639c39e29390612f7b908b908b90869060040161567d565b600060405180830381600087803b158015612f9557600080fd5b505af1158015612fa9573d6000803e3d6000fd5b5060009250612fb6915050565b98975050505050505050565b60076020528160005260406000208181548110612fdb57fe5b6000918252602090912001546001600160a01b03169150829050565b600080546001600160a01b0316331461301d57613016600160066137ed565b9050610f51565b6001600160a01b0383166000908152600860205260409020805460ff166130525761304a600960076137ed565b915050610f51565b61305a614272565b506040805160208101909152838152613071614272565b506040805160208101909152670c7d713b49da000081526130928183614047565b156130ad576130a3600660086137ed565b9350505050610f51565b841580159061313857506004805460405163fc57d4df60e01b81526001600160a01b039091169163fc57d4df916130e6918a9101615718565b60206040518083038186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131369190810190614ac4565b155b15613149576130a3600d60096137ed565b600183018054908690556040517f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59061318790899084908a906157d6565b60405180910390a16000979650505050505050565b600954600160a81b900460ff1681565b60055481565b6000806131c0858585613d93565b9050801561199e579050611499565b6000808290506000806000836001600160a01b031663c37f68e2336040518263ffffffff1660e01b81526004016132069190615654565b60806040518083038186803b15801561321e57600080fd5b505afa158015613232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132569190810190614ae2565b509250925092508260001461327d5760405162461bcd60e51b8152600401610d58906159a7565b801561329a5761328f600c60026137ed565b9450505050506112a3565b60006132a7873385613d93565b905080156132c8576132bc600e60038361404e565b955050505050506112a3565b6001600160a01b03871660009081526008602052604090206001600382015460ff1660028111156132f557fe5b141561335a57604051638b35776b60e01b81526001600160a01b03891690638b35776b90613327903390600401615654565b600060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050505b33600090815260028201602052604090205460ff1661338257600096505050505050506112a3565b3360009081526002820160209081526040808320805460ff1916905560078252918290208054835181840281018401909452808452606093928301828280156133f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116133d6575b5050835193945083925060009150505b8281101561344957896001600160a01b031684828151811061342257fe5b60200260200101516001600160a01b0316141561344157809150613449565b600101613404565b5081811061345357fe5b33600090815260076020526040902080546000190182146134d95780548190600019810190811061348057fe5b9060005260206000200160009054906101000a90046001600160a01b03168183815481106134aa57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80546134e9826000198301614285565b507fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d8a3360405161351b929190615734565b60405180910390a160009c9b505050505050505050505050565b6000546001600160a01b0316331461355f5760405162461bcd60e51b8152600401610d5890615907565b613568816116b8565b6135845760405162461bcd60e51b8152600401610d5890615a17565b806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135bd57600080fd5b505afa1580156135d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135f59190810190614ac4565b156136125760405162461bcd60e51b8152600401610d58906159e7565b806001600160a01b031663406de0b66040518163ffffffff1660e01b815260040160206040518083038186803b15801561364b57600080fd5b505afa15801561365f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061368391908101906149de565b506001600160a01b0381166000908152600860205260408120805460ff199081168255600182018390556003909101805490911690555b600c548110156137a357816001600160a01b0316600c82815481106136db57fe5b6000918252602090912001546001600160a01b0316141561379b57600c8054600019810190811061370857fe5b600091825260209091200154600c80546001600160a01b03909216918390811061372e57fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600c8054600019810190811061376957fe5b600091825260209091200180546001600160a01b0319169055600c805490613795906000198301614285565b506137a3565b6001016136ba565b507f9710c341258431a6380fd1febe8985e6b6221e8398c287ea971f2ba85a6e1a10816040516137d39190615718565b60405180910390a150565b6000546001600160a01b031681565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601181111561381c57fe5b83601381111561382857fe5b600060405161383993929190615a83565b60405180910390a182601181111561149957fe5b60005b600c548110156138ac57816001600160a01b0316600c828154811061387157fe5b6000918252602090912001546001600160a01b031614156138a45760405162461bcd60e51b8152600401610d5890615848565b600101613850565b50600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03841660009081526011602052604081205481908190600019141561393557506000915060001990508161172e565b61393d6142a9565b6001600160a01b038816600090815260076020908152604080832080548251818502810185019093528083526060938301828280156139a557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613987575b50939450600093505050505b8151811015613c595760008282815181106139c857fe5b60200260200101519050806001600160a01b031663c37f68e28d6040518263ffffffff1660e01b81526004016139fe9190615646565b60806040518083038186803b158015613a1657600080fd5b505afa158015613a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a4e9190810190614ae2565b60808901526060880152604087015293508315613a7b5750600f96506000955085945061172e9350505050565b6040850151158015613a8f57506060850151155b8015613aad57508a6001600160a01b0316816001600160a01b031614155b15613ab85750613c51565b60408051602080820183526001600160a01b0380851660009081526008835284902060010154835260c0890192909252825190810183526080880151815260e088015260048054925163fc57d4df60e01b8152929091169163fc57d4df91613b2291859101615718565b60206040518083038186803b158015613b3a57600080fd5b505afa158015613b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b729190810190614ac4565b60a08601819052613b935750600d96506000955085945061172e9350505050565b604080516020810190915260a0860151815261010086015260c085015160e0860151613bcd91613bc291613fcc565b866101000151613fcc565b610120860181905260408601518651613be79291906140ad565b855261010085015160608601516020870151613c049291906140ad565b60208601526001600160a01b03818116908c161415613c4f57613c318561012001518b87602001516140ad565b60208601819052610100860151613c49918b906140ad565b60208601525b505b6001016139b1565b506001600160a01b038a1660009081526011602052604090205415613c94576001600160a01b038a1660009081526011602052604090205483525b602083015183511115613cb9575050602081015190516000945003915082905061172e565b505080516020909101516000945084935003905061172e565b600080600080613ce287876140d5565b90925090506000826003811115613cf557fe5b14613d065750915060009050612985565b613d1081866140fe565b935093505050935093915050565b60006114998383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250614121565b6000806000613d678460008060006138ff565b9250925092509193909250565b6000613d7e614272565b613d888484614151565b90506111b281614172565b6000613d9e846116b8565b613da95760096117a7565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16613de15760006117a7565b600080613df185878660006138ff565b91935090915060009050826011811115613e0757fe5b14613e2157816011811115613e1857fe5b92505050611499565b8015613e2e576004613e18565b60009695505050505050565b6001600160a01b0382166000908152600860205260408120805460ff16613e65576009915050610f51565b6001600382015460ff166002811115613e7a57fe5b1415613f0057604051638897bd8560e01b81526001600160a01b03851690638897bd8590613eac908690600401615646565b602060405180830381600087803b158015613ec657600080fd5b505af1158015613eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613efe9190810190614ac4565b505b6001600160a01b038316600090815260028201602052604090205460ff16151560011415613f32576000915050610f51565b6001600160a01b03838116600090815260028301602090815260408083208054600160ff19909116811790915560078352818420805491820181558452919092200180546001600160a01b03191692871692909217909155517f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a590613fba9086908690615726565b60405180910390a15060009392505050565b613fd4614272565b6040518060200160405280670de0b6b3a7640000613ffa86600001518660000151614181565b8161400157fe5b0490529392505050565b614013614272565b604051806020016040528061403e6140378660000151670de0b6b3a7640000614181565b85516141c3565b90529392505050565b5190511090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561407d57fe5b84601381111561408957fe5b8460405161409993929190615aab565b60405180910390a18360118111156111b257fe5b60006140b7614272565b6140c18585614151565b9050611a0b6140cf82614172565b84613d1e565b6000808383018481106140ed576000925090506140f7565b5060029150600090505b9250929050565b6000808383116141155750600090508183036140f7565b506003905060006140f7565b600083830182858210156141485760405162461bcd60e51b8152600401610d589190615827565b50949350505050565b614159614272565b604051806020016040528061403e856000015185614181565b51670de0b6b3a7640000900490565b600061149983836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000008152506141f6565b600061149983836040518060400160405280600e81526020016d646976696465206279207a65726f60901b81525061423e565b6000831580614203575082155b1561421057506000611499565b8383028385828161421d57fe5b041483906141485760405162461bcd60e51b8152600401610d589190615827565b6000818361425f5760405162461bcd60e51b8152600401610d589190615827565b5082848161426957fe5b04949350505050565b6040518060200160405280600081525090565b815481835581811115611d7657600083815260209020611d76918101908301614313565b6040518061014001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016142e7614272565b81526020016142f4614272565b8152602001614301614272565b815260200161430e614272565b905290565b61215391905b8082111561432d5760008155600101614319565b5090565b8035610f5181615c42565b8051610f5181615c42565b600082601f83011261435857600080fd5b813561436b61436682615b6b565b615b44565b9150818183526020840193506020810190508385602084028201111561439057600080fd5b60005b838110156143bc57816143a68882614331565b8452506020928301929190910190600101614393565b5050505092915050565b600082601f8301126143d757600080fd5b81356143e561436682615b6b565b9150818183526020840193506020810190508385602084028201111561440a57600080fd5b60005b838110156143bc57816144208882614331565b845250602092830192919091019060010161440d565b60008083601f84011261444857600080fd5b50813567ffffffffffffffff81111561446057600080fd5b6020830191508360208202830111156140f757600080fd5b600082601f83011261448957600080fd5b813561449761436682615b6b565b915081818352602084019350602081019050838560208402820111156144bc57600080fd5b60005b838110156143bc57816144d28882614540565b84525060209283019291909101906001016144bf565b8035610f5181615c56565b8051610f5181615c56565b60008083601f84011261451057600080fd5b50813567ffffffffffffffff81111561452857600080fd5b6020830191508360018202830111156140f757600080fd5b8035610f5181615c5f565b8051610f5181615c5f565b8035610f5181615c68565b8035610f5181615c75565b8051610f5181615c75565b8035610f5181615c7e565b60006020828403121561459457600080fd5b60006111b28484614331565b6000602082840312156145b257600080fd5b60006111b2848461433c565b600080600080600060a086880312156145d657600080fd5b60006145e28888614331565b95505060206145f388828901614331565b945050604061460488828901614331565b935050606061461588828901614331565b925050608061462688828901614561565b9150509295509295909350565b60008060008060008060c0878903121561464c57600080fd5b60006146588989614331565b965050602061466989828a01614331565b955050604061467a89828a01614331565b945050606061468b89828a01614331565b935050608061469c89828a01614561565b92505060a06146ad89828a01614561565b9150509295509295509295565b600080600080608085870312156146d057600080fd5b60006146dc8787614331565b94505060206146ed87828801614331565b93505060406146fe87828801614331565b925050606061470f87828801614561565b91505092959194509250565b600080600080600060a0868803121561473357600080fd5b600061473f8888614331565b955050602061475088828901614331565b945050604061476188828901614331565b935050606061461588828901614561565b60008060006060848603121561478757600080fd5b60006147938686614331565b93505060206147a486828701614331565b92505060406147b586828701614561565b9150509250925092565b6000806000806000608086880312156147d757600080fd5b60006147e38888614331565b95505060206147f488828901614331565b945050604061480588828901614561565b935050606086013567ffffffffffffffff81111561482257600080fd5b61482e888289016144fe565b92509250509295509295909350565b6000806000806080858703121561485357600080fd5b600061485f8787614331565b945050602061487087828801614331565b93505060406146fe87828801614561565b6000806040838503121561489457600080fd5b60006148a08585614331565b92505060206148b185828601614540565b9150509250929050565b600080604083850312156148ce57600080fd5b60006148da8585614331565b92505060206148b185828601614556565b600080604083850312156148fe57600080fd5b600061490a8585614331565b92505060206148b185828601614561565b60006020828403121561492d57600080fd5b813567ffffffffffffffff81111561494457600080fd5b6111b284828501614347565b6000806000806040858703121561496657600080fd5b843567ffffffffffffffff81111561497d57600080fd5b61498987828801614436565b9450945050602085013567ffffffffffffffff8111156149a857600080fd5b6149b487828801614436565b95989497509550505050565b6000602082840312156149d257600080fd5b60006111b284846144e8565b6000602082840312156149f057600080fd5b60006111b284846144f3565b600060208284031215614a0e57600080fd5b60006111b28484614540565b60008060408385031215614a2d57600080fd5b6000614a398585614540565b92505060206148b1858286016144e8565b60008060408385031215614a5d57600080fd5b60006148da8585614540565b60008060408385031215614a7c57600080fd5b600061490a8585614540565b600060208284031215614a9a57600080fd5b60006111b2848461454b565b600060208284031215614ab857600080fd5b60006111b28484614561565b600060208284031215614ad657600080fd5b60006111b2848461456c565b60008060008060808587031215614af857600080fd5b6000614b04878761456c565b9450506020614b158782880161456c565b9350506040614b268782880161456c565b925050606061470f8782880161456c565b60008060408385031215614b4a57600080fd5b6000614b568585614577565b92505060206148b185828601614331565b600080600060608486031215614b7c57600080fd5b6000614b888686614577565b9350506020614b9986828701614331565b925050604084013567ffffffffffffffff811115614bb657600080fd5b6147b586828701614478565b600080600080600060a08688031215614bda57600080fd5b6000614be68888614577565b955050602086013567ffffffffffffffff811115614c0357600080fd5b614c0f888289016143c6565b945050604086013567ffffffffffffffff811115614c2c57600080fd5b614c3888828901614478565b9350506060614c49888289016144e8565b9250506080614626888289016144e8565b6000614c668383614c95565b505060200190565b6000614c668383614dcb565b6000614c668383615628565b614c8f81615bd6565b82525050565b614c8f81615b9f565b6000614ca982615b92565b614cb38185615b96565b9350614cbe83615b8c565b8060005b83811015614cec578151614cd68882614c5a565b9750614ce183615b8c565b925050600101614cc2565b509495945050505050565b6000614d0282615b92565b614d0c8185615b96565b9350614d1783615b8c565b8060005b83811015614cec578151614d2f8882614c6e565b9750614d3a83615b8c565b925050600101614d1b565b6000614d5082615b92565b614d5a8185615b96565b9350614d6583615b8c565b8060005b83811015614cec578151614d7d8882614c7a565b9750614d8883615b8c565b925050600101614d69565b614c8f81615baa565b6000614da782615b92565b614db181856112a3565b9350614dc1818560208601615c02565b9290920192915050565b614c8f81615baf565b614c8f81615be1565b614c8f81615bec565b614c8f81615bf7565b6000614dfa82615b92565b614e048185615b96565b9350614e14818560208601615c02565b614e1d81615c2e565b9093019392505050565b6000614e34601983615b96565b7f6d61726b657420737570706c7920636170207265616368656400000000000000815260200192915050565b6000614e6d601483615b96565b731b585c9ad95d08185b1c9958591e48185919195960621b815260200192915050565b6000614e9d602883615b96565b7f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f8152671d081b1a5cdd195960c21b602082015260400192915050565b6000614ee7600483615b96565b63135a5b9d60e21b815260200192915050565b6000614f07603583615b96565b7f6f6e6c792061646d696e206f7220737570706c792063617020677561726469618152746e2063616e2073657420737570706c79206361707360581b602082015260400192915050565b6000614f5e602083615b96565b7f63616e6e6f74207369657a652066726f6d20637265646974206163636f756e74815260200192915050565b6000614f97601683615b96565b756f6e6c792061646d696e2063616e20756e706175736560501b815260200192915050565b6000614fc9601f83615b96565b7f63616e6e6f74206c697175696461746520637265646974206163636f756e7400815260200192915050565b6000615002600583615b96565b645365697a6560d81b815260200192915050565b6000615023602783615b96565b7f6f6e6c7920706175736520677561726469616e20616e642061646d696e2063618152666e20706175736560c81b602082015260400192915050565b600061506c601583615b96565b741b585c9ad95d08185b1c9958591e481b1a5cdd1959605a1b815260200192915050565b600061509d602683615b96565b7f6f6e6c792061646d696e2063616e2073657420626f72726f772063617020677581526530b93234b0b760d11b602082015260400192915050565b60006150e5602383615b96565b7f63616e6e6f74207472616e7366657220746f206120637265646974206163636f8152621d5b9d60ea1b602082015260400192915050565b600061512a600683615b96565b65426f72726f7760d01b815260200192915050565b600061514c601c83615b96565b7f6f6e6c792061646d696e206d61792064656c697374206d61726b657400000000815260200192915050565b6000615185601483615b96565b731d1bdd185b14dd5c1c1b1a595cc819985a5b195960621b815260200192915050565b60006151b5601a83615b96565b7f637265646974206163636f756e742063616e6e6f74206d696e74000000000000815260200192915050565b60006151ee602683615b96565b7f6f6e6c792061646d696e2063616e2073657420737570706c792063617020677581526530b93234b0b760d11b602082015260400192915050565b6000615236601283615b96565b711d1c985b9cd9995c881a5cc81c185d5cd95960721b815260200192915050565b6000615264601183615b96565b7072656465656d546f6b656e73207a65726f60781b815260200192915050565b6000615291602483615b96565b7f6f6e6c79206a546f6b656e20636f756c6420757064617465206974732076657281526339b4b7b760e11b602082015260400192915050565b60006152d7602883615b96565b7f6f6e6c792061646d696e2063616e207365742070726f746f636f6c20637265648152671a5d081b1a5b5a5d60c21b602082015260400192915050565b6000615321603583615b96565b7f6f6e6c792061646d696e206f7220626f72726f772063617020677561726469618152746e2063616e2073657420626f72726f77206361707360581b602082015260400192915050565b6000615378601583615b96565b7418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b815260200192915050565b60006153a9602583615b96565b7f657869744d61726b65743a206765744163636f756e74536e617073686f742066815264185a5b195960da1b602082015260400192915050565b60006153f0601983615b96565b7f6d61726b657420626f72726f7720636170207265616368656400000000000000815260200192915050565b6000615429600f83615b96565b6e1cd95a5e99481a5cc81c185d5cd959608a1b815260200192915050565b6000615454600d83615b96565b6c1a5b9d985b1a59081a5b9c1d5d609a1b815260200192915050565b600061547d601083615b96565b6f6d61726b6574206e6f7420656d70747960801b815260200192915050565b60006154a9601583615b96565b7439b2b73232b91036bab9ba10313290352a37b5b2b760591b815260200192915050565b60006154da600883615b96565b672a3930b739b332b960c11b815260200192915050565b60006154fe601183615b96565b701b585c9ad95d081b9bdd081b1a5cdd1959607a1b815260200192915050565b600061552b600e83615b96565b6d1b5a5b9d081a5cc81c185d5cd95960921b815260200192915050565b6000615555601d83615b96565b7f6f6e6c792061646d696e206d617920737570706f7274206d61726b6574000000815260200192915050565b600061558e602783615b96565b7f6f6e6c7920756e6974726f6c6c65722061646d696e2063616e206368616e676581526620627261696e7360c81b602082015260400192915050565b60006155d7600983615b96565b68233630b9b43637b0b760b91b815260200192915050565b60006155fc601083615b96565b6f189bdc9c9bddc81a5cc81c185d5cd95960821b815260200192915050565b805160208301906116db84825b614c8f81612153565b614c8f81615bd0565b60006114998284614d9c565b60208101610f518284614c95565b60208101610f518284614c86565b604081016156708285614c95565b6114996020830184614c95565b6060810161568b8286614c95565b6156986020830185614c95565b6111b2604083018461561b565b604081016156b38285614c95565b6114996020830184615628565b602080825281016114998184614cf7565b602080825281016114998184614d45565b60208101610f518284614d93565b606081016156fe8286614d93565b61570b6020830185615628565b6111b26040830184614dd4565b60208101610f518284614dcb565b604081016156708285614dcb565b604081016157428285614dcb565b6114996020830184614c86565b6060810161575d8286614dcb565b61570b6020830185614dd4565b606081016157788285614dcb565b818103602083015261578981614eda565b90506114996040830184614d93565b606081016157a68285614dcb565b81810360208301526157898161511d565b606081016157c58285614dcb565b8181036020830152615789816155ca565b606081016157e48286614dcb565b6157f16020830185615628565b6111b26040830184615628565b6040810161580c8285614dcb565b6114996020830184614dcb565b60208101610f518284614de6565b602080825281016114998184614def565b60208082528101610f5181614e27565b60208082528101610f5181614e60565b60208082528101610f5181614e90565b60208082528101610f5181614efa565b60208082528101610f5181614f51565b60208082528101610f5181614f8a565b60208082528101610f5181614fbc565b604080825281016158b881614ff5565b9050610f516020830184614d93565b60208082528101610f5181615016565b60208082528101610f518161505f565b60208082528101610f5181615090565b60208082528101610f51816150d8565b60208082528101610f518161513f565b60208082528101610f5181615178565b60208082528101610f51816151a8565b60208082528101610f51816151e1565b60208082528101610f5181615229565b60208082528101610f5181615257565b60208082528101610f5181615284565b60208082528101610f51816152ca565b60208082528101610f5181615314565b60208082528101610f518161536b565b60208082528101610f518161539c565b60208082528101610f51816153e3565b60208082528101610f518161541c565b60208082528101610f5181615447565b60208082528101610f5181615470565b60208082528101610f518161549c565b604080825281016158b8816154cd565b60208082528101610f51816154f1565b60208082528101610f518161551e565b60208082528101610f5181615548565b60208082528101610f5181615581565b60208082528101610f51816155ef565b60208101610f518284615628565b604081016156b38285615628565b60608101615a918286615628565b615a9e6020830185615628565b6111b26040830184614ddd565b606081016157e48286615628565b604081016156708285615631565b60608101615ad58286615631565b615ae26020830185614c95565b8181036040830152611a0b8184614cf7565b60a08101615b028288615631565b8181036020830152615b148187614c9e565b90508181036040830152615b288186614cf7565b9050615b376060830185614d93565b612bd86080830184614d93565b60405181810167ffffffffffffffff81118282101715615b6357600080fd5b604052919050565b600067ffffffffffffffff821115615b8257600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000610f5182615bc4565b151590565b6000610f5182615b9f565b806112a381615c38565b6001600160a01b031690565b60ff1690565b6000610f5182615baf565b6000610f5182615bba565b6000610f5182612153565b6000610f5182615bd0565b60005b83811015615c1d578181015183820152602001615c05565b838111156116db5750506000910152565b601f01601f191690565b6003811061108857fe5b615c4b81615b9f565b811461108857600080fd5b615c4b81615baa565b615c4b81615baf565b6003811061108857600080fd5b615c4b81612153565b615c4b81615bd056fea365627a7a72315820698955ae98fb951bc54a02c44b1b94de06b18d43cb19268ca682102347631cc56c6578706572696d656e74616cf564736f6c63430005100040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
