{
  "_format": "hh-sol-artifact-1",
  "contractName": "HopL2Swapper",
  "sourceName": "contracts/swap/HopL2Swapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "hToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "TaskHopTokenAmmMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskMissingHopTokenAmm",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenOutNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "CustomTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "DefaultTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "TokenAmmSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "hToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTaskAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTimeLock",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokensSource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "amm",
                  "type": "address"
                }
              ],
              "internalType": "struct HopL2Swapper.TokenAmm[]",
              "name": "tokenAmms",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomTokenOut[]",
                  "name": "customTokensOut",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "smartVault",
                          "type": "address"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "previousBalanceConnectorId",
                          "type": "bytes32"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "nextBalanceConnectorId",
                          "type": "bytes32"
                        }
                      ],
                      "internalType": "struct BaseTask.BaseConfig",
                      "name": "baseConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256",
                          "name": "gasPriceLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "priorityFeeLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimitPct",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct GasLimitedTask.GasLimitConfig",
                      "name": "gasLimitConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "mode",
                          "type": "uint8"
                        },
                        {
                          "internalType": "uint256",
                          "name": "frequency",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "allowedAt",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "window",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct TimeLockedTask.TimeLockConfig",
                      "name": "timeLockConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
                          "name": "acceptanceType",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address[]",
                          "name": "tokens",
                          "type": "address[]"
                        }
                      ],
                      "internalType": "struct TokenIndexedTask.TokenIndexConfig",
                      "name": "tokenIndexConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "min",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "max",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.Threshold",
                          "name": "defaultThreshold",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "min",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "max",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct TokenThresholdTask.Threshold",
                              "name": "threshold",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.CustomThresholdConfig[]",
                          "name": "customThresholdConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct TokenThresholdTask.TokenThresholdConfig",
                      "name": "tokenThresholdConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "amount",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "period",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                          "name": "defaultVolumeLimit",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "amount",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "period",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                              "name": "volumeLimit",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.CustomVolumeLimitConfig[]",
                          "name": "customVolumeLimitConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct VolumeLimitedTask.VolumeLimitConfig",
                      "name": "volumeLimitConfig",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct Task.TaskConfig",
                  "name": "taskConfig",
                  "type": "tuple"
                }
              ],
              "internalType": "struct BaseSwapTask.BaseSwapConfig",
              "name": "baseSwapConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct HopL2Swapper.HopL2SwapConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setCustomTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setCustomTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCustomVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setDefaultTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "hToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "setTokenAmm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenAmm",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61559f80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80637125590a11610191578063a5f04965116100e3578063d09edf3111610097578063d86483e111610071578063d86483e114610802578063e6b5be9814610815578063f9eaee0d1461082857600080fd5b8063d09edf31146107c3578063d3feb602146107dc578063d45a76cf146107ef57600080fd5b8063b96e422c116100c8578063b96e422c14610796578063c267621e1461079f578063c47590e4146107b057600080fd5b8063a5f0496514610766578063b187bd261461077957600080fd5b806397d3523811610145578063a2c456441161011f578063a2c45644146106c6578063a3374177146106d9578063a5900c4d1461070c57600080fd5b806397d35238146106815780639eebe7cd14610694578063a0c3774f146106b357600080fd5b80638456cb59116101765780638456cb59146106535780638a5215861461065b57806390333ba81461066e57600080fd5b80637125590a1461062d57806383f3084f1461064057600080fd5b806342d4693e1161024a57806351a424b1116101fe57806363560086116101d857806363560086146105a557806363e133bc146105b85780636aacaad8146105e157600080fd5b806351a424b1146105265780635670e2ce1461055e5780635ea54eee1461057957600080fd5b80634a45a3a81161022f5780634a45a3a8146104cb5780634fd49efd146105005780635064d83a1461051357600080fd5b806342d4693e1461049e57806344578099146104b857600080fd5b80632384c32d116102ac5780633e87e3e9116102865780633e87e3e9146104425780633f4ba83a14610483578063423a4b401461048b57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c610307366004614715565b61083b565b005b61030c61031c36600461476e565b610874565b6103296108a1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c6103603660046148e7565b6108d8565b6103d761037336600461476e565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046149ab565b610988565b61030c61042a3660046149f1565b6109b7565b61030c61043d366004614a39565b6109e2565b61046b61045036600461476e565b6021602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610349565b61030c610a1f565b61030c6104993660046149ab565b610aa6565b600f546104ab9060ff1681565b6040516103499190614a6a565b61046b6104c636600461476e565b610ad5565b6104f27fb04abccc9a3bcbe96536610c6bcb56b2f9ec1e9af548139a186f11f31f0e712181565b604051908152602001610349565b60015461046b906001600160a01b031681565b61030c610521366004614a92565b610b12565b61053961053436600461476e565b610d5c565b604080516001600160a01b039094168452602084019290925290820152606001610349565b60025460035460408051928352602083019190915201610349565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c6105b336600461476e565b610d85565b61046b6105c636600461476e565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c61063b366004614ac7565b610dae565b601c5461046b906001600160a01b031681565b61030c610dd9565b601d5461046b906001600160a01b031681565b61030c61067c366004614a92565b610e4b565b61030c61068f3660046149f1565b610e7e565b6104f26106a236600461476e565b602080526000908152604090205481565b6104f26106c136600461476e565b610ea9565b61030c6106d4366004614ae9565b610f40565b610539604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61053961071a36600461476e565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b61030c610774366004614ff0565b610f69565b6004546107869060ff1681565b6040519015158152602001610349565b6104f2601e5481565b6001546001600160a01b031661046b565b61030c6107be366004615137565b61108f565b60005461046b906201000090046001600160a01b031681565b61030c6107ea366004614a92565b6110ba565b6103d76107fd36600461476e565b6110e7565b6104f261081036600461476e565b611156565b61030c610823366004615163565b611184565b61078661083636600461476e565b6111b3565b61084a8460ff168484846111e8565b610861336000356001600160e01b03191683611293565b61086d858585856112da565b5050505050565b61087d8161157f565b610894336000356001600160e01b03191683611293565b61089d82611593565b5050565b600a5460009081908190819060ff1660028111156108c1576108c1614a54565b600b54600c54600e54935093509350935090919293565b6108ee336000356001600160e01b03191661161d565b8051825114610929576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109835761097183828151811061094a5761094a615195565b602002602001015183838151811061096457610964615195565b6020026020010151611639565b8061097b816151c1565b91505061092c565b505050565b610994848484846116e3565b6109ab336000356001600160e01b03191683611293565b61086d8585858561174c565b6109c18282611805565b6109d8336000356001600160e01b03191683611293565b610983838361187d565b6109ff8160018111156109f7576109f7614a54565b60ff16611904565b610a16336000356001600160e01b03191683611293565b61089d8261194b565b610a35336000356001600160e01b03191661161d565b60045460ff16610a71576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610ab2848484846116e3565b610ac9336000356001600160e01b03191683611293565b61086d858585856119a8565b6001600160a01b038082166000908152601f60205260408120549091168015610afe5780610b0b565b601d546001600160a01b03165b9392505050565b610b1d838383611a68565b610b34336000356001600160e01b03191683611293565b82600003610b4857610b4584610ea9565b92505b610b53848484611afa565b6000610b5e85610ad5565b6001600160a01b0380871660009081526021602090815260408083205481517f9cd01605000000000000000000000000000000000000000000000000000000008152915195965092949290931692639cd0160592600480830193928290030181865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf691906151da565b90506000610c16610c0f86670de0b6b3a76400006151f7565b8790611b56565b604080516001600160a01b038a811660248301528681166044830152606482018a90526084820184905285811660a4808401919091528351808403909101815260c490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f331ece6e00000000000000000000000000000000000000000000000000000000179052600154601c5493517f1cff79cd000000000000000000000000000000000000000000000000000000008152949550919360009392821692631cff79cd92610cf392911690869060040161525a565b6000604051808303816000875af1158015610d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3a919081019061527c565b9050610d5189898988610d4c86611bc9565b611bd6565b505050505050505050565b600080600080610d6b85611be3565b805160208201516040909201519097919650945092505050565b610d8e8161157f565b610da5336000356001600160e01b03191683611293565b61089d82611c6e565b610db88282611cb8565b610dcf336000356001600160e01b03191683611293565b6109838383611d12565b610def336000356001600160e01b03191661161d565b60045460ff1615610e135760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e56838383611a68565b610e6d336000356001600160e01b03191683611293565b610e78848484611d95565b50505050565b610e888282611805565b610e9f336000356001600160e01b03191683611293565b6109838383611deb565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190615310565b92915050565b610f4981611904565b610f60336000356001600160e01b03191683611293565b61089d82611f47565b600054610100900460ff1615808015610f895750600054600160ff909116105b80610fa35750303b158015610fa3575060005460ff166001145b61101a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561103d576000805461ff0019166101001790555b61104682611fa5565b801561089d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6110998282612017565b6110b0336000356001600160e01b03191683611293565b6109838383612074565b6110c5838383611a68565b6110dc336000356001600160e01b03191683611293565b610e7884848461210e565b6000806000806000806110f98761216a565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561117a5780610b0b565b601e549392505050565b611190848484846111e8565b6111a7336000356001600160e01b03191683611293565b61086d8585858561219e565b6000806111c1601084612239565b90506001600f5460ff1660018111156111dc576111dc614a54565b14610f3a578015610b0b565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061121f5761121f615195565b602002602001018181525050838160018151811061123f5761123f615195565b602002602001018181525050828160028151811061125f5761125f615195565b602002602001018181525050818160038151811061127f5761127f615195565b602002602001018181525050949350505050565b61129e83838361225b565b610983578282826040517f960c80da00000000000000000000000000000000000000000000000000000000815260040161101193929190615364565b60ff841661138b5760008111806112f15750600082115b1561138657826000036113235760405163bea499cb60e01b815260ff8516600482015260248101849052604401611011565b80158061132f57508281115b1561135957604051639e12fccf60e01b815260ff8516600482015260248101829052604401611011565b8160000361138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b6114e8565b826000036113b85760405163bea499cb60e01b815260ff8516600482015260248101849052604401611011565b8015806113d057506113cd6224ea0084615396565b81115b156113fa57604051639e12fccf60e01b815260ff8516600482015260248101829052604401611011565b8160000361142757604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b60001960ff85160161146957601c61143e836122f1565b111561138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b60011960ff8516016114b15761147e82612308565b611487836122f1565b1461138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401611011565b8360ff1660028111156114fd576114fd614a54565b600a805460ff1916600183600281111561151957611519614a54565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610f3a826001600160a01b0316611904565b6001600160a01b0381166115d3576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261089d9083908390611293565b6001600160a01b038216611679576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061168e5761168960108361232b565b611699565b611699601083612340565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116d7911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061172357611723615195565b602002602001018181525050836001600160a01b03168160018151811061123f5761123f615195565b6001600160a01b03841661178c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117b090848484612355565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061184257611842615195565b602002602001018181525050816001600160a01b03168160018151811061186b5761186b615195565b60200260200101818152505092915050565b6001600160a01b0382166118a457604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116d7565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061193a5761193a615195565b602002602001018181525050919050565b600f805482919060ff19166001838181111561196957611969614a54565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161199d9190614a6a565b60405180910390a150565b6001600160a01b0384166119e8576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a0c90848484612425565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a5a929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611aa757611aa7615195565b6020026020010181815250508281600181518110611ac757611ac7615195565b6020026020010181815250508181600281518110611ae757611ae7615195565b6020026020010181815250509392505050565b611b05838383612584565b6001600160a01b0383811660009081526021602052604090205416610983576040517fb18998ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008282028315801590611b79575082848281611b7557611b756153ad565b0414155b15611ba157604051637472527d60e11b81526004810185905260248101849052604401611011565b8015611bbe57670de0b6b3a7640000600019820104600101611bc1565b60005b949350505050565b6000610f3a82600061268b565b61086d85858585856126e8565b611c10604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c395780611c3c565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cef57611cef615195565b6020026020010181815250508160001c8160018151811061186b5761186b615195565b8082148015611d2057508115155b15611d5a576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401611011565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611da26016848484612425565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6001600160a01b038216611e1257604051636070789160e11b815260040160405180910390fd5b6001600160a01b03811615801590611e9d5750806001600160a01b031663fc6e3b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8791906151da565b6001600160a01b0316826001600160a01b031614155b15611ee7576040517f485c48850000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152604401611011565b6001600160a01b0382811660008181526021602090815260409182902080546001600160a01b0319169486169485179055905192835290917f27159353fbed088f499d31bcb2753c11ba098e4fe12410c67b8b35b8d0029d8991016116d7565b670de0b6b3a7640000811115611f705760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161199d565b600054610100900460ff16611ffe5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61200b81602001516126fc565b6120148161276b565b50565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061205457612054615195565b602002602001018181525050818160018151811061186b5761186b615195565b6001600160a01b03821661209b57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120c45760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116d7565b61211b6012848484612355565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121955780610b0b565b60169392505050565b670de0b6b3a76400008111156121e0576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611571565b6001600160a01b03811660009081526001830160205260408120541515610b0b565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122b09087903090889088906004016153c3565b602060405180830381865afa1580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190615409565b6000611bc16123036201518084615426565b61282f565b6000808061231c6123036201518086615426565b5091509150611bc182826128cb565b6000610b0b836001600160a01b038416612951565b6000610b0b836001600160a01b038416612a4b565b60006001600160a01b03841615801561236c575082155b8015612376575081155b905060006001600160a01b0385161580159061239a575082158061239a5750838310155b9050811580156123a8575080155b156123f8576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401611011565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b03841615801561243c575082155b8015612446575081155b905060006001600160a01b038516158015906124625750600084115b801561246e5750600083115b90508115801561247c575080155b156124cc576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401611011565b600386018390556001860184905581156124f357600060028701819055600487015561255f565b856004015460000361251a5760006002870155612510834261543a565b600487015561255f565b85546001600160a01b0386811691161461255f578554600090612546906001600160a01b031687612a9a565b60028801549091506125589082612aa6565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b61258e8383612b03565b6001600160a01b0383166125b557604051636070789160e11b815260040160405180910390fd5b816000036125ef576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006125fa84610ad5565b6001600160a01b03160361263a576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061264584611156565b905080821115610e78576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401611011565b600061269882602061543a565b835110156126df5782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152611011918491600401918252602082015260400190565b50016020015190565b6126f28282612b49565b61086d8585612bcf565b600054610100900460ff166127555760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6127628160a00151612bf7565b61201481612cad565b600054610100900460ff166127c45760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b60005b81515181101561089d5761281d826000015182815181106127ea576127ea615195565b6020026020010151600001518360000151838151811061280c5761280c615195565b602002602001015160200151611deb565b80612827816151c1565b9150506127c7565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161288c5761288c6153ad565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128dc5750816003145b806128e75750816005145b806128f25750816007145b806128fd5750816008145b80612908575081600a145b80612913575081600c145b156129205750601f610f3a565b816002146129305750601e610f3a565b61293983612e08565b61294457601c612947565b601d5b60ff169392505050565b60008181526001830160205260408120548015612a3a5760006129756001836151f7565b8554909150600090612989906001906151f7565b90508181146129ee5760008660000182815481106129a9576129a9615195565b90600052602060002001549050808760000184815481106129cc576129cc615195565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129ff576129ff61544d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f3a565b6000915050610f3a565b5092915050565b6000818152600183016020526040812054612a9257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f3a565b506000610f3a565b6000610b0b8383612e44565b60008282028315801590612ac9575082848281612ac557612ac56153ad565b0414155b15612af157604051637472527d60e11b81526004810185905260248101849052604401611011565b670de0b6b3a764000090049392505050565b612b0d8282613043565b612b17828261304d565b612b218282613071565b612b2b828261315d565b612b35828261334c565b612b3f8282613396565b61089d8282613483565b6003541561089d576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612bb357600080fd5b505af1158015612bc7573d6000803e3d6000fd5b505050505050565b612bd98282613599565b612be3828261363b565b612bed828261365d565b61089d828261389c565b600054610100900460ff16612c505760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051612c5b906138c9565b612c63613999565b612c7081602001516139fc565b612c7d8160400151613a5e565b612c8a8160600151613ac0565b612c978160800151613b22565b612ca48160a00151613b84565b61201481613be6565b600054610100900460ff16612d065760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051612d1190611593565b612d1e8160200151611c6e565b612d2b8160400151611f47565b60005b816060015151811015612d9957612d8782606001518281518110612d5457612d54615195565b60200260200101516000015183606001518381518110612d7657612d76615195565b60200260200101516020015161187d565b80612d91816151c1565b915050612d2e565b5060005b81608001515181101561089d57612df682608001518281518110612dc357612dc3615195565b60200260200101516000015183608001518381518110612de557612de5615195565b602002602001015160200151612074565b80612e00816151c1565b915050612d9d565b6000612e15600483615463565b158015612e2b5750612e28606483615463565b15155b80610f3a5750612e3d61019083615463565b1592915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe91906151da565b90506001600160a01b038116612f0f576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401611011565b6000612f19613c3f565b90508051600014612faa57816001600160a01b031663355efdd9612f3c87613cbf565b612f4587613cbf565b846040518463ffffffff1660e01b8152600401612f6493929190615477565b602060405180830381865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190615310565b61303a565b816001600160a01b031663ac41865a612fc287613cbf565b612fcb87613cbf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303a9190615310565b95945050505050565b61089d8282613cf3565b60045460ff161561089d5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806130b0575081513a11155b9050806130f55781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401611011565b602082015115610e7857600061310b483a6151f7565b602084015190915081111580612bc75760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152611011918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156131995760405163013ce60b60e01b815242600482015260248101839052604401611011565b60008460028111156131ad576131ad614a54565b0361326657826000036131c257505050505050565b806000036131dc576131d4834261543a565b600d55612bc7565b60006131e883426151f7565b905060006131f68583615426565b905060006132048683615396565b61320e90846151f7565b90508381111561323a5760405163013ce60b60e01b815242600482015260248101869052604401611011565b8561324683600161543a565b6132509190615396565b61325a908661543a565b600d5550612bc7915050565b81421015801561327f575061327b818361543a565b4211155b1561328e576131d48284613d46565b600060018560028111156132a4576132a4614a54565b146132b7576132b242612308565b6132c0565b6132c0836122f1565b905060006132ce8483613dde565b9050804210156132fa5760405163013ce60b60e01b815242600482015260248101829052604401611011565b6000613306848361543a565b905042811080156133335760405163013ce60b60e01b815242600482015260248101839052604401611011565b61333d8388613d46565b600d5550505050505050505050565b613355826111b3565b61089d576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401611011565b60006133a183611be3565b80519091506001600160a01b03166133b857505050565b6000836001600160a01b031682600001516001600160a01b0316146133f4576133ef6133e8858460000151612a9a565b8490612aa6565b6133f6565b825b905060008260200151821015801561341e57506040830151158061341e575082604001518211155b90508061086d578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401611011565b600061348e8361216a565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506134dd57505050565b6000836001600160a01b031682600001516001600160a01b0316146135125761350d6133e8858460000151612a9a565b613514565b825b905060008260800151421061352a576000613530565b82604001515b61353a908361543a565b9050826020015181111561086d57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401611011565b60006135a48361216a565b80549091506001600160a01b03166135bb57505050565b80546000906001600160a01b038581169116146135f15781546135ec906133e89086906001600160a01b0316612a9a565b6135f3565b825b90508160040154421061361c57600060028301556003820154613616904261543a565b60048301555b80826002016000828254613630919061543a565b909155505050505050565b600d54600003613649575050565b613654600d54613dfd565b50506000600d55565b600554600003613699576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546136d291906151f7565b905060006136e03a83615396565b905060008360400151600014806136fb575083604001518211155b905080613745578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401611011929190918252602082015260400190565b600060055560608401511580159061375d5750600085115b15612bc7576000613830306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c991906151da565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382a91906151da565b88612a9a565b9050600061383e8483611b56565b9050600061384c8289613e32565b90508660600151811115610d515760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152611011918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff166139225760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61399081600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398b91906151da565b613efb565b61201481613f5d565b600054610100900460ff166139f25760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6139fa613feb565b565b600054610100900460ff16613a555760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481614044565b600054610100900460ff16613ab75760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816140b9565b600054610100900460ff16613b195760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6120148161412e565b600054610100900460ff16613b7b5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816141dc565b600054610100900460ff16613bdd5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816142ba565b600054610100900460ff166120145760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b60606000613c4b614398565b905036811115613c6957505060408051600081526020810190915290565b8067ffffffffffffffff811115613c8257613c8261478b565b6040519080825280601f01601f191660200182016040528015613cac576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614613ceb5781610f3a565b610f3a6143b3565b6002541561089d5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612b99565b600080600080613d558661443f565b919450925090506000613d68868461543a565b90506000613d77600c83615463565b90506000613d86600c84615426565b613d90908761543a565b905060006002600a5460ff166002811115613dad57613dad614a54565b14613db85784613dc2565b613dc282846128cb565b9050613dd08a83858461445e565b9a9950505050505050505050565b6000806000613dec4261443f565b509150915061303a8583838761445e565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161199d565b600081600003613e6e576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613e7e57506000610f3a565b670de0b6b3a764000083810290848281613e9a57613e9a6153ad565b0414613edc576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401611011565b826001820381613eee57613eee6153ad565b0460010191505092915050565b600054610100900460ff16613f545760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481614486565b600054610100900460ff16613fb65760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516120149190611d12565b600054610100900460ff166139fa5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b600054610100900460ff1661409d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816000015182602001518360400151846060015161219e565b600054610100900460ff166141125760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481600001518260200151836040015184606001516112da565b600054610100900460ff166141875760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b80516141929061194b565b60005b81602001515181101561089d576141ca826020015182815181106141bb576141bb615195565b60200260200101516001611639565b806141d4816151c1565b915050614195565b600054610100900460ff166142355760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b805180516020820151604083015161424e92919061210e565b60005b8260200151518110156109835760008360200151828151811061427657614276615195565b602002602001015190506000816020015190506142a5826000015182600001518360200151846040015161174c565b505080806142b2906151c1565b915050614251565b600054610100900460ff166143135760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b805180516020820151604083015161432c929190611d95565b60005b8260200151518110156109835760008360200151828151811061435457614354615195565b6020026020010151905060008160200151905061438382600001518260000151836020015184604001516119a8565b50508080614390906151c1565b91505061432f565b600060243610156143a95750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061443a91906151da565b905090565b6000808061445162015180850461282f565b9196909550909350915050565b600061303a84848461446f8961451f565b6144788a61453d565b6144818b614559565b614566565b600054610100900460ff166144df5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061452f6201518084615463565b9050610b0b610e1082615426565b60008061454c610e1084615463565b9050610b0b603c82615426565b6000610f3a603c83615463565b600081614574603c85615396565b614580610e1087615396565b6201518061458f8b8b8b6145c2565b6145999190615396565b6145a3919061543a565b6145ad919061543a565b6145b7919061543a565b979650505050505050565b60006107b28410156145d357600080fd5b838383600062253d8c60046064600c6145ed600e886154a3565b6145f791906154c3565b614603886113246154f1565b61460d91906154f1565b61461791906154c3565b614622906003615519565b61462c91906154c3565b600c8061463a600e886154a3565b61464491906154c3565b61464f90600c615519565b61465a6002886154a3565b61466491906154a3565b6146709061016f615519565b61467a91906154c3565b6004600c614689600e896154a3565b61469391906154c3565b61469f896112c06154f1565b6146a991906154f1565b6146b5906105b5615519565b6146bf91906154c3565b6146cb617d4b876154a3565b6146d591906154f1565b6146df91906154f1565b6146e991906154a3565b6146f391906154a3565b98975050505050505050565b803560ff8116811461471057600080fd5b919050565b6000806000806080858703121561472b57600080fd5b614734856146ff565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461201457600080fd5b80356147108161474e565b60006020828403121561478057600080fd5b8135610b0b8161474e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156147c4576147c461478b565b60405290565b6040516080810167ffffffffffffffff811182821017156147c4576147c461478b565b60405160c0810167ffffffffffffffff811182821017156147c4576147c461478b565b604051601f8201601f1916810167ffffffffffffffff811182821017156148395761483961478b565b604052919050565b600067ffffffffffffffff82111561485b5761485b61478b565b5060051b60200190565b600082601f83011261487657600080fd5b8135602061488b61488683614841565b614810565b82815260059290921b840181019181810190868411156148aa57600080fd5b8286015b848110156148ce5780356148c18161474e565b83529183019183016148ae565b509695505050505050565b801515811461201457600080fd5b600080604083850312156148fa57600080fd5b823567ffffffffffffffff8082111561491257600080fd5b61491e86838701614865565b935060209150818501358181111561493557600080fd5b85019050601f8101861361494857600080fd5b803561495661488682614841565b81815260059190911b8201830190838101908883111561497557600080fd5b928401925b8284101561499c57833561498d816148d9565b8252928401929084019061497a565b80955050505050509250929050565b600080600080608085870312156149c157600080fd5b84356149cc8161474e565b935060208501356149dc8161474e565b93969395505050506040820135916060013590565b60008060408385031215614a0457600080fd5b8235614a0f8161474e565b91506020830135614a1f8161474e565b809150509250929050565b80356002811061471057600080fd5b600060208284031215614a4b57600080fd5b610b0b82614a2a565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614a8c57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614aa757600080fd5b8335614ab28161474e565b95602085013595506040909401359392505050565b60008060408385031215614ada57600080fd5b50508035926020909101359150565b600060208284031215614afb57600080fd5b5035919050565b6000614b1061488684614841565b8381529050602080820190600685901b840186811115614b2f57600080fd5b845b81811015614b7e5760408189031215614b4a5760008081fd5b614b526147a1565b8135614b5d8161474e565b815281840135614b6c8161474e565b81850152845292820192604001614b31565b505050509392505050565b600082601f830112614b9a57600080fd5b610b0b83833560208501614b02565b600082601f830112614bba57600080fd5b81356020614bca61488683614841565b82815260069290921b84018101918181019086841115614be957600080fd5b8286015b848110156148ce5760408189031215614c065760008081fd5b614c0e6147a1565b8135614c198161474e565b81528185013585820152835291830191604001614bed565b600060608284031215614c4357600080fd5b6040516060810181811067ffffffffffffffff82111715614c6657614c6661478b565b6040529050808235614c778161474e565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614ca857600080fd5b614cb06147ca565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614cec57600080fd5b614cf46147ca565b9050614cff826146ff565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614d3757600080fd5b614d3f6147a1565b9050614d4a82614a2a565b8152602082013567ffffffffffffffff811115614d6657600080fd5b614d7284828501614865565b60208301525092915050565b600060808284031215614d9057600080fd5b614d986147a1565b90508135614da58161474e565b8152614db48360208401614c31565b602082015292915050565b60006080808385031215614dd257600080fd5b614dda6147a1565b9150614de68484614c31565b8252606083013567ffffffffffffffff811115614e0257600080fd5b8301601f81018513614e1357600080fd5b80356020614e2361488683614841565b82815260079290921b83018101918181019088841115614e4257600080fd5b938201935b83851015614e6857614e598986614d7e565b82529385019390820190614e47565b808388015250505050505092915050565b60006080808385031215614e8c57600080fd5b614e946147a1565b9150614ea08484614c31565b8252606083013567ffffffffffffffff811115614ebc57600080fd5b8301601f81018513614ecd57600080fd5b80356020614edd61488683614841565b82815260079290921b83018101918181019088841115614efc57600080fd5b938201935b83851015614e6857614f138986614d7e565b82529385019390820190614f01565b60006101c08284031215614f3557600080fd5b614f3d6147ed565b9050614f498383614c31565b8152614f588360608401614c96565b6020820152614f6a8360e08401614cda565b604082015261016082013567ffffffffffffffff80821115614f8b57600080fd5b614f9785838601614d25565b6060840152610180840135915080821115614fb157600080fd5b614fbd85838601614dbf565b60808401526101a0840135915080821115614fd757600080fd5b50614fe484828501614e79565b60a08301525092915050565b6000602080838503121561500357600080fd5b823567ffffffffffffffff8082111561501b57600080fd5b908401906040828703121561502f57600080fd5b6150376147a1565b82358281111561504657600080fd5b8301601f8101881361505757600080fd5b615065888235878401614b02565b825250838301358281111561507957600080fd5b929092019160c0838803121561508e57600080fd5b6150966147ed565b61509f84614763565b81526150ac858501614763565b85820152604084013560408201526060840135838111156150cc57600080fd5b6150d889828701614b89565b6060830152506080840135838111156150f057600080fd5b6150fc89828701614ba9565b60808301525060a08401358381111561511457600080fd5b61512089828701614f22565b60a083015250938101939093525090949350505050565b6000806040838503121561514a57600080fd5b82356151558161474e565b946020939093013593505050565b6000806000806080858703121561517957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016151d3576151d36151ab565b5060010190565b6000602082840312156151ec57600080fd5b8151610b0b8161474e565b81810381811115610f3a57610f3a6151ab565b60005b8381101561522557818101518382015260200161520d565b50506000910152565b6000815180845261524681602086016020860161520a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611bc1604083018461522e565b60006020828403121561528e57600080fd5b815167ffffffffffffffff808211156152a657600080fd5b818401915084601f8301126152ba57600080fd5b8151818111156152cc576152cc61478b565b6152df601f8201601f1916602001614810565b91508082528560208285010111156152f657600080fd5b61530781602084016020860161520a565b50949350505050565b60006020828403121561532257600080fd5b5051919050565b600081518084526020808501945080840160005b838110156153595781518752958201959082019060010161533d565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061303a6060830184615329565b8082028115828204841417610f3a57610f3a6151ab565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526153ff6080830184615329565b9695505050505050565b60006020828403121561541b57600080fd5b8151610b0b816148d9565b600082615435576154356153ad565b500490565b80820180821115610f3a57610f3a6151ab565b634e487b7160e01b600052603160045260246000fd5b600082615472576154726153ad565b500690565b60006001600160a01b0380861683528085166020840152506060604083015261303a606083018461522e565b8181036000831280158383131683831282161715612a4457612a446151ab565b6000826154d2576154d26153ad565b600160ff1b8214600019841416156154ec576154ec6151ab565b500590565b8082018281126000831280158216821582161715615511576155116151ab565b505092915050565b80820260008212600160ff1b84141615615535576155356151ab565b8181058314821517610f3a57610f3a6151ab56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220bba17f7e74a1ded5976fb9422efcc6915690a3b0a2eaba9fb49c24ad02f2878464736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f45760003560e01c80637125590a11610191578063a5f04965116100e3578063d09edf3111610097578063d86483e111610071578063d86483e114610802578063e6b5be9814610815578063f9eaee0d1461082857600080fd5b8063d09edf31146107c3578063d3feb602146107dc578063d45a76cf146107ef57600080fd5b8063b96e422c116100c8578063b96e422c14610796578063c267621e1461079f578063c47590e4146107b057600080fd5b8063a5f0496514610766578063b187bd261461077957600080fd5b806397d3523811610145578063a2c456441161011f578063a2c45644146106c6578063a3374177146106d9578063a5900c4d1461070c57600080fd5b806397d35238146106815780639eebe7cd14610694578063a0c3774f146106b357600080fd5b80638456cb59116101765780638456cb59146106535780638a5215861461065b57806390333ba81461066e57600080fd5b80637125590a1461062d57806383f3084f1461064057600080fd5b806342d4693e1161024a57806351a424b1116101fe57806363560086116101d857806363560086146105a557806363e133bc146105b85780636aacaad8146105e157600080fd5b806351a424b1146105265780635670e2ce1461055e5780635ea54eee1461057957600080fd5b80634a45a3a81161022f5780634a45a3a8146104cb5780634fd49efd146105005780635064d83a1461051357600080fd5b806342d4693e1461049e57806344578099146104b857600080fd5b80632384c32d116102ac5780633e87e3e9116102865780633e87e3e9146104425780633f4ba83a14610483578063423a4b401461048b57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c610307366004614715565b61083b565b005b61030c61031c36600461476e565b610874565b6103296108a1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c6103603660046148e7565b6108d8565b6103d761037336600461476e565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046149ab565b610988565b61030c61042a3660046149f1565b6109b7565b61030c61043d366004614a39565b6109e2565b61046b61045036600461476e565b6021602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610349565b61030c610a1f565b61030c6104993660046149ab565b610aa6565b600f546104ab9060ff1681565b6040516103499190614a6a565b61046b6104c636600461476e565b610ad5565b6104f27fb04abccc9a3bcbe96536610c6bcb56b2f9ec1e9af548139a186f11f31f0e712181565b604051908152602001610349565b60015461046b906001600160a01b031681565b61030c610521366004614a92565b610b12565b61053961053436600461476e565b610d5c565b604080516001600160a01b039094168452602084019290925290820152606001610349565b60025460035460408051928352602083019190915201610349565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c6105b336600461476e565b610d85565b61046b6105c636600461476e565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c61063b366004614ac7565b610dae565b601c5461046b906001600160a01b031681565b61030c610dd9565b601d5461046b906001600160a01b031681565b61030c61067c366004614a92565b610e4b565b61030c61068f3660046149f1565b610e7e565b6104f26106a236600461476e565b602080526000908152604090205481565b6104f26106c136600461476e565b610ea9565b61030c6106d4366004614ae9565b610f40565b610539604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61053961071a36600461476e565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b61030c610774366004614ff0565b610f69565b6004546107869060ff1681565b6040519015158152602001610349565b6104f2601e5481565b6001546001600160a01b031661046b565b61030c6107be366004615137565b61108f565b60005461046b906201000090046001600160a01b031681565b61030c6107ea366004614a92565b6110ba565b6103d76107fd36600461476e565b6110e7565b6104f261081036600461476e565b611156565b61030c610823366004615163565b611184565b61078661083636600461476e565b6111b3565b61084a8460ff168484846111e8565b610861336000356001600160e01b03191683611293565b61086d858585856112da565b5050505050565b61087d8161157f565b610894336000356001600160e01b03191683611293565b61089d82611593565b5050565b600a5460009081908190819060ff1660028111156108c1576108c1614a54565b600b54600c54600e54935093509350935090919293565b6108ee336000356001600160e01b03191661161d565b8051825114610929576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109835761097183828151811061094a5761094a615195565b602002602001015183838151811061096457610964615195565b6020026020010151611639565b8061097b816151c1565b91505061092c565b505050565b610994848484846116e3565b6109ab336000356001600160e01b03191683611293565b61086d8585858561174c565b6109c18282611805565b6109d8336000356001600160e01b03191683611293565b610983838361187d565b6109ff8160018111156109f7576109f7614a54565b60ff16611904565b610a16336000356001600160e01b03191683611293565b61089d8261194b565b610a35336000356001600160e01b03191661161d565b60045460ff16610a71576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610ab2848484846116e3565b610ac9336000356001600160e01b03191683611293565b61086d858585856119a8565b6001600160a01b038082166000908152601f60205260408120549091168015610afe5780610b0b565b601d546001600160a01b03165b9392505050565b610b1d838383611a68565b610b34336000356001600160e01b03191683611293565b82600003610b4857610b4584610ea9565b92505b610b53848484611afa565b6000610b5e85610ad5565b6001600160a01b0380871660009081526021602090815260408083205481517f9cd01605000000000000000000000000000000000000000000000000000000008152915195965092949290931692639cd0160592600480830193928290030181865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf691906151da565b90506000610c16610c0f86670de0b6b3a76400006151f7565b8790611b56565b604080516001600160a01b038a811660248301528681166044830152606482018a90526084820184905285811660a4808401919091528351808403909101815260c490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f331ece6e00000000000000000000000000000000000000000000000000000000179052600154601c5493517f1cff79cd000000000000000000000000000000000000000000000000000000008152949550919360009392821692631cff79cd92610cf392911690869060040161525a565b6000604051808303816000875af1158015610d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3a919081019061527c565b9050610d5189898988610d4c86611bc9565b611bd6565b505050505050505050565b600080600080610d6b85611be3565b805160208201516040909201519097919650945092505050565b610d8e8161157f565b610da5336000356001600160e01b03191683611293565b61089d82611c6e565b610db88282611cb8565b610dcf336000356001600160e01b03191683611293565b6109838383611d12565b610def336000356001600160e01b03191661161d565b60045460ff1615610e135760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e56838383611a68565b610e6d336000356001600160e01b03191683611293565b610e78848484611d95565b50505050565b610e888282611805565b610e9f336000356001600160e01b03191683611293565b6109838383611deb565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190615310565b92915050565b610f4981611904565b610f60336000356001600160e01b03191683611293565b61089d82611f47565b600054610100900460ff1615808015610f895750600054600160ff909116105b80610fa35750303b158015610fa3575060005460ff166001145b61101a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561103d576000805461ff0019166101001790555b61104682611fa5565b801561089d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6110998282612017565b6110b0336000356001600160e01b03191683611293565b6109838383612074565b6110c5838383611a68565b6110dc336000356001600160e01b03191683611293565b610e7884848461210e565b6000806000806000806110f98761216a565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561117a5780610b0b565b601e549392505050565b611190848484846111e8565b6111a7336000356001600160e01b03191683611293565b61086d8585858561219e565b6000806111c1601084612239565b90506001600f5460ff1660018111156111dc576111dc614a54565b14610f3a578015610b0b565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061121f5761121f615195565b602002602001018181525050838160018151811061123f5761123f615195565b602002602001018181525050828160028151811061125f5761125f615195565b602002602001018181525050818160038151811061127f5761127f615195565b602002602001018181525050949350505050565b61129e83838361225b565b610983578282826040517f960c80da00000000000000000000000000000000000000000000000000000000815260040161101193929190615364565b60ff841661138b5760008111806112f15750600082115b1561138657826000036113235760405163bea499cb60e01b815260ff8516600482015260248101849052604401611011565b80158061132f57508281115b1561135957604051639e12fccf60e01b815260ff8516600482015260248101829052604401611011565b8160000361138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b6114e8565b826000036113b85760405163bea499cb60e01b815260ff8516600482015260248101849052604401611011565b8015806113d057506113cd6224ea0084615396565b81115b156113fa57604051639e12fccf60e01b815260ff8516600482015260248101829052604401611011565b8160000361142757604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b60001960ff85160161146957601c61143e836122f1565b111561138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b60011960ff8516016114b15761147e82612308565b611487836122f1565b1461138657604051635686bf5960e11b815260ff8516600482015260248101839052604401611011565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401611011565b8360ff1660028111156114fd576114fd614a54565b600a805460ff1916600183600281111561151957611519614a54565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610f3a826001600160a01b0316611904565b6001600160a01b0381166115d3576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261089d9083908390611293565b6001600160a01b038216611679576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061168e5761168960108361232b565b611699565b611699601083612340565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116d7911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061172357611723615195565b602002602001018181525050836001600160a01b03168160018151811061123f5761123f615195565b6001600160a01b03841661178c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117b090848484612355565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061184257611842615195565b602002602001018181525050816001600160a01b03168160018151811061186b5761186b615195565b60200260200101818152505092915050565b6001600160a01b0382166118a457604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116d7565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061193a5761193a615195565b602002602001018181525050919050565b600f805482919060ff19166001838181111561196957611969614a54565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161199d9190614a6a565b60405180910390a150565b6001600160a01b0384166119e8576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a0c90848484612425565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a5a929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611aa757611aa7615195565b6020026020010181815250508281600181518110611ac757611ac7615195565b6020026020010181815250508181600281518110611ae757611ae7615195565b6020026020010181815250509392505050565b611b05838383612584565b6001600160a01b0383811660009081526021602052604090205416610983576040517fb18998ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008282028315801590611b79575082848281611b7557611b756153ad565b0414155b15611ba157604051637472527d60e11b81526004810185905260248101849052604401611011565b8015611bbe57670de0b6b3a7640000600019820104600101611bc1565b60005b949350505050565b6000610f3a82600061268b565b61086d85858585856126e8565b611c10604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c395780611c3c565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cef57611cef615195565b6020026020010181815250508160001c8160018151811061186b5761186b615195565b8082148015611d2057508115155b15611d5a576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401611011565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611da26016848484612425565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6001600160a01b038216611e1257604051636070789160e11b815260040160405180910390fd5b6001600160a01b03811615801590611e9d5750806001600160a01b031663fc6e3b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8791906151da565b6001600160a01b0316826001600160a01b031614155b15611ee7576040517f485c48850000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152604401611011565b6001600160a01b0382811660008181526021602090815260409182902080546001600160a01b0319169486169485179055905192835290917f27159353fbed088f499d31bcb2753c11ba098e4fe12410c67b8b35b8d0029d8991016116d7565b670de0b6b3a7640000811115611f705760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161199d565b600054610100900460ff16611ffe5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61200b81602001516126fc565b6120148161276b565b50565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061205457612054615195565b602002602001018181525050818160018151811061186b5761186b615195565b6001600160a01b03821661209b57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120c45760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116d7565b61211b6012848484612355565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121955780610b0b565b60169392505050565b670de0b6b3a76400008111156121e0576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611571565b6001600160a01b03811660009081526001830160205260408120541515610b0b565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122b09087903090889088906004016153c3565b602060405180830381865afa1580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190615409565b6000611bc16123036201518084615426565b61282f565b6000808061231c6123036201518086615426565b5091509150611bc182826128cb565b6000610b0b836001600160a01b038416612951565b6000610b0b836001600160a01b038416612a4b565b60006001600160a01b03841615801561236c575082155b8015612376575081155b905060006001600160a01b0385161580159061239a575082158061239a5750838310155b9050811580156123a8575080155b156123f8576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401611011565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b03841615801561243c575082155b8015612446575081155b905060006001600160a01b038516158015906124625750600084115b801561246e5750600083115b90508115801561247c575080155b156124cc576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401611011565b600386018390556001860184905581156124f357600060028701819055600487015561255f565b856004015460000361251a5760006002870155612510834261543a565b600487015561255f565b85546001600160a01b0386811691161461255f578554600090612546906001600160a01b031687612a9a565b60028801549091506125589082612aa6565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b61258e8383612b03565b6001600160a01b0383166125b557604051636070789160e11b815260040160405180910390fd5b816000036125ef576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006125fa84610ad5565b6001600160a01b03160361263a576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061264584611156565b905080821115610e78576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401611011565b600061269882602061543a565b835110156126df5782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152611011918491600401918252602082015260400190565b50016020015190565b6126f28282612b49565b61086d8585612bcf565b600054610100900460ff166127555760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6127628160a00151612bf7565b61201481612cad565b600054610100900460ff166127c45760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b60005b81515181101561089d5761281d826000015182815181106127ea576127ea615195565b6020026020010151600001518360000151838151811061280c5761280c615195565b602002602001015160200151611deb565b80612827816151c1565b9150506127c7565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161288c5761288c6153ad565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128dc5750816003145b806128e75750816005145b806128f25750816007145b806128fd5750816008145b80612908575081600a145b80612913575081600c145b156129205750601f610f3a565b816002146129305750601e610f3a565b61293983612e08565b61294457601c612947565b601d5b60ff169392505050565b60008181526001830160205260408120548015612a3a5760006129756001836151f7565b8554909150600090612989906001906151f7565b90508181146129ee5760008660000182815481106129a9576129a9615195565b90600052602060002001549050808760000184815481106129cc576129cc615195565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129ff576129ff61544d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f3a565b6000915050610f3a565b5092915050565b6000818152600183016020526040812054612a9257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f3a565b506000610f3a565b6000610b0b8383612e44565b60008282028315801590612ac9575082848281612ac557612ac56153ad565b0414155b15612af157604051637472527d60e11b81526004810185905260248101849052604401611011565b670de0b6b3a764000090049392505050565b612b0d8282613043565b612b17828261304d565b612b218282613071565b612b2b828261315d565b612b35828261334c565b612b3f8282613396565b61089d8282613483565b6003541561089d576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612bb357600080fd5b505af1158015612bc7573d6000803e3d6000fd5b505050505050565b612bd98282613599565b612be3828261363b565b612bed828261365d565b61089d828261389c565b600054610100900460ff16612c505760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051612c5b906138c9565b612c63613999565b612c7081602001516139fc565b612c7d8160400151613a5e565b612c8a8160600151613ac0565b612c978160800151613b22565b612ca48160a00151613b84565b61201481613be6565b600054610100900460ff16612d065760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051612d1190611593565b612d1e8160200151611c6e565b612d2b8160400151611f47565b60005b816060015151811015612d9957612d8782606001518281518110612d5457612d54615195565b60200260200101516000015183606001518381518110612d7657612d76615195565b60200260200101516020015161187d565b80612d91816151c1565b915050612d2e565b5060005b81608001515181101561089d57612df682608001518281518110612dc357612dc3615195565b60200260200101516000015183608001518381518110612de557612de5615195565b602002602001015160200151612074565b80612e00816151c1565b915050612d9d565b6000612e15600483615463565b158015612e2b5750612e28606483615463565b15155b80610f3a5750612e3d61019083615463565b1592915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe91906151da565b90506001600160a01b038116612f0f576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401611011565b6000612f19613c3f565b90508051600014612faa57816001600160a01b031663355efdd9612f3c87613cbf565b612f4587613cbf565b846040518463ffffffff1660e01b8152600401612f6493929190615477565b602060405180830381865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190615310565b61303a565b816001600160a01b031663ac41865a612fc287613cbf565b612fcb87613cbf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303a9190615310565b95945050505050565b61089d8282613cf3565b60045460ff161561089d5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806130b0575081513a11155b9050806130f55781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401611011565b602082015115610e7857600061310b483a6151f7565b602084015190915081111580612bc75760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152611011918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156131995760405163013ce60b60e01b815242600482015260248101839052604401611011565b60008460028111156131ad576131ad614a54565b0361326657826000036131c257505050505050565b806000036131dc576131d4834261543a565b600d55612bc7565b60006131e883426151f7565b905060006131f68583615426565b905060006132048683615396565b61320e90846151f7565b90508381111561323a5760405163013ce60b60e01b815242600482015260248101869052604401611011565b8561324683600161543a565b6132509190615396565b61325a908661543a565b600d5550612bc7915050565b81421015801561327f575061327b818361543a565b4211155b1561328e576131d48284613d46565b600060018560028111156132a4576132a4614a54565b146132b7576132b242612308565b6132c0565b6132c0836122f1565b905060006132ce8483613dde565b9050804210156132fa5760405163013ce60b60e01b815242600482015260248101829052604401611011565b6000613306848361543a565b905042811080156133335760405163013ce60b60e01b815242600482015260248101839052604401611011565b61333d8388613d46565b600d5550505050505050505050565b613355826111b3565b61089d576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401611011565b60006133a183611be3565b80519091506001600160a01b03166133b857505050565b6000836001600160a01b031682600001516001600160a01b0316146133f4576133ef6133e8858460000151612a9a565b8490612aa6565b6133f6565b825b905060008260200151821015801561341e57506040830151158061341e575082604001518211155b90508061086d578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401611011565b600061348e8361216a565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506134dd57505050565b6000836001600160a01b031682600001516001600160a01b0316146135125761350d6133e8858460000151612a9a565b613514565b825b905060008260800151421061352a576000613530565b82604001515b61353a908361543a565b9050826020015181111561086d57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401611011565b60006135a48361216a565b80549091506001600160a01b03166135bb57505050565b80546000906001600160a01b038581169116146135f15781546135ec906133e89086906001600160a01b0316612a9a565b6135f3565b825b90508160040154421061361c57600060028301556003820154613616904261543a565b60048301555b80826002016000828254613630919061543a565b909155505050505050565b600d54600003613649575050565b613654600d54613dfd565b50506000600d55565b600554600003613699576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546136d291906151f7565b905060006136e03a83615396565b905060008360400151600014806136fb575083604001518211155b905080613745578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401611011929190918252602082015260400190565b600060055560608401511580159061375d5750600085115b15612bc7576000613830306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c991906151da565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382a91906151da565b88612a9a565b9050600061383e8483611b56565b9050600061384c8289613e32565b90508660600151811115610d515760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152611011918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff166139225760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61399081600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398b91906151da565b613efb565b61201481613f5d565b600054610100900460ff166139f25760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6139fa613feb565b565b600054610100900460ff16613a555760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481614044565b600054610100900460ff16613ab75760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816140b9565b600054610100900460ff16613b195760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b6120148161412e565b600054610100900460ff16613b7b5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816141dc565b600054610100900460ff16613bdd5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816142ba565b600054610100900460ff166120145760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b60606000613c4b614398565b905036811115613c6957505060408051600081526020810190915290565b8067ffffffffffffffff811115613c8257613c8261478b565b6040519080825280601f01601f191660200182016040528015613cac576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614613ceb5781610f3a565b610f3a6143b3565b6002541561089d5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612b99565b600080600080613d558661443f565b919450925090506000613d68868461543a565b90506000613d77600c83615463565b90506000613d86600c84615426565b613d90908761543a565b905060006002600a5460ff166002811115613dad57613dad614a54565b14613db85784613dc2565b613dc282846128cb565b9050613dd08a83858461445e565b9a9950505050505050505050565b6000806000613dec4261443f565b509150915061303a8583838761445e565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161199d565b600081600003613e6e576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613e7e57506000610f3a565b670de0b6b3a764000083810290848281613e9a57613e9a6153ad565b0414613edc576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401611011565b826001820381613eee57613eee6153ad565b0460010191505092915050565b600054610100900460ff16613f545760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481614486565b600054610100900460ff16613fb65760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516120149190611d12565b600054610100900460ff166139fa5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b600054610100900460ff1661409d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b612014816000015182602001518360400151846060015161219e565b600054610100900460ff166141125760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b61201481600001518260200151836040015184606001516112da565b600054610100900460ff166141875760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b80516141929061194b565b60005b81602001515181101561089d576141ca826020015182815181106141bb576141bb615195565b60200260200101516001611639565b806141d4816151c1565b915050614195565b600054610100900460ff166142355760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b805180516020820151604083015161424e92919061210e565b60005b8260200151518110156109835760008360200151828151811061427657614276615195565b602002602001015190506000816020015190506142a5826000015182600001518360200151846040015161174c565b505080806142b2906151c1565b915050614251565b600054610100900460ff166143135760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b805180516020820151604083015161432c929190611d95565b60005b8260200151518110156109835760008360200151828151811061435457614354615195565b6020026020010151905060008160200151905061438382600001518260000151836020015184604001516119a8565b50508080614390906151c1565b91505061432f565b600060243610156143a95750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061443a91906151da565b905090565b6000808061445162015180850461282f565b9196909550909350915050565b600061303a84848461446f8961451f565b6144788a61453d565b6144818b614559565b614566565b600054610100900460ff166144df5760405162461bcd60e51b815260206004820152602b602482015260008051602061554a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611011565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061452f6201518084615463565b9050610b0b610e1082615426565b60008061454c610e1084615463565b9050610b0b603c82615426565b6000610f3a603c83615463565b600081614574603c85615396565b614580610e1087615396565b6201518061458f8b8b8b6145c2565b6145999190615396565b6145a3919061543a565b6145ad919061543a565b6145b7919061543a565b979650505050505050565b60006107b28410156145d357600080fd5b838383600062253d8c60046064600c6145ed600e886154a3565b6145f791906154c3565b614603886113246154f1565b61460d91906154f1565b61461791906154c3565b614622906003615519565b61462c91906154c3565b600c8061463a600e886154a3565b61464491906154c3565b61464f90600c615519565b61465a6002886154a3565b61466491906154a3565b6146709061016f615519565b61467a91906154c3565b6004600c614689600e896154a3565b61469391906154c3565b61469f896112c06154f1565b6146a991906154f1565b6146b5906105b5615519565b6146bf91906154c3565b6146cb617d4b876154a3565b6146d591906154f1565b6146df91906154f1565b6146e991906154a3565b6146f391906154a3565b98975050505050505050565b803560ff8116811461471057600080fd5b919050565b6000806000806080858703121561472b57600080fd5b614734856146ff565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461201457600080fd5b80356147108161474e565b60006020828403121561478057600080fd5b8135610b0b8161474e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156147c4576147c461478b565b60405290565b6040516080810167ffffffffffffffff811182821017156147c4576147c461478b565b60405160c0810167ffffffffffffffff811182821017156147c4576147c461478b565b604051601f8201601f1916810167ffffffffffffffff811182821017156148395761483961478b565b604052919050565b600067ffffffffffffffff82111561485b5761485b61478b565b5060051b60200190565b600082601f83011261487657600080fd5b8135602061488b61488683614841565b614810565b82815260059290921b840181019181810190868411156148aa57600080fd5b8286015b848110156148ce5780356148c18161474e565b83529183019183016148ae565b509695505050505050565b801515811461201457600080fd5b600080604083850312156148fa57600080fd5b823567ffffffffffffffff8082111561491257600080fd5b61491e86838701614865565b935060209150818501358181111561493557600080fd5b85019050601f8101861361494857600080fd5b803561495661488682614841565b81815260059190911b8201830190838101908883111561497557600080fd5b928401925b8284101561499c57833561498d816148d9565b8252928401929084019061497a565b80955050505050509250929050565b600080600080608085870312156149c157600080fd5b84356149cc8161474e565b935060208501356149dc8161474e565b93969395505050506040820135916060013590565b60008060408385031215614a0457600080fd5b8235614a0f8161474e565b91506020830135614a1f8161474e565b809150509250929050565b80356002811061471057600080fd5b600060208284031215614a4b57600080fd5b610b0b82614a2a565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614a8c57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614aa757600080fd5b8335614ab28161474e565b95602085013595506040909401359392505050565b60008060408385031215614ada57600080fd5b50508035926020909101359150565b600060208284031215614afb57600080fd5b5035919050565b6000614b1061488684614841565b8381529050602080820190600685901b840186811115614b2f57600080fd5b845b81811015614b7e5760408189031215614b4a5760008081fd5b614b526147a1565b8135614b5d8161474e565b815281840135614b6c8161474e565b81850152845292820192604001614b31565b505050509392505050565b600082601f830112614b9a57600080fd5b610b0b83833560208501614b02565b600082601f830112614bba57600080fd5b81356020614bca61488683614841565b82815260069290921b84018101918181019086841115614be957600080fd5b8286015b848110156148ce5760408189031215614c065760008081fd5b614c0e6147a1565b8135614c198161474e565b81528185013585820152835291830191604001614bed565b600060608284031215614c4357600080fd5b6040516060810181811067ffffffffffffffff82111715614c6657614c6661478b565b6040529050808235614c778161474e565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614ca857600080fd5b614cb06147ca565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614cec57600080fd5b614cf46147ca565b9050614cff826146ff565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614d3757600080fd5b614d3f6147a1565b9050614d4a82614a2a565b8152602082013567ffffffffffffffff811115614d6657600080fd5b614d7284828501614865565b60208301525092915050565b600060808284031215614d9057600080fd5b614d986147a1565b90508135614da58161474e565b8152614db48360208401614c31565b602082015292915050565b60006080808385031215614dd257600080fd5b614dda6147a1565b9150614de68484614c31565b8252606083013567ffffffffffffffff811115614e0257600080fd5b8301601f81018513614e1357600080fd5b80356020614e2361488683614841565b82815260079290921b83018101918181019088841115614e4257600080fd5b938201935b83851015614e6857614e598986614d7e565b82529385019390820190614e47565b808388015250505050505092915050565b60006080808385031215614e8c57600080fd5b614e946147a1565b9150614ea08484614c31565b8252606083013567ffffffffffffffff811115614ebc57600080fd5b8301601f81018513614ecd57600080fd5b80356020614edd61488683614841565b82815260079290921b83018101918181019088841115614efc57600080fd5b938201935b83851015614e6857614f138986614d7e565b82529385019390820190614f01565b60006101c08284031215614f3557600080fd5b614f3d6147ed565b9050614f498383614c31565b8152614f588360608401614c96565b6020820152614f6a8360e08401614cda565b604082015261016082013567ffffffffffffffff80821115614f8b57600080fd5b614f9785838601614d25565b6060840152610180840135915080821115614fb157600080fd5b614fbd85838601614dbf565b60808401526101a0840135915080821115614fd757600080fd5b50614fe484828501614e79565b60a08301525092915050565b6000602080838503121561500357600080fd5b823567ffffffffffffffff8082111561501b57600080fd5b908401906040828703121561502f57600080fd5b6150376147a1565b82358281111561504657600080fd5b8301601f8101881361505757600080fd5b615065888235878401614b02565b825250838301358281111561507957600080fd5b929092019160c0838803121561508e57600080fd5b6150966147ed565b61509f84614763565b81526150ac858501614763565b85820152604084013560408201526060840135838111156150cc57600080fd5b6150d889828701614b89565b6060830152506080840135838111156150f057600080fd5b6150fc89828701614ba9565b60808301525060a08401358381111561511457600080fd5b61512089828701614f22565b60a083015250938101939093525090949350505050565b6000806040838503121561514a57600080fd5b82356151558161474e565b946020939093013593505050565b6000806000806080858703121561517957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016151d3576151d36151ab565b5060010190565b6000602082840312156151ec57600080fd5b8151610b0b8161474e565b81810381811115610f3a57610f3a6151ab565b60005b8381101561522557818101518382015260200161520d565b50506000910152565b6000815180845261524681602086016020860161520a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611bc1604083018461522e565b60006020828403121561528e57600080fd5b815167ffffffffffffffff808211156152a657600080fd5b818401915084601f8301126152ba57600080fd5b8151818111156152cc576152cc61478b565b6152df601f8201601f1916602001614810565b91508082528560208285010111156152f657600080fd5b61530781602084016020860161520a565b50949350505050565b60006020828403121561532257600080fd5b5051919050565b600081518084526020808501945080840160005b838110156153595781518752958201959082019060010161533d565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061303a6060830184615329565b8082028115828204841417610f3a57610f3a6151ab565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526153ff6080830184615329565b9695505050505050565b60006020828403121561541b57600080fd5b8151610b0b816148d9565b600082615435576154356153ad565b500490565b80820180821115610f3a57610f3a6151ab565b634e487b7160e01b600052603160045260246000fd5b600082615472576154726153ad565b500690565b60006001600160a01b0380861683528085166020840152506060604083015261303a606083018461522e565b8181036000831280158383131683831282161715612a4457612a446151ab565b6000826154d2576154d26153ad565b600160ff1b8214600019841416156154ec576154ec6151ab565b500590565b8082018281126000831280158216821582161715615511576155116151ab565b505092915050565b80820260008212600160ff1b84141615615535576155356151ab565b8181058314821517610f3a57610f3a6151ab56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220bba17f7e74a1ded5976fb9422efcc6915690a3b0a2eaba9fb49c24ad02f2878464736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
