{
  "_format": "hh-sol-artifact-1",
  "contractName": "PerpPortal",
  "sourceName": "contracts/lens/PerpPortal.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clearingHouseConfigArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "accountBalanceArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "exchangeArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "orderBookArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "insuranceFundArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "marketRegistryArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "vaultArg",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "getAccountBalance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getAccountInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int256",
              "name": "takerPositionSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "takerOpenNotional",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthGlobalX96",
              "type": "int256"
            }
          ],
          "internalType": "struct AccountMarket.Info",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getAccountLeverage",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getAccountValue",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getAllPendingFundingPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getBalance",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getBase",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getBaseTokens",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClearingHouse",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClearingHouseConfig",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExchange",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getFeeRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getFreeCollateral",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "ratio",
          "type": "uint24"
        }
      ],
      "name": "getFreeCollateralByRatio",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInsuranceFund",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getInsuranceFundFeeRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLiquidationPenaltyRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getLiquidationPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "twPremiumX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "twPremiumDivBySqrtPriceX96",
              "type": "int256"
            }
          ],
          "internalType": "struct Funding.Growth",
          "name": "fundingGrowthGlobal",
          "type": "tuple"
        }
      ],
      "name": "getLiquidityCoefficientInFundingPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "liquidityCoefficientInFundingPayment",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getMarginRequirementForLiquidation",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getMarketInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "exchangeFeeRatio",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "uniswapFeeRatio",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "insuranceFundFeeRatio",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "maxPriceSpreadRatio",
              "type": "uint24"
            }
          ],
          "internalType": "struct IMarketRegistry.MarketInfo",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMarketRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxFundingRate",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxMarketsPerAccount",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxOrdersPerMarket",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getMaxTickCrossedWithinBlock",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMmRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "lowerTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upperTick",
          "type": "int24"
        }
      ],
      "name": "getOpenOrder",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "lastFeeGrowthInsideX128",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthBelowX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "baseDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteDebt",
              "type": "uint256"
            }
          ],
          "internalType": "struct OpenOrder.Info",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "orderId",
          "type": "bytes32"
        }
      ],
      "name": "getOpenOrderById",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "lastFeeGrowthInsideX128",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthBelowX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "baseDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteDebt",
              "type": "uint256"
            }
          ],
          "internalType": "struct OpenOrder.Info",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getOpenOrderIds",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOrderBook",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPartialCloseRatio",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "lowerTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upperTick",
          "type": "int24"
        }
      ],
      "name": "getPendingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getPendingFundingPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getPnlAndPendingFee",
      "outputs": [
        {
          "internalType": "int256",
          "name": "owedRealizedPnl",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "unrealizedPnl",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "pendingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "int256",
              "name": "base",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quote",
              "type": "int256"
            }
          ],
          "internalType": "struct IExchange.RealizePnlParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getPnlToBeRealized",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getQuote",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getQuoteToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSettlementToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSettlementTokenBalanceCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "twapInterval",
          "type": "uint32"
        }
      ],
      "name": "getSqrtMarkTwapX96",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "twapInterval",
          "type": "uint32"
        }
      ],
      "name": "getSqrtMarketTwapX96",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "",
          "type": "uint160"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getTakerOpenNotional",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getTakerPositionSize",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getTotalAbsPositionValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getTotalDebtValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getTotalOpenNotional",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fetchBase",
          "type": "bool"
        }
      ],
      "name": "getTotalOrderDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getTotalPositionSize",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getTotalPositionValue",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "baseTokens",
          "type": "address[]"
        }
      ],
      "name": "getTotalQuoteBalanceAndPendingFee",
      "outputs": [
        {
          "internalType": "int256",
          "name": "totalQuoteAmountInPools",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "totalPendingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fetchBase",
          "type": "bool"
        }
      ],
      "name": "getTotalTokenAmountInPoolAndPendingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalPendingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTwapInterval",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getUniswapV3Factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "hasOrder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "hasOrder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "hasPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "orderId",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "base",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "quote",
          "type": "int256"
        }
      ],
      "name": "updateOrderDebt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vaultDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620031e8380380620031e88339810160408190526200003491620000e3565b600080546001600160a01b03199081166001600160a01b039a8b1617909155600180548216988a16989098179097556002805488169689169690961790955560038054871694881694909417909355600480548616928716929092179091556005805485169186169190911790556006805484169185169190911790556007805490921692169190911790556200018a565b80516001600160a01b0381168114620000de57600080fd5b919050565b600080600080600080600080610100898b03121562000100578384fd5b6200010b89620000c6565b97506200011b60208a01620000c6565b96506200012b60408a01620000c6565b95506200013b60608a01620000c6565b94506200014b60808a01620000c6565b93506200015b60a08a01620000c6565b92506200016b60c08a01620000c6565b91506200017b60e08a01620000c6565b90509295985092959890939650565b61304e806200019a6000396000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c80638d928af8116101ff578063c39994441161011a578063eaad2354116100ad578063f807cd221161007c578063f807cd22146107f3578063f8b2cb4f146107fb578063fb112d6c1461080e578063fedf924b14610821576103c5565b8063eaad2354146107b2578063ece090c4146107c5578063edd0b5cb146107cd578063f75c266d146107e0576103c5565b8063cb3c7b8e116100e9578063cb3c7b8e14610779578063d0581a931461078c578063d50d01b71461079f578063dc7e7e1614610632576103c5565b8063c399944414610743578063c575ff7914610756578063c66b8ed21461075e578063cb379aa214610766576103c5565b8063b081983b11610192578063b394569011610161578063b3945690146106e8578063b3bd6e12146106fb578063bba85bcf1461070e578063bbe4f6db14610730576103c5565b8063b081983b146106b0578063b0c04174146106b8578063b248c4ef146106cd578063b2e27148146106d5576103c5565b8063a8549402116101ce578063a854940214610660578063aa2a829414610668578063acf7182714610670578063af74e73614610690576103c5565b80638d928af81461062a57806399e4a771146106325780639d6179c314610645578063a24e9e361461064d576103c5565b806347b52fb7116102ef57806368f12e12116102825780637a5b45a0116102515780637a5b45a0146105e95780637c2b7c53146105fc57806380f57f111461060f57806385eacc7714610622576103c5565b806368f12e12146105b35780636ccdc82e146105c65780636e1d2dd2146105d957806374283336146105e1576103c5565b80635ae80951116102be5780635ae80951146105575780635d8a541d1461056a5780636332fef61461058b5780636896fabf146105ab576103c5565b806347b52fb7146105215780634a64d67d146105345780634dffaee51461053c578063543ce73a1461054f576103c5565b806329386b7b116103675780633e742e3b116103365780633e742e3b146104c65780633f935107146104db5780633ffd1303146104ee578063436933ea14610501576103c5565b806329386b7b14610483578063293a5077146104965780632c47ccba146104a957806334ce998a146104be576103c5565b806312803c7d116103a357806312803c7d146104335780631393a46914610448578063158626f7146104685780631867b48014610470576103c5565b806308ff49ad146103ca5780630cf85bcc146103f35780631246dbf514610413575b600080fd5b6103dd6103d83660046124bd565b610829565b6040516103ea9190612ebb565b60405180910390f35b6104066104013660046124bd565b6108b2565b6040516103ea9190612e35565b6104266104213660046124bd565b61093a565b6040516103ea9190612d2b565b61043b6109bb565b6040516103ea9190612b5c565b61045b610456366004612a8e565b610a3d565b6040516103ea9190612d36565b61043b610abe565b61045b61047e3660046124f5565b610acd565b6103dd6104913660046124bd565b610e40565b61045b6104a43660046124bd565b610e71565b6104b1610ea2565b6040516103ea9190612edc565b61045b610f1f565b6104ce610f9c565b6040516103ea9190612ecb565b61045b6104e93660046124f5565b611019565b61045b6104fc3660046126d2565b6110a3565b61051461050f3660046124f5565b6110d6565b6040516103ea9190612cf3565b61045b61052f3660046125d2565b61115e565b61043b6111ec565b61042661054a366004612650565b61123b565b6103dd6112c1565b61045b6105653660046124bd565b61133e565b61057d61057836600461252d565b61136f565b6040516103ea929190612d55565b61059e6105993660046124f5565b611400565b6040516103ea9190612d9a565b61043b61148a565b61045b6105c13660046124f5565b611499565b61045b6105d43660046124bd565b6114cc565b6103dd6114fd565b6103dd611542565b61045b6105f73660046124f5565b611587565b61045b61060a36600461252d565b6115ba565b61045b61061d3660046124bd565b6115f0565b61045b611621565b61043b611666565b61043b6106403660046126ff565b611675565b6104b16116f8565b61045b61065b3660046124bd565b61173d565b6103dd61189b565b61043b6118e0565b61068361067e36600461286a565b6118ef565b6040516103ea9190612dbb565b6106a361069e3660046124bd565b611977565b6040516103ea9190612ca6565b61043b6119fc565b6106cb6106c6366004612882565b611a4b565b005b61043b611ab5565b61045b6106e33660046124f5565b611ac4565b61045b6106f63660046124f5565b611af7565b61045b6107093660046124f5565b611b2a565b61072161071c3660046124bd565b611b5d565b6040516103ea93929190612d3f565b61043b61073e3660046124bd565b611bef565b61045b6107513660046124bd565b611c70565b61043b611ca1565b61043b611cb0565b61045b6107743660046124f5565b611cbf565b6104266107873660046124bd565b611cf2565b61057d61079a366004612650565b611d23565b61045b6107ad3660046124f5565b611d59565b6106836107c0366004612577565b611d8c565b6104b1611e23565b6103dd6107db3660046124bd565b611e68565b61045b6107ee3660046124bd565b611e99565b61043b611eca565b61045b6108093660046124bd565b611ed9565b61045b61081c366004612577565b611f0a565b6103dd611f92565b6006546040516308ff49ad60e01b81526000916001600160a01b0316906308ff49ad9061085a908590600401612b5c565b60206040518083038186803b15801561087257600080fd5b505afa158015610886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa9190612afc565b90505b919050565b6108ba6123f1565b60065460405163033e16f360e21b81526001600160a01b0390911690630cf85bcc906108ea908590600401612b5c565b60a06040518083038186803b15801561090257600080fd5b505afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906129fd565b600654604051631246dbf560e01b81526000916001600160a01b031690631246dbf59061096b908590600401612b5c565b60206040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa919061284e565b600754604080516312803c7d60e01b815290516000926001600160a01b0316916312803c7d916004808301926020929190829003018186803b158015610a0057600080fd5b505afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906124d9565b905090565b600354604051631393a46960e01b81526000916001600160a01b031690631393a46990610a6e908590600401612e82565b60206040518083038186803b158015610a8657600080fd5b505afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906128ad565b6005546001600160a01b031690565b60008054604051635ae8095160e01b815282916001600160a01b031690635ae8095190610afe908790600401612b5c565b60206040518083038186803b158015610b1657600080fd5b505afa158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e91906128ad565b600254604051633478970960e11b81529192506000916001600160a01b03909116906368f12e1290610b869088908890600401612b70565b60206040518083038186803b158015610b9e57600080fd5b505afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906128ad565b905080610be857600092505050610e3a565b60025460405163175be70560e21b81526000916001600160a01b031690635d6f9c1490610c19908890600401612b5c565b60206040518083038186803b158015610c3157600080fd5b505afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6991906128ad565b600254604051633666e41760e11b81529192506000916001600160a01b0390911690636ccdc82e90610c9f908a90600401612b5c565b60206040518083038186803b158015610cb757600080fd5b505afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef91906128ad565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663a85494026040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4157600080fd5b505afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190612afc565b90506000808513610d9c57610d9782620f42400162ffffff16611fd7565b610daf565b610daf82620f42400362ffffff16611fd7565b90506000610dcf610dc8610dc38686612023565b611fd7565b8890612038565b90506000610de18784620f424061209d565b90506000610e13610e0483610dfe86670de0b6b3a7640000612141565b906121ea565b610e0d89611fd7565b90612038565b90506000811215610e25576000610e2e565b610e2e816122a2565b99505050505050505050505b92915050565b6003546040516329386b7b60e01b81526000916001600160a01b0316906329386b7b9061085a908590600401612b5c565b60025460405163293a507760e01b81526000916001600160a01b03169063293a507790610a6e908590600401612b5c565b60015460408051631623e65d60e11b815290516000926001600160a01b031691632c47ccba916004808301926020929190829003018186803b158015610ee757600080fd5b505afa158015610efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612b34565b60075460408051631a674cc560e11b815290516000926001600160a01b0316916334ce998a916004808301926020929190829003018186803b158015610f6457600080fd5b505afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906128ad565b60015460408051633e742e3b60e01b815290516000926001600160a01b031691633e742e3b916004808301926020929190829003018186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612b18565b600254604051633f93510760e01b81526000916001600160a01b031690633f9351079061104c9086908690600401612b70565b60206040518083038186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c91906128ad565b9392505050565b600754604051633ffd130360e01b81526000916001600160a01b031690633ffd13039061104c9086908690600401612c69565b600480546040516321b499f560e11b81526060926001600160a01b039092169163436933ea9161110a918791879101612b70565b60006040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261109c91908101906127ca565b600480546040516347b52fb760e01b81526000926001600160a01b03909216916347b52fb7916111949188918891889101612bdd565b60206040518083038186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e491906128ad565b949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b0316634a64d67d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0057600080fd5b60048054604051634dffaee560e01b81526000926001600160a01b0390921691634dffaee5916112719188918891889101612c0d565b60206040518083038186803b15801561128957600080fd5b505afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e4919061284e565b60015460408051632a1e739d60e11b815290516000926001600160a01b03169163543ce73a916004808301926020929190829003018186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612afc565b60008054604051635ae8095160e01b81526001600160a01b0390911690635ae8095190610a6e908590600401612b5c565b60048054604051635d8a541d60e01b815260009283926001600160a01b031691635d8a541d916113a59189918991899101612b8a565b604080518083038186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906128f2565b91509150935093915050565b61140861241f565b6002546040516331997f7b60e11b81526001600160a01b0390911690636332fef69061143a9086908690600401612b70565b60606040518083038186803b15801561145257600080fd5b505afa158015611466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612915565b6002546001600160a01b031690565b600254604051633478970960e11b81526000916001600160a01b0316906368f12e129061104c9086908690600401612b70565b600254604051633666e41760e11b81526000916001600160a01b031690636ccdc82e90610a6e908590600401612b5c565b6001546040805163370e96e960e11b815290516000926001600160a01b031691636e1d2dd2916004808301926020929190829003018186803b15801561130657600080fd5b60015460408051633a14199b60e11b815290516000926001600160a01b0316916374283336916004808301926020929190829003018186803b15801561130657600080fd5b6002546040516303d2da2d60e51b81526000916001600160a01b031690637a5b45a09061104c9086908690600401612b70565b60048054604051637c2b7c5360e01b81526000926001600160a01b0390921691637c2b7c53916111949188918891889101612b8a565b6003546040516380f57f1160e01b81526000916001600160a01b0316906380f57f1190610a6e908590600401612b5c565b600154604080516385eacc7760e01b815290516000926001600160a01b0316916385eacc77916004808301926020929190829003018186803b158015610f6457600080fd5b6007546001600160a01b031690565b600354604051636e3f3f0b60e11b81526000916001600160a01b03169063dc7e7e16906116a89086908690600401612c87565b60206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c91906124d9565b6007546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610ee757600080fd5b60008054604051635ae8095160e01b815282916001600160a01b031690635ae809519061176e908690600401612b5c565b60206040518083038186803b15801561178657600080fd5b505afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be91906128ad565b600254604051633666e41760e11b81529192506000916001600160a01b0390911690636ccdc82e906117f4908790600401612b5c565b60206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184491906128ad565b905081158015611852575080155b15611862576000925050506108ad565b6000821361187657600019925050506108ad565b6111e4670de0b6b3a764000061188b846122a2565b61189484611fd7565b919061209d565b6001546040805163542a4a0160e11b815290516000926001600160a01b03169163a8549402916004808301926020929190829003018186803b15801561130657600080fd5b6001546001600160a01b031690565b6118f7612440565b6004805460405163acf7182760e01b81526001600160a01b039091169163acf718279161192691869101612d36565b6101206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa919061296a565b6002546040516357ba739b60e11b81526060916001600160a01b03169063af74e736906119a8908590600401612b5c565b60006040518083038186803b1580156119c057600080fd5b505afa1580156119d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa919081019061272c565b60008060009054906101000a90046001600160a01b03166001600160a01b031663b081983b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0057600080fd5b60048054604051632c30105d60e21b81526001600160a01b039091169163b0c0417491611a7e9187918791879101612d3f565b600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b50505050505050565b6004546001600160a01b031690565b60025460405163165c4e2960e31b81526000916001600160a01b03169063b2e271489061104c9086908690600401612b70565b600254604051630b39456960e41b81526000916001600160a01b03169063b39456909061104c9086908690600401612b70565b6002546040516359deb70960e11b81526000916001600160a01b03169063b3bd6e129061104c9086908690600401612b70565b60025460405163bba85bcf60e01b8152600091829182916001600160a01b03169063bba85bcf90611b92908790600401612b5c565b60606040518083038186803b158015611baa57600080fd5b505afa158015611bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be291906128c5565b9250925092509193909250565b60065460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db90611c20908590600401612b5c565b60206040518083038186803b158015611c3857600080fd5b505afa158015611c4c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906124d9565b6007546040516330e6651160e21b81526000916001600160a01b03169063c399944490610a6e908590600401612b5c565b6000546001600160a01b031690565b6006546001600160a01b031690565b60035460405163659bcd5160e11b81526000916001600160a01b03169063cb379aa29061104c9086908690600401612b70565b60025460405163659e3dc760e11b81526000916001600160a01b03169063cb3c7b8e9061096b908590600401612b5c565b6004805460405163d0581a9360e01b815260009283926001600160a01b03169163d0581a93916113a59189918991899101612c0d565b60025460405163d50d01b760e01b81526000916001600160a01b03169063d50d01b79061104c9086908690600401612b70565b611d94612440565b60048054604051633aab48d560e21b81526001600160a01b039091169163eaad235491611dc991899189918991899101612bae565b6101206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a919061296a565b95945050505050565b60065460408051633b38243160e21b815290516000926001600160a01b03169163ece090c4916004808301926020929190829003018186803b158015610ee757600080fd5b60065460405163edd0b5cb60e01b81526000916001600160a01b03169063edd0b5cb9061085a908590600401612b5c565b60025460405163f75c266d60e01b81526000916001600160a01b03169063f75c266d90610a6e908590600401612b5c565b6003546001600160a01b031690565b60075460405163f8b2cb4f60e01b81526000916001600160a01b03169063f8b2cb4f90610a6e908590600401612b5c565b60048054604051633ec44b5b60e21b81526000926001600160a01b039092169163fb112d6c91611f4291899189918991899101612bae565b60206040518083038186803b158015611f5a57600080fd5b505afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a91906128ad565b6001546040805163fedf924b60e01b815290516000926001600160a01b03169163fedf924b916004808301926020929190829003018186803b15801561130657600080fd5b60006001600160ff1b0382111561201f5760405162461bcd60e51b8152600401808060200182810382526028815260200180612fcd6028913960400191505060405180910390fd5b5090565b600061109c838362ffffff16620f42406122f9565b600081830381831280159061204d5750838113155b80612062575060008312801561206257508381135b61109c5760405162461bcd60e51b8152600401808060200182810382526024815260200180612ff56024913960400191505060405180910390fd5b600080600085126120ae57846120b7565b6120b7856123a8565b905060008085126120c857846120d1565b6120d1856123a8565b9050600080871280156120e45750600086135b806120fa57506000871380156120fa5750600086125b612105576000612108565b60015b905060006121178484886122f9565b90508161212c5761212781611fd7565b612135565b612135816123dd565b98975050505050505050565b60008261215057506000610e3a565b826000191480156121645750600160ff1b82145b156121a05760405162461bcd60e51b8152600401808060200182810382526027815260200180612fa66027913960400191505060405180910390fd5b828202828482816121ad57fe5b051461109c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612fa66027913960400191505060405180910390fd5b60008161223e576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156122525750600160ff1b83145b1561228e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f856021913960400191505060405180910390fd5b600082848161229957fe5b05949350505050565b60008082121561201f576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600080806000198587098686029250828110908390030390508061232f576000841161232457600080fd5b50829004905061109c565b80841161233b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000600160ff1b82136123d65760405162461bcd60e51b81526004016123cd90612d63565b60405180910390fd5b5060000390565b60006123e882611fd7565b60000392915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b60405180610120016040528060006001600160801b03168152602001600060020b8152602001600060020b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516108ad81612f52565b80516001600160801b03811681146108ad57600080fd5b6000602082840312156124ce578081fd5b813561109c81612f2c565b6000602082840312156124ea578081fd5b815161109c81612f2c565b60008060408385031215612507578081fd5b823561251281612f2c565b9150602083013561252281612f2c565b809150509250929050565b600080600060608486031215612541578081fd5b833561254c81612f2c565b9250602084013561255c81612f2c565b9150604084013561256c81612f44565b809150509250925092565b6000806000806080858703121561258c578182fd5b843561259781612f2c565b935060208501356125a781612f2c565b925060408501356125b781612f52565b915060608501356125c781612f52565b939692955090935050565b600080600083850360808112156125e7578182fd5b84356125f281612f2c565b9350602085013561260281612f2c565b92506040603f1982011215612615578182fd5b506040516040810181811067ffffffffffffffff8211171561263357fe5b604090815285013581526060909401356020850152509093909250565b600080600060408486031215612664578081fd5b833561266f81612f2c565b9250602084013567ffffffffffffffff8082111561268b578283fd5b818601915086601f83011261269e578283fd5b8135818111156126ac578384fd5b87602080830285010111156126bf578384fd5b6020830194508093505050509250925092565b600080604083850312156126e4578182fd5b82356126ef81612f2c565b9150602083013561252281612f61565b60008060408385031215612711578182fd5b823561271c81612f2c565b9150602083013561252281612f72565b6000602080838503121561273e578182fd5b825167ffffffffffffffff811115612754578283fd5b8301601f81018513612764578283fd5b805161277761277282612f0e565b612eea565b8181528381019083850185840285018601891015612793578687fd5b8694505b838510156127be5780516127aa81612f2c565b835260019490940193918501918501612797565b50979650505050505050565b600060208083850312156127dc578182fd5b825167ffffffffffffffff8111156127f2578283fd5b8301601f81018513612802578283fd5b805161281061277282612f0e565b818152838101908385018584028501860189101561282c578687fd5b8694505b838510156127be578051835260019490940193918501918501612830565b60006020828403121561285f578081fd5b815161109c81612f44565b60006020828403121561287b578081fd5b5035919050565b600080600060608486031215612896578081fd5b505081359360208301359350604090920135919050565b6000602082840312156128be578081fd5b5051919050565b6000806000606084860312156128d9578081fd5b8351925060208401519150604084015190509250925092565b60008060408385031215612904578182fd5b505080516020909101519092909150565b600060608284031215612926578081fd5b6040516060810181811067ffffffffffffffff8211171561294357fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600061012080838503121561297d578182fd5b61298681612eea565b9050612991836124a6565b815261299f6020840161249b565b60208201526129b06040840161249b565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b600060a08284031215612a0e578081fd5b60405160a0810181811067ffffffffffffffff82111715612a2b57fe5b6040528251612a3981612f2c565b81526020830151612a4981612f61565b60208201526040830151612a5c81612f61565b60408201526060830151612a6f81612f61565b60608201526080830151612a8281612f61565b60808201529392505050565b600060808284031215612a9f578081fd5b6040516080810181811067ffffffffffffffff82111715612abc57fe5b6040528235612aca81612f2c565b81526020830135612ada81612f2c565b6020820152604083810135908201526060928301359281019290925250919050565b600060208284031215612b0d578081fd5b815161109c81612f61565b600060208284031215612b29578081fd5b815161109c81612f72565b600060208284031215612b45578081fd5b815160ff8116811461109c578182fd5b60020b9052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039485168152929093166020830152600290810b60408301529190910b606082015260800190565b6001600160a01b039384168152919092166020808301919091528251604083015290910151606082015260800190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b87811015612c5c578435612c4881612f2c565b841682529382019390820190600101612c35565b5098975050505050505050565b6001600160a01b0392909216825262ffffff16602082015260400190565b6001600160a01b0392909216825263ffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612ce75783516001600160a01b031683529284019291840191600101612cc2565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612ce757835183529284019291840191600101612d0f565b901515815260200190565b90815260200190565b9283526020830191909152604082015260600190565b918252602082015260400190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b6000610120820190506001600160801b038351168252602083015160020b60208301526040830151612df06040840182612b55565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b81516001600160a01b03908116825260208084015190911690820152604080830151908201526060918201519181019190915260800190565b62ffffff91909116815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f0657fe5b604052919050565b600067ffffffffffffffff821115612f2257fe5b5060209081020190565b6001600160a01b0381168114612f4157600080fd5b50565b8015158114612f4157600080fd5b8060020b8114612f4157600080fd5b62ffffff81168114612f4157600080fd5b63ffffffff81168114612f4157600080fdfe5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f775369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220410b36a647592b7bcc5cf3aa8cb38b1be0e0d244069be2b62c99e9fb3edd331964736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103c55760003560e01c80638d928af8116101ff578063c39994441161011a578063eaad2354116100ad578063f807cd221161007c578063f807cd22146107f3578063f8b2cb4f146107fb578063fb112d6c1461080e578063fedf924b14610821576103c5565b8063eaad2354146107b2578063ece090c4146107c5578063edd0b5cb146107cd578063f75c266d146107e0576103c5565b8063cb3c7b8e116100e9578063cb3c7b8e14610779578063d0581a931461078c578063d50d01b71461079f578063dc7e7e1614610632576103c5565b8063c399944414610743578063c575ff7914610756578063c66b8ed21461075e578063cb379aa214610766576103c5565b8063b081983b11610192578063b394569011610161578063b3945690146106e8578063b3bd6e12146106fb578063bba85bcf1461070e578063bbe4f6db14610730576103c5565b8063b081983b146106b0578063b0c04174146106b8578063b248c4ef146106cd578063b2e27148146106d5576103c5565b8063a8549402116101ce578063a854940214610660578063aa2a829414610668578063acf7182714610670578063af74e73614610690576103c5565b80638d928af81461062a57806399e4a771146106325780639d6179c314610645578063a24e9e361461064d576103c5565b806347b52fb7116102ef57806368f12e12116102825780637a5b45a0116102515780637a5b45a0146105e95780637c2b7c53146105fc57806380f57f111461060f57806385eacc7714610622576103c5565b806368f12e12146105b35780636ccdc82e146105c65780636e1d2dd2146105d957806374283336146105e1576103c5565b80635ae80951116102be5780635ae80951146105575780635d8a541d1461056a5780636332fef61461058b5780636896fabf146105ab576103c5565b806347b52fb7146105215780634a64d67d146105345780634dffaee51461053c578063543ce73a1461054f576103c5565b806329386b7b116103675780633e742e3b116103365780633e742e3b146104c65780633f935107146104db5780633ffd1303146104ee578063436933ea14610501576103c5565b806329386b7b14610483578063293a5077146104965780632c47ccba146104a957806334ce998a146104be576103c5565b806312803c7d116103a357806312803c7d146104335780631393a46914610448578063158626f7146104685780631867b48014610470576103c5565b806308ff49ad146103ca5780630cf85bcc146103f35780631246dbf514610413575b600080fd5b6103dd6103d83660046124bd565b610829565b6040516103ea9190612ebb565b60405180910390f35b6104066104013660046124bd565b6108b2565b6040516103ea9190612e35565b6104266104213660046124bd565b61093a565b6040516103ea9190612d2b565b61043b6109bb565b6040516103ea9190612b5c565b61045b610456366004612a8e565b610a3d565b6040516103ea9190612d36565b61043b610abe565b61045b61047e3660046124f5565b610acd565b6103dd6104913660046124bd565b610e40565b61045b6104a43660046124bd565b610e71565b6104b1610ea2565b6040516103ea9190612edc565b61045b610f1f565b6104ce610f9c565b6040516103ea9190612ecb565b61045b6104e93660046124f5565b611019565b61045b6104fc3660046126d2565b6110a3565b61051461050f3660046124f5565b6110d6565b6040516103ea9190612cf3565b61045b61052f3660046125d2565b61115e565b61043b6111ec565b61042661054a366004612650565b61123b565b6103dd6112c1565b61045b6105653660046124bd565b61133e565b61057d61057836600461252d565b61136f565b6040516103ea929190612d55565b61059e6105993660046124f5565b611400565b6040516103ea9190612d9a565b61043b61148a565b61045b6105c13660046124f5565b611499565b61045b6105d43660046124bd565b6114cc565b6103dd6114fd565b6103dd611542565b61045b6105f73660046124f5565b611587565b61045b61060a36600461252d565b6115ba565b61045b61061d3660046124bd565b6115f0565b61045b611621565b61043b611666565b61043b6106403660046126ff565b611675565b6104b16116f8565b61045b61065b3660046124bd565b61173d565b6103dd61189b565b61043b6118e0565b61068361067e36600461286a565b6118ef565b6040516103ea9190612dbb565b6106a361069e3660046124bd565b611977565b6040516103ea9190612ca6565b61043b6119fc565b6106cb6106c6366004612882565b611a4b565b005b61043b611ab5565b61045b6106e33660046124f5565b611ac4565b61045b6106f63660046124f5565b611af7565b61045b6107093660046124f5565b611b2a565b61072161071c3660046124bd565b611b5d565b6040516103ea93929190612d3f565b61043b61073e3660046124bd565b611bef565b61045b6107513660046124bd565b611c70565b61043b611ca1565b61043b611cb0565b61045b6107743660046124f5565b611cbf565b6104266107873660046124bd565b611cf2565b61057d61079a366004612650565b611d23565b61045b6107ad3660046124f5565b611d59565b6106836107c0366004612577565b611d8c565b6104b1611e23565b6103dd6107db3660046124bd565b611e68565b61045b6107ee3660046124bd565b611e99565b61043b611eca565b61045b6108093660046124bd565b611ed9565b61045b61081c366004612577565b611f0a565b6103dd611f92565b6006546040516308ff49ad60e01b81526000916001600160a01b0316906308ff49ad9061085a908590600401612b5c565b60206040518083038186803b15801561087257600080fd5b505afa158015610886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa9190612afc565b90505b919050565b6108ba6123f1565b60065460405163033e16f360e21b81526001600160a01b0390911690630cf85bcc906108ea908590600401612b5c565b60a06040518083038186803b15801561090257600080fd5b505afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906129fd565b600654604051631246dbf560e01b81526000916001600160a01b031690631246dbf59061096b908590600401612b5c565b60206040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa919061284e565b600754604080516312803c7d60e01b815290516000926001600160a01b0316916312803c7d916004808301926020929190829003018186803b158015610a0057600080fd5b505afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906124d9565b905090565b600354604051631393a46960e01b81526000916001600160a01b031690631393a46990610a6e908590600401612e82565b60206040518083038186803b158015610a8657600080fd5b505afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906128ad565b6005546001600160a01b031690565b60008054604051635ae8095160e01b815282916001600160a01b031690635ae8095190610afe908790600401612b5c565b60206040518083038186803b158015610b1657600080fd5b505afa158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e91906128ad565b600254604051633478970960e11b81529192506000916001600160a01b03909116906368f12e1290610b869088908890600401612b70565b60206040518083038186803b158015610b9e57600080fd5b505afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906128ad565b905080610be857600092505050610e3a565b60025460405163175be70560e21b81526000916001600160a01b031690635d6f9c1490610c19908890600401612b5c565b60206040518083038186803b158015610c3157600080fd5b505afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6991906128ad565b600254604051633666e41760e11b81529192506000916001600160a01b0390911690636ccdc82e90610c9f908a90600401612b5c565b60206040518083038186803b158015610cb757600080fd5b505afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef91906128ad565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663a85494026040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4157600080fd5b505afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190612afc565b90506000808513610d9c57610d9782620f42400162ffffff16611fd7565b610daf565b610daf82620f42400362ffffff16611fd7565b90506000610dcf610dc8610dc38686612023565b611fd7565b8890612038565b90506000610de18784620f424061209d565b90506000610e13610e0483610dfe86670de0b6b3a7640000612141565b906121ea565b610e0d89611fd7565b90612038565b90506000811215610e25576000610e2e565b610e2e816122a2565b99505050505050505050505b92915050565b6003546040516329386b7b60e01b81526000916001600160a01b0316906329386b7b9061085a908590600401612b5c565b60025460405163293a507760e01b81526000916001600160a01b03169063293a507790610a6e908590600401612b5c565b60015460408051631623e65d60e11b815290516000926001600160a01b031691632c47ccba916004808301926020929190829003018186803b158015610ee757600080fd5b505afa158015610efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612b34565b60075460408051631a674cc560e11b815290516000926001600160a01b0316916334ce998a916004808301926020929190829003018186803b158015610f6457600080fd5b505afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906128ad565b60015460408051633e742e3b60e01b815290516000926001600160a01b031691633e742e3b916004808301926020929190829003018186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612b18565b600254604051633f93510760e01b81526000916001600160a01b031690633f9351079061104c9086908690600401612b70565b60206040518083038186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c91906128ad565b9392505050565b600754604051633ffd130360e01b81526000916001600160a01b031690633ffd13039061104c9086908690600401612c69565b600480546040516321b499f560e11b81526060926001600160a01b039092169163436933ea9161110a918791879101612b70565b60006040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261109c91908101906127ca565b600480546040516347b52fb760e01b81526000926001600160a01b03909216916347b52fb7916111949188918891889101612bdd565b60206040518083038186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e491906128ad565b949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b0316634a64d67d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0057600080fd5b60048054604051634dffaee560e01b81526000926001600160a01b0390921691634dffaee5916112719188918891889101612c0d565b60206040518083038186803b15801561128957600080fd5b505afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e4919061284e565b60015460408051632a1e739d60e11b815290516000926001600160a01b03169163543ce73a916004808301926020929190829003018186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612afc565b60008054604051635ae8095160e01b81526001600160a01b0390911690635ae8095190610a6e908590600401612b5c565b60048054604051635d8a541d60e01b815260009283926001600160a01b031691635d8a541d916113a59189918991899101612b8a565b604080518083038186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906128f2565b91509150935093915050565b61140861241f565b6002546040516331997f7b60e11b81526001600160a01b0390911690636332fef69061143a9086908690600401612b70565b60606040518083038186803b15801561145257600080fd5b505afa158015611466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612915565b6002546001600160a01b031690565b600254604051633478970960e11b81526000916001600160a01b0316906368f12e129061104c9086908690600401612b70565b600254604051633666e41760e11b81526000916001600160a01b031690636ccdc82e90610a6e908590600401612b5c565b6001546040805163370e96e960e11b815290516000926001600160a01b031691636e1d2dd2916004808301926020929190829003018186803b15801561130657600080fd5b60015460408051633a14199b60e11b815290516000926001600160a01b0316916374283336916004808301926020929190829003018186803b15801561130657600080fd5b6002546040516303d2da2d60e51b81526000916001600160a01b031690637a5b45a09061104c9086908690600401612b70565b60048054604051637c2b7c5360e01b81526000926001600160a01b0390921691637c2b7c53916111949188918891889101612b8a565b6003546040516380f57f1160e01b81526000916001600160a01b0316906380f57f1190610a6e908590600401612b5c565b600154604080516385eacc7760e01b815290516000926001600160a01b0316916385eacc77916004808301926020929190829003018186803b158015610f6457600080fd5b6007546001600160a01b031690565b600354604051636e3f3f0b60e11b81526000916001600160a01b03169063dc7e7e16906116a89086908690600401612c87565b60206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c91906124d9565b6007546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610ee757600080fd5b60008054604051635ae8095160e01b815282916001600160a01b031690635ae809519061176e908690600401612b5c565b60206040518083038186803b15801561178657600080fd5b505afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be91906128ad565b600254604051633666e41760e11b81529192506000916001600160a01b0390911690636ccdc82e906117f4908790600401612b5c565b60206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184491906128ad565b905081158015611852575080155b15611862576000925050506108ad565b6000821361187657600019925050506108ad565b6111e4670de0b6b3a764000061188b846122a2565b61189484611fd7565b919061209d565b6001546040805163542a4a0160e11b815290516000926001600160a01b03169163a8549402916004808301926020929190829003018186803b15801561130657600080fd5b6001546001600160a01b031690565b6118f7612440565b6004805460405163acf7182760e01b81526001600160a01b039091169163acf718279161192691869101612d36565b6101206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa919061296a565b6002546040516357ba739b60e11b81526060916001600160a01b03169063af74e736906119a8908590600401612b5c565b60006040518083038186803b1580156119c057600080fd5b505afa1580156119d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa919081019061272c565b60008060009054906101000a90046001600160a01b03166001600160a01b031663b081983b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0057600080fd5b60048054604051632c30105d60e21b81526001600160a01b039091169163b0c0417491611a7e9187918791879101612d3f565b600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b50505050505050565b6004546001600160a01b031690565b60025460405163165c4e2960e31b81526000916001600160a01b03169063b2e271489061104c9086908690600401612b70565b600254604051630b39456960e41b81526000916001600160a01b03169063b39456909061104c9086908690600401612b70565b6002546040516359deb70960e11b81526000916001600160a01b03169063b3bd6e129061104c9086908690600401612b70565b60025460405163bba85bcf60e01b8152600091829182916001600160a01b03169063bba85bcf90611b92908790600401612b5c565b60606040518083038186803b158015611baa57600080fd5b505afa158015611bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be291906128c5565b9250925092509193909250565b60065460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db90611c20908590600401612b5c565b60206040518083038186803b158015611c3857600080fd5b505afa158015611c4c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906124d9565b6007546040516330e6651160e21b81526000916001600160a01b03169063c399944490610a6e908590600401612b5c565b6000546001600160a01b031690565b6006546001600160a01b031690565b60035460405163659bcd5160e11b81526000916001600160a01b03169063cb379aa29061104c9086908690600401612b70565b60025460405163659e3dc760e11b81526000916001600160a01b03169063cb3c7b8e9061096b908590600401612b5c565b6004805460405163d0581a9360e01b815260009283926001600160a01b03169163d0581a93916113a59189918991899101612c0d565b60025460405163d50d01b760e01b81526000916001600160a01b03169063d50d01b79061104c9086908690600401612b70565b611d94612440565b60048054604051633aab48d560e21b81526001600160a01b039091169163eaad235491611dc991899189918991899101612bae565b6101206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a919061296a565b95945050505050565b60065460408051633b38243160e21b815290516000926001600160a01b03169163ece090c4916004808301926020929190829003018186803b158015610ee757600080fd5b60065460405163edd0b5cb60e01b81526000916001600160a01b03169063edd0b5cb9061085a908590600401612b5c565b60025460405163f75c266d60e01b81526000916001600160a01b03169063f75c266d90610a6e908590600401612b5c565b6003546001600160a01b031690565b60075460405163f8b2cb4f60e01b81526000916001600160a01b03169063f8b2cb4f90610a6e908590600401612b5c565b60048054604051633ec44b5b60e21b81526000926001600160a01b039092169163fb112d6c91611f4291899189918991899101612bae565b60206040518083038186803b158015611f5a57600080fd5b505afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a91906128ad565b6001546040805163fedf924b60e01b815290516000926001600160a01b03169163fedf924b916004808301926020929190829003018186803b15801561130657600080fd5b60006001600160ff1b0382111561201f5760405162461bcd60e51b8152600401808060200182810382526028815260200180612fcd6028913960400191505060405180910390fd5b5090565b600061109c838362ffffff16620f42406122f9565b600081830381831280159061204d5750838113155b80612062575060008312801561206257508381135b61109c5760405162461bcd60e51b8152600401808060200182810382526024815260200180612ff56024913960400191505060405180910390fd5b600080600085126120ae57846120b7565b6120b7856123a8565b905060008085126120c857846120d1565b6120d1856123a8565b9050600080871280156120e45750600086135b806120fa57506000871380156120fa5750600086125b612105576000612108565b60015b905060006121178484886122f9565b90508161212c5761212781611fd7565b612135565b612135816123dd565b98975050505050505050565b60008261215057506000610e3a565b826000191480156121645750600160ff1b82145b156121a05760405162461bcd60e51b8152600401808060200182810382526027815260200180612fa66027913960400191505060405180910390fd5b828202828482816121ad57fe5b051461109c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612fa66027913960400191505060405180910390fd5b60008161223e576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156122525750600160ff1b83145b1561228e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f856021913960400191505060405180910390fd5b600082848161229957fe5b05949350505050565b60008082121561201f576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600080806000198587098686029250828110908390030390508061232f576000841161232457600080fd5b50829004905061109c565b80841161233b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000600160ff1b82136123d65760405162461bcd60e51b81526004016123cd90612d63565b60405180910390fd5b5060000390565b60006123e882611fd7565b60000392915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b60405180610120016040528060006001600160801b03168152602001600060020b8152602001600060020b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516108ad81612f52565b80516001600160801b03811681146108ad57600080fd5b6000602082840312156124ce578081fd5b813561109c81612f2c565b6000602082840312156124ea578081fd5b815161109c81612f2c565b60008060408385031215612507578081fd5b823561251281612f2c565b9150602083013561252281612f2c565b809150509250929050565b600080600060608486031215612541578081fd5b833561254c81612f2c565b9250602084013561255c81612f2c565b9150604084013561256c81612f44565b809150509250925092565b6000806000806080858703121561258c578182fd5b843561259781612f2c565b935060208501356125a781612f2c565b925060408501356125b781612f52565b915060608501356125c781612f52565b939692955090935050565b600080600083850360808112156125e7578182fd5b84356125f281612f2c565b9350602085013561260281612f2c565b92506040603f1982011215612615578182fd5b506040516040810181811067ffffffffffffffff8211171561263357fe5b604090815285013581526060909401356020850152509093909250565b600080600060408486031215612664578081fd5b833561266f81612f2c565b9250602084013567ffffffffffffffff8082111561268b578283fd5b818601915086601f83011261269e578283fd5b8135818111156126ac578384fd5b87602080830285010111156126bf578384fd5b6020830194508093505050509250925092565b600080604083850312156126e4578182fd5b82356126ef81612f2c565b9150602083013561252281612f61565b60008060408385031215612711578182fd5b823561271c81612f2c565b9150602083013561252281612f72565b6000602080838503121561273e578182fd5b825167ffffffffffffffff811115612754578283fd5b8301601f81018513612764578283fd5b805161277761277282612f0e565b612eea565b8181528381019083850185840285018601891015612793578687fd5b8694505b838510156127be5780516127aa81612f2c565b835260019490940193918501918501612797565b50979650505050505050565b600060208083850312156127dc578182fd5b825167ffffffffffffffff8111156127f2578283fd5b8301601f81018513612802578283fd5b805161281061277282612f0e565b818152838101908385018584028501860189101561282c578687fd5b8694505b838510156127be578051835260019490940193918501918501612830565b60006020828403121561285f578081fd5b815161109c81612f44565b60006020828403121561287b578081fd5b5035919050565b600080600060608486031215612896578081fd5b505081359360208301359350604090920135919050565b6000602082840312156128be578081fd5b5051919050565b6000806000606084860312156128d9578081fd5b8351925060208401519150604084015190509250925092565b60008060408385031215612904578182fd5b505080516020909101519092909150565b600060608284031215612926578081fd5b6040516060810181811067ffffffffffffffff8211171561294357fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600061012080838503121561297d578182fd5b61298681612eea565b9050612991836124a6565b815261299f6020840161249b565b60208201526129b06040840161249b565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b600060a08284031215612a0e578081fd5b60405160a0810181811067ffffffffffffffff82111715612a2b57fe5b6040528251612a3981612f2c565b81526020830151612a4981612f61565b60208201526040830151612a5c81612f61565b60408201526060830151612a6f81612f61565b60608201526080830151612a8281612f61565b60808201529392505050565b600060808284031215612a9f578081fd5b6040516080810181811067ffffffffffffffff82111715612abc57fe5b6040528235612aca81612f2c565b81526020830135612ada81612f2c565b6020820152604083810135908201526060928301359281019290925250919050565b600060208284031215612b0d578081fd5b815161109c81612f61565b600060208284031215612b29578081fd5b815161109c81612f72565b600060208284031215612b45578081fd5b815160ff8116811461109c578182fd5b60020b9052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039485168152929093166020830152600290810b60408301529190910b606082015260800190565b6001600160a01b039384168152919092166020808301919091528251604083015290910151606082015260800190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b87811015612c5c578435612c4881612f2c565b841682529382019390820190600101612c35565b5098975050505050505050565b6001600160a01b0392909216825262ffffff16602082015260400190565b6001600160a01b0392909216825263ffffffff16602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612ce75783516001600160a01b031683529284019291840191600101612cc2565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612ce757835183529284019291840191600101612d0f565b901515815260200190565b90815260200190565b9283526020830191909152604082015260600190565b918252602082015260400190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b6000610120820190506001600160801b038351168252602083015160020b60208301526040830151612df06040840182612b55565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b81516001600160a01b03908116825260208084015190911690820152604080830151908201526060918201519181019190915260800190565b62ffffff91909116815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f0657fe5b604052919050565b600067ffffffffffffffff821115612f2257fe5b5060209081020190565b6001600160a01b0381168114612f4157600080fd5b50565b8015158114612f4157600080fd5b8060020b8114612f4157600080fd5b62ffffff81168114612f4157600080fd5b63ffffffff81168114612f4157600080fdfe5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f775369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220410b36a647592b7bcc5cf3aa8cb38b1be0e0d244069be2b62c99e9fb3edd331964736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
