{
  "_format": "hh-sol-artifact-1",
  "contractName": "AxelarBridger",
  "sourceName": "contracts/bridge/AxelarBridger.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": "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": [
        {
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "TaskBridgeCurrentChainId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskDestinationChainNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        }
      ],
      "name": "TaskFeeAboveMax",
      "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": "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": [],
      "name": "TaskInvalidMaxFee",
      "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": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "TaskNextConnectorNotZero",
      "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": [],
      "name": "TaskRecipientZero",
      "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": [
        {
          "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": true,
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "CustomDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxFeeSet",
      "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": "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": true,
          "internalType": "uint256",
          "name": "defaultDestinationChain",
          "type": "uint256"
        }
      ],
      "name": "DefaultDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxFeeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "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": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "RecipientSet",
      "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": "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": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": "customDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "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": "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": "defaultDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "getMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": "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": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "destinationChain",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.MaxFee",
                  "name": "maxFee",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "destinationChain",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomDestinationChain[]",
                  "name": "customDestinationChains",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256",
                          "name": "amount",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct BaseBridgeTask.MaxFee",
                      "name": "maxFee",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxFee[]",
                  "name": "customMaxFees",
                  "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 BaseBridgeTask.BaseBridgeConfig",
              "name": "baseBridgeConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct AxelarBridger.AxelarBridgeConfig",
          "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": [],
      "name": "recipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setCustomDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxFee",
      "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": "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setDefaultDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "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": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRecipient",
      "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": "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": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61575280620000f36000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80637a2f57d0116101b2578063bb3084f6116100f9578063d09edf31116100a2578063d86483e11161007c578063d86483e1146108b3578063e6b5be98146108c6578063eb19ca8b146108d9578063f9eaee0d1461090257600080fd5b8063d09edf3114610874578063d3feb6021461088d578063d45a76cf146108a057600080fd5b8063c31163be116100d3578063c31163be1461082e578063c47590e414610841578063ce11b4181461085457600080fd5b8063bb3084f6146107f7578063bf5d9eab1461080a578063c267621e1461081d57600080fd5b8063a2c456441161015b578063b07addf611610135578063b07addf6146107c8578063b187bd26146107d1578063b96e422c146107ee57600080fd5b8063a2c4564414610728578063a33741771461073b578063a5900c4d1461076e57600080fd5b806390333ba81161018c57806390333ba8146106e25780639eebe7cd146106f5578063a0c3774f1461071557600080fd5b80637a2f57d01461067d57806383f3084f146106c75780638456cb59146106da57600080fd5b806342d4693e116102765780635ea54eee1161021f5780636aacaad8116101f95780636aacaad81461060b5780637125590a146106575780637196f8e91461066a57600080fd5b80635ea54eee1461059a57806360f5dfda146105c657806366d003ac146105f857600080fd5b80634fd49efd116102505780634fd49efd1461051c57806351a424b1146105475780635670e2ce1461057f57600080fd5b806342d4693e146104ba578063468534c2146104d45780634a45a3a8146104e757600080fd5b806323a6e376116102d85780633bd9ef28116102b25780633bd9ef281461048c5780633f4ba83a1461049f578063423a4b40146104a757600080fd5b806323a6e3761461045357806330eae572146104665780633bbed4a01461047957600080fd5b806321972384116103095780632197238414610389578063221a8c681461039c5780632384c32d1461044057600080fd5b80630fe105e81461033057806310188aef14610345578063119a5e9614610358575b600080fd5b61034361033e366004614860565b610915565b005b6103436103533660046148b9565b61094e565b61036061097b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610343610397366004614a79565b6109b2565b61040e6103aa3660046148b9565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610380565b61034361044e366004614b3d565b610a62565b61034361046136600461508b565b610a91565b6103436104743660046151e0565b610bb7565b6103436104873660046148b9565b610bf4565b61034361049a3660046151fb565b610c1d565b610343610da8565b6103436104b5366004614b3d565b610e2f565b600f546104c79060ff1681565b604051610380919061523d565b6103436104e2366004615265565b610e5e565b61050e7f2705606c9fe826e91a1b8ff6f86de33204c8b1a8bfb55cc430979d7834c66d4881565b604051908152602001610380565b60015461052f906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b61055a6105553660046148b9565b610e8b565b604080516001600160a01b039094168452602084019290925290820152606001610380565b60025460035460408051928352602083019190915201610380565b600654600754600854600954604080519485526020850193909352918301526060820152608001610380565b6105d96105d43660046148b9565b610eb4565b604080516001600160a01b039093168352602083019190915201610380565b601d5461052f906001600160a01b031681565b61040e6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6103436106653660046152a6565b610ed5565b6103436106783660046151fb565b610f00565b6105d961068b3660046148b9565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c5461052f906001600160a01b031681565b610343610f2b565b6103436106f03660046152c8565b610f9d565b61050e6107033660046148b9565b60236020526000908152604090205481565b61050e6107233660046148b9565b610fca565b6103436107363660046152fd565b611061565b61055a604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61055a61077c3660046148b9565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b61050e601e5481565b6004546107de9060ff1681565b6040519015158152602001610380565b61050e601f5481565b61050e6108053660046148b9565b61108a565b6103436108183660046152fd565b6110ba565b6001546001600160a01b031661052f565b61034361083c3660046151fb565b6110e3565b61034361084f3660046151fb565b61110e565b61050e6108623660046148b9565b60226020526000908152604090205481565b60005461052f906201000090046001600160a01b031681565b61034361089b3660046152c8565b611139565b61040e6108ae3660046148b9565b611166565b61050e6108c13660046148b9565b6111d5565b6103436108d4366004615316565b611204565b60408051808201909152602080546001600160a01b0316808352602154919092018190526105d9565b6107de6109103660046148b9565b611233565b6109248460ff16848484611275565b61093b336000356001600160e01b03191683611320565b61094785858585611367565b5050505050565b6109578161160c565b61096e336000356001600160e01b03191683611320565b61097782611620565b5050565b600a5460009081908190819060ff16600281111561099b5761099b615227565b600b54600c54600e54935093509350935090919293565b6109c8336000356001600160e01b0319166116aa565b8051825114610a03576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a5d57610a4b838281518110610a2457610a24615348565b6020026020010151838381518110610a3e57610a3e615348565b60200260200101516116c6565b80610a5581615374565b915050610a06565b505050565b610a6e84848484611770565b610a85336000356001600160e01b03191683611320565b610947858585856117d9565b600054610100900460ff1615808015610ab15750600054600160ff909116105b80610acb5750303b158015610acb575060005460ff166001145b610b425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610b65576000805461ff0019166101001790555b610b6e82611892565b8015610977576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610bd4816001811115610bcc57610bcc615227565b60ff16611902565b610beb336000356001600160e01b03191683611320565b61097782611949565b610bfd8161160c565b610c14336000356001600160e01b03191683611320565b610977826119a6565b610c278282611a30565b610c3e336000356001600160e01b03191683611320565b81600003610c5257610c4f83610fca565b91505b610c5c8383611a9f565b60007fb1c7387700000000000000000000000000000000000000000000000000000000610c888561108a565b601d5460405160248101929092526001600160a01b0380881660448401526064830187905216608482015260a40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610d5092919091169085906004016153dd565b6000604051808303816000875af1158015610d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9791908101906153ff565b50610da28484611aac565b50505050565b610dbe336000356001600160e01b0319166116aa565b60045460ff16610dfa576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610e3b84848484611770565b610e52336000356001600160e01b03191683611320565b61094785858585611ab9565b610e69838383611b79565b610e80336000356001600160e01b03191683611320565b610da2848484611c14565b600080600080610e9a85611cb0565b805160208201516040909201519097919650945092505050565b6000806000610ec284611d3b565b8051602090910151909590945092505050565b610edf8282611db5565b610ef6336000356001600160e01b03191683611320565b610a5d8383611e0f565b610f0a8282611a30565b610f21336000356001600160e01b03191683611320565b610a5d8383611e54565b610f41336000356001600160e01b0319166116aa565b60045460ff1615610f655760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610fa8838383611e9b565b610fbf336000356001600160e01b03191683611320565b610da2848484611efa565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105b9190615493565b92915050565b61106a81611902565b611081336000356001600160e01b03191683611320565b61097782611f50565b6001600160a01b03811660009081526022602052604081205480156110af57806110b3565b601e545b9392505050565b6110c381611902565b6110da336000356001600160e01b03191683611320565b61097782611fae565b6110ed8282611a30565b611104336000356001600160e01b03191683611320565b610a5d8383612004565b6111188282611a30565b61112f336000356001600160e01b03191683611320565b610a5d8383612095565b611144838383611e9b565b61115b336000356001600160e01b03191683611320565b610da2848484612132565b6000806000806000806111788761218e565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526023602052604081205480156111fa57806110b3565b601f549392505050565b61121084848484611275565b611227336000356001600160e01b03191683611320565b610947858585856121c2565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff168181111561126957611269615227565b1461105b5780156110b3565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112ac576112ac615348565b60200260200101818152505083816001815181106112cc576112cc615348565b60200260200101818152505082816002815181106112ec576112ec615348565b602002602001018181525050818160038151811061130c5761130c615348565b602002602001018181525050949350505050565b61132b83838361225d565b610a5d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b39939291906154e7565b60ff841661141857600081118061137e5750600082115b1561141357826000036113b05760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b8015806113bc57508281115b156113e657604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b8160000361141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b611575565b826000036114455760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b80158061145d575061145a6224ea0084615519565b81115b1561148757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b816000036114b457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60001960ff8516016114f657601c6114cb836122fb565b111561141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60011960ff85160161153e5761150b82612312565b611514836122fb565b1461141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b39565b8360ff16600281111561158a5761158a615227565b600a805460ff191660018360028111156115a6576115a6615227565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b606061105b826001600160a01b0316611902565b6001600160a01b038116611660576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526109779083908390611320565b6001600160a01b038216611706576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061171b57611716601083612335565b611726565b61172660108361234a565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611764911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117b0576117b0615348565b602002602001018181525050836001600160a01b0316816001815181106112cc576112cc615348565b6001600160a01b038416611819576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061183d9084848461235f565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600054610100900460ff166118eb5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b80516118f69061242f565b6118ff8161249f565b50565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061193857611938615348565b602002602001018181525050919050565b600f805482919060ff19166001838181111561196757611967615227565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161199b919061523d565b60405180910390a150565b6001600160a01b0381166119e6576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611a6d57611a6d615348565b6020026020010181815250508181600181518110611a8d57611a8d615348565b60200260200101818152505092915050565b61097782826000806124f8565b61097782826000806126c8565b6001600160a01b038416611af9576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611b1d908484846126d2565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611b6b929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611bb857611bb8615348565b602002602001018181525050826001600160a01b031681600181518110611be157611be1615348565b6020026020010181815250508181600281518110611c0157611c01615348565b6020026020010181815250509392505050565b6001600160a01b038316611c3b57604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611c5e908383612831565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611ca391815260200190565b60405180910390a3505050565b611cdd604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611d065780611d09565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b604080518082018252600080825260208083018290526001600160a01b0385811683526024825291849020845180860190955280549092168085526001909201549084015290919015611d8e57806110b3565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611dec57611dec615348565b6020026020010181815250508160001c81600181518110611a8d57611a8d615348565b8015611e4a576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b39565b61097782826128a4565b611e6060208383612831565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf8260405161176491815260200190565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611eda57611eda615348565b6020026020010181815250508281600181518110611be157611be1615348565b611f0760168484846126d2565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611f795760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161199b565b468103611fd15760405163499ff75560e01b815260048101829052602401610b39565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b03821661202b57604051636070789160e11b815260040160405180910390fd5b46810361204e5760405163499ff75560e01b815260048101829052602401610b39565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b0382166120bc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120e55760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906117649084815260200190565b61213f601284848461235f565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121b957806110b3565b60169392505050565b670de0b6b3a7640000811115612204576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016115fe565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122b2908790309088908890600401615530565b602060405180830381865afa1580156122cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f39190615576565b949350505050565b60006122f361230d62015180846155a9565b612927565b6000808061232661230d62015180866155a9565b50915091506122f382826129c3565b60006110b3836001600160a01b038416612a49565b60006110b3836001600160a01b038416612b43565b60006001600160a01b038416158015612376575082155b8015612380575081155b905060006001600160a01b038516158015906123a457508215806123a45750838310155b9050811580156123b2575080155b15612402576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166124885760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b612496816101000151612b92565b6118ff81612c3f565b600054610100900460ff166118ff5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6125028484612e0e565b6001600160a01b03841661252957604051636070789160e11b815260040160405180910390fd5b82600003612563576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61256c8461108a565b6000036125a5576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006125b0856111d5565b9050808311156125f6576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610b39565b816000036126045750610da2565b600061260f86611d3b565b80519091506001600160a01b031661264a5760208101516040516303b27ef760e01b8152610b39918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146126865761268161267a888460000151612e54565b8590612e60565b612688565b835b905081602001518111156126bf5760208201516040516303b27ef760e01b8152610b39918391600401918252602082015260400190565b50505050505050565b610da28484612ebd565b60006001600160a01b0384161580156126e9575082155b80156126f3575081155b905060006001600160a01b0385161580159061270f5750600084115b801561271b5750600083115b905081158015612729575080155b15612779576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b600386018390556001860184905581156127a057600060028701819055600487015561280c565b85600401546000036127c757600060028701556127bd83426155bd565b600487015561280c565b85546001600160a01b0386811691161461280c5785546000906127f3906001600160a01b031687612e54565b60028801549091506128059082612e60565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b03821615801561284757508015155b1561287e576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b80821480156128b257508115155b156128ec576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b39565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161298457612984615593565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129d45750816003145b806129df5750816005145b806129ea5750816007145b806129f55750816008145b80612a00575081600a145b80612a0b575081600c145b15612a185750601f61105b565b81600214612a285750601e61105b565b612a3183612ee5565b612a3c57601c612a3f565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b32576000612a6d6001836155d0565b8554909150600090612a81906001906155d0565b9050818114612ae6576000866000018281548110612aa157612aa1615348565b9060005260206000200154905080876000018481548110612ac457612ac4615348565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612af757612af76155e3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061105b565b600091505061105b565b5092915050565b6000818152600183016020526040812054612b8a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561105b565b50600061105b565b600054610100900460ff16612beb5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612bf690612f21565b612bfe612ff1565b612c0b8160200151613054565b612c1881604001516130b6565b612c258160600151613118565b612c32816080015161317a565b6118f68160a001516131dc565b600054610100900460ff16612c985760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612ca390611620565b612cb081602001516119a6565b612cbd8160400151611fae565b612cca8160600151611f50565b608081015180516020820151612ce09190611e54565b60005b8260a0015151811015612d375760008360a001518281518110612d0857612d08615348565b60200260200101519050612d2481600001518260200151612004565b5080612d2f81615374565b915050612ce3565b5060005b8260c0015151811015612da657612d948360c001518281518110612d6157612d61615348565b6020026020010151600001518460c001518381518110612d8357612d83615348565b602002602001015160200151612095565b80612d9e81615374565b915050612d3b565b5060005b8260e0015151811015610a5d5760008360e001518281518110612dcf57612dcf615348565b60200260200101519050600081602001519050612df9826000015182600001518360200151611c14565b50508080612e0690615374565b915050612daa565b612e18828261323e565b612e228282613248565b612e2c828261326c565b612e368282613360565b612e40828261354f565b612e4a8282613599565b6109778282613686565b60006110b3838361379c565b60008282028315801590612e83575082848281612e7f57612e7f615593565b0414155b15612eab57604051637472527d60e11b81526004810185905260248101849052604401610b39565b670de0b6b3a764000090049392505050565b612ec7828261399b565b612ed18282613a3d565b612edb8282613a5f565b6109778282613ca9565b6000612ef26004836155f9565b158015612f085750612f056064836155f9565b15155b8061105b5750612f1a610190836155f9565b1592915050565b600054610100900460ff16612f7a5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b612fe881600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe3919061560d565b613cd6565b6118ff81613d38565b600054610100900460ff1661304a5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b613052613dc6565b565b600054610100900460ff166130ad5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613e1f565b600054610100900460ff1661310f5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613e94565b600054610100900460ff166131715760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613f09565b600054610100900460ff166131d35760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613fb7565b600054610100900460ff166132355760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81614095565b6109778282614173565b60045460ff16156109775760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806132ab575081513a11155b9050806132f05781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b39565b602082015115610da2576000613306483a6155d0565b6020840151909150811115806133585760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b39918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff909316924282111561339c5760405163013ce60b60e01b815242600482015260248101839052604401610b39565b60008460028111156133b0576133b0615227565b0361346957826000036133c557505050505050565b806000036133df576133d783426155bd565b600d55613358565b60006133eb83426155d0565b905060006133f985836155a9565b905060006134078683615519565b61341190846155d0565b90508381111561343d5760405163013ce60b60e01b815242600482015260248101869052604401610b39565b856134498360016155bd565b6134539190615519565b61345d90866155bd565b600d5550613358915050565b814210158015613482575061347e81836155bd565b4211155b15613491576133d78284614208565b600060018560028111156134a7576134a7615227565b146134ba576134b542612312565b6134c3565b6134c3836122fb565b905060006134d184836142a0565b9050804210156134fd5760405163013ce60b60e01b815242600482015260248101829052604401610b39565b600061350984836155bd565b905042811080156135365760405163013ce60b60e01b815242600482015260248101839052604401610b39565b6135408388614208565b600d5550505050505050505050565b61355882611233565b610977576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b39565b60006135a483611cb0565b80519091506001600160a01b03166135bb57505050565b6000836001600160a01b031682600001516001600160a01b0316146135f7576135f26135eb858460000151612e54565b8490612e60565b6135f9565b825b9050600082602001518210158015613621575060408301511580613621575082604001518211155b905080610947578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b39565b60006136918361218e565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506136e057505050565b6000836001600160a01b031682600001516001600160a01b031614613715576137106135eb858460000151612e54565b613717565b825b905060008260800151421061372d576000613733565b82604001515b61373d90836155bd565b9050826020015181111561094757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b39565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613816919061560d565b90506001600160a01b038116613867576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b39565b60006138716142bf565b9050805160001461390257816001600160a01b031663355efdd96138948761433f565b61389d8761433f565b846040518463ffffffff1660e01b81526004016138bc9392919061562a565b602060405180830381865afa1580156138d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fd9190615493565b613992565b816001600160a01b031663ac41865a61391a8761433f565b6139238761433f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561396e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139929190615493565b95945050505050565b60006139a68361218e565b80549091506001600160a01b03166139bd57505050565b80546000906001600160a01b038581169116146139f35781546139ee906135eb9086906001600160a01b0316612e54565b6139f5565b825b905081600401544210613a1e57600060028301556003820154613a1890426155bd565b60048301555b80826002016000828254613a3291906155bd565b909155505050505050565b600d54600003613a4b575050565b613a56600d54614373565b50506000600d55565b600554600003613a9b576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613ad491906155d0565b90506000613ae23a83615519565b90506000836040015160001480613afd575083604001518211155b905080613b47578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b39929190918252602082015260400190565b6000600555606084015115801590613b5f5750600085115b15613358576000613c32306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcb919061560d565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c919061560d565b88612e54565b90506000613c4084836143a8565b90506000613c4e828961441a565b90508660600151811115613c9e5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b39918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d2f5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff816144e3565b600054610100900460ff16613d915760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516118ff9190611e0f565b600054610100900460ff166130525760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600054610100900460ff16613e785760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81600001518260200151836040015184606001516121c2565b600054610100900460ff16613eed5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff8160000151826020015183604001518460600151611367565b600054610100900460ff16613f625760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051613f6d90611949565b60005b81602001515181101561097757613fa582602001518281518110613f9657613f96615348565b602002602001015160016116c6565b80613faf81615374565b915050613f70565b600054610100900460ff166140105760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614029929190612132565b60005b826020015151811015610a5d5760008360200151828151811061405157614051615348565b6020026020010151905060008160200151905061408082600001518260000151836020015184604001516117d9565b5050808061408d90615374565b91505061402c565b600054610100900460ff166140ee5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614107929190611efa565b60005b826020015151811015610a5d5760008360200151828151811061412f5761412f615348565b6020026020010151905060008160200151905061415e8260000151826000015183602001518460400151611ab9565b5050808061416b90615374565b91505061410a565b60025415610977576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b1580156141f457600080fd5b505af1158015613358573d6000803e3d6000fd5b6000806000806142178661457c565b91945092509050600061422a86846155bd565b90506000614239600c836155f9565b90506000614248600c846155a9565b61425290876155bd565b905060006002600a5460ff16600281111561426f5761426f615227565b1461427a5784614284565b61428482846129c3565b90506142928a83858461459b565b9a9950505050505050505050565b60008060006142ae4261457c565b50915091506139928583838761459b565b606060006142cb6145c3565b9050368111156142e957505060408051600081526020810190915290565b8067ffffffffffffffff811115614302576143026148d6565b6040519080825280601f01601f19166020018201604052801561432c576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461436b578161105b565b61105b6145de565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161199b565b600082820283158015906143cb5750828482816143c7576143c7615593565b0414155b156143f357604051637472527d60e11b81526004810185905260248101849052604401610b39565b801561441057670de0b6b3a76400006000198201046001016122f3565b6000949350505050565b600081600003614456576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036144665750600061105b565b670de0b6b3a76400008381029084828161448257614482615593565b04146144c4576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b39565b8260018203816144d6576144d6615593565b0460010191505092915050565b600054610100900460ff1661453c5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061458e620151808504612927565b9196909550909350915050565b60006139928484846145ac8961466a565b6145b58a614688565b6145be8b6146a4565b6146b1565b600060243610156145d45750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614665919061560d565b905090565b60008061467a62015180846155f9565b90506110b3610e10826155a9565b600080614697610e10846155f9565b90506110b3603c826155a9565b600061105b603c836155f9565b6000816146bf603c85615519565b6146cb610e1087615519565b620151806146da8b8b8b61470d565b6146e49190615519565b6146ee91906155bd565b6146f891906155bd565b61470291906155bd565b979650505050505050565b60006107b284101561471e57600080fd5b838383600062253d8c60046064600c614738600e88615656565b6147429190615676565b61474e886113246156a4565b61475891906156a4565b6147629190615676565b61476d9060036156cc565b6147779190615676565b600c80614785600e88615656565b61478f9190615676565b61479a90600c6156cc565b6147a5600288615656565b6147af9190615656565b6147bb9061016f6156cc565b6147c59190615676565b6004600c6147d4600e89615656565b6147de9190615676565b6147ea896112c06156a4565b6147f491906156a4565b614800906105b56156cc565b61480a9190615676565b614816617d4b87615656565b61482091906156a4565b61482a91906156a4565b6148349190615656565b61483e9190615656565b98975050505050505050565b803560ff8116811461485b57600080fd5b919050565b6000806000806080858703121561487657600080fd5b61487f8561484a565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146118ff57600080fd5b803561485b81614899565b6000602082840312156148cb57600080fd5b81356110b381614899565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561490f5761490f6148d6565b60405290565b6040516080810167ffffffffffffffff8111828210171561490f5761490f6148d6565b60405160c0810167ffffffffffffffff8111828210171561490f5761490f6148d6565b6040516020810167ffffffffffffffff8111828210171561490f5761490f6148d6565b604051610120810167ffffffffffffffff8111828210171561490f5761490f6148d6565b604051601f8201601f1916810167ffffffffffffffff811182821017156149cb576149cb6148d6565b604052919050565b600067ffffffffffffffff8211156149ed576149ed6148d6565b5060051b60200190565b600082601f830112614a0857600080fd5b81356020614a1d614a18836149d3565b6149a2565b82815260059290921b84018101918181019086841115614a3c57600080fd5b8286015b84811015614a60578035614a5381614899565b8352918301918301614a40565b509695505050505050565b80151581146118ff57600080fd5b60008060408385031215614a8c57600080fd5b823567ffffffffffffffff80821115614aa457600080fd5b614ab0868387016149f7565b9350602091508185013581811115614ac757600080fd5b85019050601f81018613614ada57600080fd5b8035614ae8614a18826149d3565b81815260059190911b82018301908381019088831115614b0757600080fd5b928401925b82841015614b2e578335614b1f81614a6b565b82529284019290840190614b0c565b80955050505050509250929050565b60008060008060808587031215614b5357600080fd5b8435614b5e81614899565b93506020850135614b6e81614899565b93969395505050506040820135916060013590565b600060408284031215614b9557600080fd5b614b9d6148ec565b90508135614baa81614899565b808252506020820135602082015292915050565b600082601f830112614bcf57600080fd5b81356020614bdf614a18836149d3565b82815260069290921b84018101918181019086841115614bfe57600080fd5b8286015b84811015614a6057614c148882614b83565b835291830191604001614c02565b600082601f830112614c3357600080fd5b81356020614c43614a18836149d3565b82815260609283028501820192828201919087851115614c6257600080fd5b8387015b85811015614cb05781818a031215614c7e5760008081fd5b614c866148ec565b8135614c9181614899565b8152614c9f8a838801614b83565b818701528452928401928101614c66565b5090979650505050505050565b600060608284031215614ccf57600080fd5b6040516060810181811067ffffffffffffffff82111715614cf257614cf26148d6565b6040529050808235614d0381614899565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614d3457600080fd5b614d3c614915565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614d7857600080fd5b614d80614915565b9050614d8b8261484a565b815260208201356020820152604082013560408201526060820135606082015292915050565b80356002811061485b57600080fd5b600060408284031215614dd257600080fd5b614dda6148ec565b9050614de582614db1565b8152602082013567ffffffffffffffff811115614e0157600080fd5b614e0d848285016149f7565b60208301525092915050565b600060808284031215614e2b57600080fd5b614e336148ec565b90508135614e4081614899565b8152614e4f8360208401614cbd565b602082015292915050565b60006080808385031215614e6d57600080fd5b614e756148ec565b9150614e818484614cbd565b8252606083013567ffffffffffffffff811115614e9d57600080fd5b8301601f81018513614eae57600080fd5b80356020614ebe614a18836149d3565b82815260079290921b83018101918181019088841115614edd57600080fd5b938201935b83851015614f0357614ef48986614e19565b82529385019390820190614ee2565b808388015250505050505092915050565b60006080808385031215614f2757600080fd5b614f2f6148ec565b9150614f3b8484614cbd565b8252606083013567ffffffffffffffff811115614f5757600080fd5b8301601f81018513614f6857600080fd5b80356020614f78614a18836149d3565b82815260079290921b83018101918181019088841115614f9757600080fd5b938201935b83851015614f0357614fae8986614e19565b82529385019390820190614f9c565b60006101c08284031215614fd057600080fd5b614fd8614938565b9050614fe48383614cbd565b8152614ff38360608401614d22565b60208201526150058360e08401614d66565b604082015261016082013567ffffffffffffffff8082111561502657600080fd5b61503285838601614dc0565b606084015261018084013591508082111561504c57600080fd5b61505885838601614e5a565b60808401526101a084013591508082111561507257600080fd5b5061507f84828501614f14565b60a08301525092915050565b60006020828403121561509d57600080fd5b813567ffffffffffffffff808211156150b557600080fd5b90830190602082860312156150c957600080fd5b6150d161495b565b8235828111156150e057600080fd5b929092019161014083870312156150f657600080fd5b6150fe61497e565b615107846148ae565b8152615115602085016148ae565b6020820152604084013560408201526060840135606082015261513b8760808601614b83565b608082015260c08401358381111561515257600080fd5b61515e88828701614bbe565b60a08301525060e08401358381111561517657600080fd5b61518288828701614bbe565b60c083015250610100808501358481111561519c57600080fd5b6151a889828801614c22565b60e084015250610120850135848111156151c157600080fd5b6151cd89828801614fbd565b9183019190915250815295945050505050565b6000602082840312156151f257600080fd5b6110b382614db1565b6000806040838503121561520e57600080fd5b823561521981614899565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061525f57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006060848603121561527a57600080fd5b833561528581614899565b9250602084013561529581614899565b929592945050506040919091013590565b600080604083850312156152b957600080fd5b50508035926020909101359150565b6000806000606084860312156152dd57600080fd5b83356152e881614899565b95602085013595506040909401359392505050565b60006020828403121561530f57600080fd5b5035919050565b6000806000806080858703121561532c57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016153865761538661535e565b5060010190565b60005b838110156153a8578181015183820152602001615390565b50506000910152565b600081518084526153c981602086016020860161538d565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006122f360408301846153b1565b60006020828403121561541157600080fd5b815167ffffffffffffffff8082111561542957600080fd5b818401915084601f83011261543d57600080fd5b81518181111561544f5761544f6148d6565b615462601f8201601f19166020016149a2565b915080825285602082850101111561547957600080fd5b61548a81602084016020860161538d565b50949350505050565b6000602082840312156154a557600080fd5b5051919050565b600081518084526020808501945080840160005b838110156154dc578151875295820195908201906001016154c0565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061399260608301846154ac565b808202811582820484141761105b5761105b61535e565b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261556c60808301846154ac565b9695505050505050565b60006020828403121561558857600080fd5b81516110b381614a6b565b634e487b7160e01b600052601260045260246000fd5b6000826155b8576155b8615593565b500490565b8082018082111561105b5761105b61535e565b8181038181111561105b5761105b61535e565b634e487b7160e01b600052603160045260246000fd5b60008261560857615608615593565b500690565b60006020828403121561561f57600080fd5b81516110b381614899565b60006001600160a01b0380861683528085166020840152506060604083015261399260608301846153b1565b8181036000831280158383131683831282161715612b3c57612b3c61535e565b60008261568557615685615593565b600160ff1b82146000198414161561569f5761569f61535e565b500590565b80820182811260008312801582168215821617156156c4576156c461535e565b505092915050565b80820260008212600160ff1b841416156156e8576156e861535e565b818105831482151761105b5761105b61535e56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220e5a851465befbda56684aa16ebb36e9d04085bb442d1b99bdf712705e3167d5664736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80637a2f57d0116101b2578063bb3084f6116100f9578063d09edf31116100a2578063d86483e11161007c578063d86483e1146108b3578063e6b5be98146108c6578063eb19ca8b146108d9578063f9eaee0d1461090257600080fd5b8063d09edf3114610874578063d3feb6021461088d578063d45a76cf146108a057600080fd5b8063c31163be116100d3578063c31163be1461082e578063c47590e414610841578063ce11b4181461085457600080fd5b8063bb3084f6146107f7578063bf5d9eab1461080a578063c267621e1461081d57600080fd5b8063a2c456441161015b578063b07addf611610135578063b07addf6146107c8578063b187bd26146107d1578063b96e422c146107ee57600080fd5b8063a2c4564414610728578063a33741771461073b578063a5900c4d1461076e57600080fd5b806390333ba81161018c57806390333ba8146106e25780639eebe7cd146106f5578063a0c3774f1461071557600080fd5b80637a2f57d01461067d57806383f3084f146106c75780638456cb59146106da57600080fd5b806342d4693e116102765780635ea54eee1161021f5780636aacaad8116101f95780636aacaad81461060b5780637125590a146106575780637196f8e91461066a57600080fd5b80635ea54eee1461059a57806360f5dfda146105c657806366d003ac146105f857600080fd5b80634fd49efd116102505780634fd49efd1461051c57806351a424b1146105475780635670e2ce1461057f57600080fd5b806342d4693e146104ba578063468534c2146104d45780634a45a3a8146104e757600080fd5b806323a6e376116102d85780633bd9ef28116102b25780633bd9ef281461048c5780633f4ba83a1461049f578063423a4b40146104a757600080fd5b806323a6e3761461045357806330eae572146104665780633bbed4a01461047957600080fd5b806321972384116103095780632197238414610389578063221a8c681461039c5780632384c32d1461044057600080fd5b80630fe105e81461033057806310188aef14610345578063119a5e9614610358575b600080fd5b61034361033e366004614860565b610915565b005b6103436103533660046148b9565b61094e565b61036061097b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610343610397366004614a79565b6109b2565b61040e6103aa3660046148b9565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610380565b61034361044e366004614b3d565b610a62565b61034361046136600461508b565b610a91565b6103436104743660046151e0565b610bb7565b6103436104873660046148b9565b610bf4565b61034361049a3660046151fb565b610c1d565b610343610da8565b6103436104b5366004614b3d565b610e2f565b600f546104c79060ff1681565b604051610380919061523d565b6103436104e2366004615265565b610e5e565b61050e7f2705606c9fe826e91a1b8ff6f86de33204c8b1a8bfb55cc430979d7834c66d4881565b604051908152602001610380565b60015461052f906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b61055a6105553660046148b9565b610e8b565b604080516001600160a01b039094168452602084019290925290820152606001610380565b60025460035460408051928352602083019190915201610380565b600654600754600854600954604080519485526020850193909352918301526060820152608001610380565b6105d96105d43660046148b9565b610eb4565b604080516001600160a01b039093168352602083019190915201610380565b601d5461052f906001600160a01b031681565b61040e6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6103436106653660046152a6565b610ed5565b6103436106783660046151fb565b610f00565b6105d961068b3660046148b9565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c5461052f906001600160a01b031681565b610343610f2b565b6103436106f03660046152c8565b610f9d565b61050e6107033660046148b9565b60236020526000908152604090205481565b61050e6107233660046148b9565b610fca565b6103436107363660046152fd565b611061565b61055a604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61055a61077c3660046148b9565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b61050e601e5481565b6004546107de9060ff1681565b6040519015158152602001610380565b61050e601f5481565b61050e6108053660046148b9565b61108a565b6103436108183660046152fd565b6110ba565b6001546001600160a01b031661052f565b61034361083c3660046151fb565b6110e3565b61034361084f3660046151fb565b61110e565b61050e6108623660046148b9565b60226020526000908152604090205481565b60005461052f906201000090046001600160a01b031681565b61034361089b3660046152c8565b611139565b61040e6108ae3660046148b9565b611166565b61050e6108c13660046148b9565b6111d5565b6103436108d4366004615316565b611204565b60408051808201909152602080546001600160a01b0316808352602154919092018190526105d9565b6107de6109103660046148b9565b611233565b6109248460ff16848484611275565b61093b336000356001600160e01b03191683611320565b61094785858585611367565b5050505050565b6109578161160c565b61096e336000356001600160e01b03191683611320565b61097782611620565b5050565b600a5460009081908190819060ff16600281111561099b5761099b615227565b600b54600c54600e54935093509350935090919293565b6109c8336000356001600160e01b0319166116aa565b8051825114610a03576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a5d57610a4b838281518110610a2457610a24615348565b6020026020010151838381518110610a3e57610a3e615348565b60200260200101516116c6565b80610a5581615374565b915050610a06565b505050565b610a6e84848484611770565b610a85336000356001600160e01b03191683611320565b610947858585856117d9565b600054610100900460ff1615808015610ab15750600054600160ff909116105b80610acb5750303b158015610acb575060005460ff166001145b610b425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610b65576000805461ff0019166101001790555b610b6e82611892565b8015610977576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610bd4816001811115610bcc57610bcc615227565b60ff16611902565b610beb336000356001600160e01b03191683611320565b61097782611949565b610bfd8161160c565b610c14336000356001600160e01b03191683611320565b610977826119a6565b610c278282611a30565b610c3e336000356001600160e01b03191683611320565b81600003610c5257610c4f83610fca565b91505b610c5c8383611a9f565b60007fb1c7387700000000000000000000000000000000000000000000000000000000610c888561108a565b601d5460405160248101929092526001600160a01b0380881660448401526064830187905216608482015260a40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610d5092919091169085906004016153dd565b6000604051808303816000875af1158015610d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9791908101906153ff565b50610da28484611aac565b50505050565b610dbe336000356001600160e01b0319166116aa565b60045460ff16610dfa576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610e3b84848484611770565b610e52336000356001600160e01b03191683611320565b61094785858585611ab9565b610e69838383611b79565b610e80336000356001600160e01b03191683611320565b610da2848484611c14565b600080600080610e9a85611cb0565b805160208201516040909201519097919650945092505050565b6000806000610ec284611d3b565b8051602090910151909590945092505050565b610edf8282611db5565b610ef6336000356001600160e01b03191683611320565b610a5d8383611e0f565b610f0a8282611a30565b610f21336000356001600160e01b03191683611320565b610a5d8383611e54565b610f41336000356001600160e01b0319166116aa565b60045460ff1615610f655760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610fa8838383611e9b565b610fbf336000356001600160e01b03191683611320565b610da2848484611efa565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105b9190615493565b92915050565b61106a81611902565b611081336000356001600160e01b03191683611320565b61097782611f50565b6001600160a01b03811660009081526022602052604081205480156110af57806110b3565b601e545b9392505050565b6110c381611902565b6110da336000356001600160e01b03191683611320565b61097782611fae565b6110ed8282611a30565b611104336000356001600160e01b03191683611320565b610a5d8383612004565b6111188282611a30565b61112f336000356001600160e01b03191683611320565b610a5d8383612095565b611144838383611e9b565b61115b336000356001600160e01b03191683611320565b610da2848484612132565b6000806000806000806111788761218e565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526023602052604081205480156111fa57806110b3565b601f549392505050565b61121084848484611275565b611227336000356001600160e01b03191683611320565b610947858585856121c2565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff168181111561126957611269615227565b1461105b5780156110b3565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112ac576112ac615348565b60200260200101818152505083816001815181106112cc576112cc615348565b60200260200101818152505082816002815181106112ec576112ec615348565b602002602001018181525050818160038151811061130c5761130c615348565b602002602001018181525050949350505050565b61132b83838361225d565b610a5d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b39939291906154e7565b60ff841661141857600081118061137e5750600082115b1561141357826000036113b05760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b8015806113bc57508281115b156113e657604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b8160000361141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b611575565b826000036114455760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b80158061145d575061145a6224ea0084615519565b81115b1561148757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b816000036114b457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60001960ff8516016114f657601c6114cb836122fb565b111561141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60011960ff85160161153e5761150b82612312565b611514836122fb565b1461141357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b39565b8360ff16600281111561158a5761158a615227565b600a805460ff191660018360028111156115a6576115a6615227565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b606061105b826001600160a01b0316611902565b6001600160a01b038116611660576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526109779083908390611320565b6001600160a01b038216611706576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061171b57611716601083612335565b611726565b61172660108361234a565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611764911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117b0576117b0615348565b602002602001018181525050836001600160a01b0316816001815181106112cc576112cc615348565b6001600160a01b038416611819576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061183d9084848461235f565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600054610100900460ff166118eb5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b80516118f69061242f565b6118ff8161249f565b50565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061193857611938615348565b602002602001018181525050919050565b600f805482919060ff19166001838181111561196757611967615227565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161199b919061523d565b60405180910390a150565b6001600160a01b0381166119e6576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611a6d57611a6d615348565b6020026020010181815250508181600181518110611a8d57611a8d615348565b60200260200101818152505092915050565b61097782826000806124f8565b61097782826000806126c8565b6001600160a01b038416611af9576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611b1d908484846126d2565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611b6b929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611bb857611bb8615348565b602002602001018181525050826001600160a01b031681600181518110611be157611be1615348565b6020026020010181815250508181600281518110611c0157611c01615348565b6020026020010181815250509392505050565b6001600160a01b038316611c3b57604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611c5e908383612831565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611ca391815260200190565b60405180910390a3505050565b611cdd604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611d065780611d09565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b604080518082018252600080825260208083018290526001600160a01b0385811683526024825291849020845180860190955280549092168085526001909201549084015290919015611d8e57806110b3565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611dec57611dec615348565b6020026020010181815250508160001c81600181518110611a8d57611a8d615348565b8015611e4a576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b39565b61097782826128a4565b611e6060208383612831565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf8260405161176491815260200190565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611eda57611eda615348565b6020026020010181815250508281600181518110611be157611be1615348565b611f0760168484846126d2565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611f795760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161199b565b468103611fd15760405163499ff75560e01b815260048101829052602401610b39565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b03821661202b57604051636070789160e11b815260040160405180910390fd5b46810361204e5760405163499ff75560e01b815260048101829052602401610b39565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b0382166120bc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120e55760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906117649084815260200190565b61213f601284848461235f565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121b957806110b3565b60169392505050565b670de0b6b3a7640000811115612204576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016115fe565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122b2908790309088908890600401615530565b602060405180830381865afa1580156122cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f39190615576565b949350505050565b60006122f361230d62015180846155a9565b612927565b6000808061232661230d62015180866155a9565b50915091506122f382826129c3565b60006110b3836001600160a01b038416612a49565b60006110b3836001600160a01b038416612b43565b60006001600160a01b038416158015612376575082155b8015612380575081155b905060006001600160a01b038516158015906123a457508215806123a45750838310155b9050811580156123b2575080155b15612402576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166124885760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b612496816101000151612b92565b6118ff81612c3f565b600054610100900460ff166118ff5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6125028484612e0e565b6001600160a01b03841661252957604051636070789160e11b815260040160405180910390fd5b82600003612563576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61256c8461108a565b6000036125a5576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006125b0856111d5565b9050808311156125f6576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610b39565b816000036126045750610da2565b600061260f86611d3b565b80519091506001600160a01b031661264a5760208101516040516303b27ef760e01b8152610b39918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146126865761268161267a888460000151612e54565b8590612e60565b612688565b835b905081602001518111156126bf5760208201516040516303b27ef760e01b8152610b39918391600401918252602082015260400190565b50505050505050565b610da28484612ebd565b60006001600160a01b0384161580156126e9575082155b80156126f3575081155b905060006001600160a01b0385161580159061270f5750600084115b801561271b5750600083115b905081158015612729575080155b15612779576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b600386018390556001860184905581156127a057600060028701819055600487015561280c565b85600401546000036127c757600060028701556127bd83426155bd565b600487015561280c565b85546001600160a01b0386811691161461280c5785546000906127f3906001600160a01b031687612e54565b60028801549091506128059082612e60565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b03821615801561284757508015155b1561287e576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b80821480156128b257508115155b156128ec576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b39565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161298457612984615593565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129d45750816003145b806129df5750816005145b806129ea5750816007145b806129f55750816008145b80612a00575081600a145b80612a0b575081600c145b15612a185750601f61105b565b81600214612a285750601e61105b565b612a3183612ee5565b612a3c57601c612a3f565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b32576000612a6d6001836155d0565b8554909150600090612a81906001906155d0565b9050818114612ae6576000866000018281548110612aa157612aa1615348565b9060005260206000200154905080876000018481548110612ac457612ac4615348565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612af757612af76155e3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061105b565b600091505061105b565b5092915050565b6000818152600183016020526040812054612b8a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561105b565b50600061105b565b600054610100900460ff16612beb5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612bf690612f21565b612bfe612ff1565b612c0b8160200151613054565b612c1881604001516130b6565b612c258160600151613118565b612c32816080015161317a565b6118f68160a001516131dc565b600054610100900460ff16612c985760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612ca390611620565b612cb081602001516119a6565b612cbd8160400151611fae565b612cca8160600151611f50565b608081015180516020820151612ce09190611e54565b60005b8260a0015151811015612d375760008360a001518281518110612d0857612d08615348565b60200260200101519050612d2481600001518260200151612004565b5080612d2f81615374565b915050612ce3565b5060005b8260c0015151811015612da657612d948360c001518281518110612d6157612d61615348565b6020026020010151600001518460c001518381518110612d8357612d83615348565b602002602001015160200151612095565b80612d9e81615374565b915050612d3b565b5060005b8260e0015151811015610a5d5760008360e001518281518110612dcf57612dcf615348565b60200260200101519050600081602001519050612df9826000015182600001518360200151611c14565b50508080612e0690615374565b915050612daa565b612e18828261323e565b612e228282613248565b612e2c828261326c565b612e368282613360565b612e40828261354f565b612e4a8282613599565b6109778282613686565b60006110b3838361379c565b60008282028315801590612e83575082848281612e7f57612e7f615593565b0414155b15612eab57604051637472527d60e11b81526004810185905260248101849052604401610b39565b670de0b6b3a764000090049392505050565b612ec7828261399b565b612ed18282613a3d565b612edb8282613a5f565b6109778282613ca9565b6000612ef26004836155f9565b158015612f085750612f056064836155f9565b15155b8061105b5750612f1a610190836155f9565b1592915050565b600054610100900460ff16612f7a5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b612fe881600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe3919061560d565b613cd6565b6118ff81613d38565b600054610100900460ff1661304a5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b613052613dc6565b565b600054610100900460ff166130ad5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613e1f565b600054610100900460ff1661310f5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613e94565b600054610100900460ff166131715760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613f09565b600054610100900460ff166131d35760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81613fb7565b600054610100900460ff166132355760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81614095565b6109778282614173565b60045460ff16156109775760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806132ab575081513a11155b9050806132f05781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b39565b602082015115610da2576000613306483a6155d0565b6020840151909150811115806133585760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b39918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff909316924282111561339c5760405163013ce60b60e01b815242600482015260248101839052604401610b39565b60008460028111156133b0576133b0615227565b0361346957826000036133c557505050505050565b806000036133df576133d783426155bd565b600d55613358565b60006133eb83426155d0565b905060006133f985836155a9565b905060006134078683615519565b61341190846155d0565b90508381111561343d5760405163013ce60b60e01b815242600482015260248101869052604401610b39565b856134498360016155bd565b6134539190615519565b61345d90866155bd565b600d5550613358915050565b814210158015613482575061347e81836155bd565b4211155b15613491576133d78284614208565b600060018560028111156134a7576134a7615227565b146134ba576134b542612312565b6134c3565b6134c3836122fb565b905060006134d184836142a0565b9050804210156134fd5760405163013ce60b60e01b815242600482015260248101829052604401610b39565b600061350984836155bd565b905042811080156135365760405163013ce60b60e01b815242600482015260248101839052604401610b39565b6135408388614208565b600d5550505050505050505050565b61355882611233565b610977576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b39565b60006135a483611cb0565b80519091506001600160a01b03166135bb57505050565b6000836001600160a01b031682600001516001600160a01b0316146135f7576135f26135eb858460000151612e54565b8490612e60565b6135f9565b825b9050600082602001518210158015613621575060408301511580613621575082604001518211155b905080610947578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b39565b60006136918361218e565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506136e057505050565b6000836001600160a01b031682600001516001600160a01b031614613715576137106135eb858460000151612e54565b613717565b825b905060008260800151421061372d576000613733565b82604001515b61373d90836155bd565b9050826020015181111561094757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b39565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613816919061560d565b90506001600160a01b038116613867576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b39565b60006138716142bf565b9050805160001461390257816001600160a01b031663355efdd96138948761433f565b61389d8761433f565b846040518463ffffffff1660e01b81526004016138bc9392919061562a565b602060405180830381865afa1580156138d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fd9190615493565b613992565b816001600160a01b031663ac41865a61391a8761433f565b6139238761433f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561396e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139929190615493565b95945050505050565b60006139a68361218e565b80549091506001600160a01b03166139bd57505050565b80546000906001600160a01b038581169116146139f35781546139ee906135eb9086906001600160a01b0316612e54565b6139f5565b825b905081600401544210613a1e57600060028301556003820154613a1890426155bd565b60048301555b80826002016000828254613a3291906155bd565b909155505050505050565b600d54600003613a4b575050565b613a56600d54614373565b50506000600d55565b600554600003613a9b576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613ad491906155d0565b90506000613ae23a83615519565b90506000836040015160001480613afd575083604001518211155b905080613b47578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b39929190918252602082015260400190565b6000600555606084015115801590613b5f5750600085115b15613358576000613c32306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcb919061560d565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c919061560d565b88612e54565b90506000613c4084836143a8565b90506000613c4e828961441a565b90508660600151811115613c9e5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b39918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d2f5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff816144e3565b600054610100900460ff16613d915760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516118ff9190611e0f565b600054610100900460ff166130525760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600054610100900460ff16613e785760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff81600001518260200151836040015184606001516121c2565b600054610100900460ff16613eed5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6118ff8160000151826020015183604001518460600151611367565b600054610100900460ff16613f625760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051613f6d90611949565b60005b81602001515181101561097757613fa582602001518281518110613f9657613f96615348565b602002602001015160016116c6565b80613faf81615374565b915050613f70565b600054610100900460ff166140105760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614029929190612132565b60005b826020015151811015610a5d5760008360200151828151811061405157614051615348565b6020026020010151905060008160200151905061408082600001518260000151836020015184604001516117d9565b5050808061408d90615374565b91505061402c565b600054610100900460ff166140ee5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614107929190611efa565b60005b826020015151811015610a5d5760008360200151828151811061412f5761412f615348565b6020026020010151905060008160200151905061415e8260000151826000015183602001518460400151611ab9565b5050808061416b90615374565b91505061410a565b60025415610977576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b1580156141f457600080fd5b505af1158015613358573d6000803e3d6000fd5b6000806000806142178661457c565b91945092509050600061422a86846155bd565b90506000614239600c836155f9565b90506000614248600c846155a9565b61425290876155bd565b905060006002600a5460ff16600281111561426f5761426f615227565b1461427a5784614284565b61428482846129c3565b90506142928a83858461459b565b9a9950505050505050505050565b60008060006142ae4261457c565b50915091506139928583838761459b565b606060006142cb6145c3565b9050368111156142e957505060408051600081526020810190915290565b8067ffffffffffffffff811115614302576143026148d6565b6040519080825280601f01601f19166020018201604052801561432c576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461436b578161105b565b61105b6145de565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161199b565b600082820283158015906143cb5750828482816143c7576143c7615593565b0414155b156143f357604051637472527d60e11b81526004810185905260248101849052604401610b39565b801561441057670de0b6b3a76400006000198201046001016122f3565b6000949350505050565b600081600003614456576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036144665750600061105b565b670de0b6b3a76400008381029084828161448257614482615593565b04146144c4576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b39565b8260018203816144d6576144d6615593565b0460010191505092915050565b600054610100900460ff1661453c5760405162461bcd60e51b815260206004820152602b60248201526000805160206156fd83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061458e620151808504612927565b9196909550909350915050565b60006139928484846145ac8961466a565b6145b58a614688565b6145be8b6146a4565b6146b1565b600060243610156145d45750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614665919061560d565b905090565b60008061467a62015180846155f9565b90506110b3610e10826155a9565b600080614697610e10846155f9565b90506110b3603c826155a9565b600061105b603c836155f9565b6000816146bf603c85615519565b6146cb610e1087615519565b620151806146da8b8b8b61470d565b6146e49190615519565b6146ee91906155bd565b6146f891906155bd565b61470291906155bd565b979650505050505050565b60006107b284101561471e57600080fd5b838383600062253d8c60046064600c614738600e88615656565b6147429190615676565b61474e886113246156a4565b61475891906156a4565b6147629190615676565b61476d9060036156cc565b6147779190615676565b600c80614785600e88615656565b61478f9190615676565b61479a90600c6156cc565b6147a5600288615656565b6147af9190615656565b6147bb9061016f6156cc565b6147c59190615676565b6004600c6147d4600e89615656565b6147de9190615676565b6147ea896112c06156a4565b6147f491906156a4565b614800906105b56156cc565b61480a9190615676565b614816617d4b87615656565b61482091906156a4565b61482a91906156a4565b6148349190615656565b61483e9190615656565b98975050505050505050565b803560ff8116811461485b57600080fd5b919050565b6000806000806080858703121561487657600080fd5b61487f8561484a565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146118ff57600080fd5b803561485b81614899565b6000602082840312156148cb57600080fd5b81356110b381614899565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561490f5761490f6148d6565b60405290565b6040516080810167ffffffffffffffff8111828210171561490f5761490f6148d6565b60405160c0810167ffffffffffffffff8111828210171561490f5761490f6148d6565b6040516020810167ffffffffffffffff8111828210171561490f5761490f6148d6565b604051610120810167ffffffffffffffff8111828210171561490f5761490f6148d6565b604051601f8201601f1916810167ffffffffffffffff811182821017156149cb576149cb6148d6565b604052919050565b600067ffffffffffffffff8211156149ed576149ed6148d6565b5060051b60200190565b600082601f830112614a0857600080fd5b81356020614a1d614a18836149d3565b6149a2565b82815260059290921b84018101918181019086841115614a3c57600080fd5b8286015b84811015614a60578035614a5381614899565b8352918301918301614a40565b509695505050505050565b80151581146118ff57600080fd5b60008060408385031215614a8c57600080fd5b823567ffffffffffffffff80821115614aa457600080fd5b614ab0868387016149f7565b9350602091508185013581811115614ac757600080fd5b85019050601f81018613614ada57600080fd5b8035614ae8614a18826149d3565b81815260059190911b82018301908381019088831115614b0757600080fd5b928401925b82841015614b2e578335614b1f81614a6b565b82529284019290840190614b0c565b80955050505050509250929050565b60008060008060808587031215614b5357600080fd5b8435614b5e81614899565b93506020850135614b6e81614899565b93969395505050506040820135916060013590565b600060408284031215614b9557600080fd5b614b9d6148ec565b90508135614baa81614899565b808252506020820135602082015292915050565b600082601f830112614bcf57600080fd5b81356020614bdf614a18836149d3565b82815260069290921b84018101918181019086841115614bfe57600080fd5b8286015b84811015614a6057614c148882614b83565b835291830191604001614c02565b600082601f830112614c3357600080fd5b81356020614c43614a18836149d3565b82815260609283028501820192828201919087851115614c6257600080fd5b8387015b85811015614cb05781818a031215614c7e5760008081fd5b614c866148ec565b8135614c9181614899565b8152614c9f8a838801614b83565b818701528452928401928101614c66565b5090979650505050505050565b600060608284031215614ccf57600080fd5b6040516060810181811067ffffffffffffffff82111715614cf257614cf26148d6565b6040529050808235614d0381614899565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614d3457600080fd5b614d3c614915565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614d7857600080fd5b614d80614915565b9050614d8b8261484a565b815260208201356020820152604082013560408201526060820135606082015292915050565b80356002811061485b57600080fd5b600060408284031215614dd257600080fd5b614dda6148ec565b9050614de582614db1565b8152602082013567ffffffffffffffff811115614e0157600080fd5b614e0d848285016149f7565b60208301525092915050565b600060808284031215614e2b57600080fd5b614e336148ec565b90508135614e4081614899565b8152614e4f8360208401614cbd565b602082015292915050565b60006080808385031215614e6d57600080fd5b614e756148ec565b9150614e818484614cbd565b8252606083013567ffffffffffffffff811115614e9d57600080fd5b8301601f81018513614eae57600080fd5b80356020614ebe614a18836149d3565b82815260079290921b83018101918181019088841115614edd57600080fd5b938201935b83851015614f0357614ef48986614e19565b82529385019390820190614ee2565b808388015250505050505092915050565b60006080808385031215614f2757600080fd5b614f2f6148ec565b9150614f3b8484614cbd565b8252606083013567ffffffffffffffff811115614f5757600080fd5b8301601f81018513614f6857600080fd5b80356020614f78614a18836149d3565b82815260079290921b83018101918181019088841115614f9757600080fd5b938201935b83851015614f0357614fae8986614e19565b82529385019390820190614f9c565b60006101c08284031215614fd057600080fd5b614fd8614938565b9050614fe48383614cbd565b8152614ff38360608401614d22565b60208201526150058360e08401614d66565b604082015261016082013567ffffffffffffffff8082111561502657600080fd5b61503285838601614dc0565b606084015261018084013591508082111561504c57600080fd5b61505885838601614e5a565b60808401526101a084013591508082111561507257600080fd5b5061507f84828501614f14565b60a08301525092915050565b60006020828403121561509d57600080fd5b813567ffffffffffffffff808211156150b557600080fd5b90830190602082860312156150c957600080fd5b6150d161495b565b8235828111156150e057600080fd5b929092019161014083870312156150f657600080fd5b6150fe61497e565b615107846148ae565b8152615115602085016148ae565b6020820152604084013560408201526060840135606082015261513b8760808601614b83565b608082015260c08401358381111561515257600080fd5b61515e88828701614bbe565b60a08301525060e08401358381111561517657600080fd5b61518288828701614bbe565b60c083015250610100808501358481111561519c57600080fd5b6151a889828801614c22565b60e084015250610120850135848111156151c157600080fd5b6151cd89828801614fbd565b9183019190915250815295945050505050565b6000602082840312156151f257600080fd5b6110b382614db1565b6000806040838503121561520e57600080fd5b823561521981614899565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061525f57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006060848603121561527a57600080fd5b833561528581614899565b9250602084013561529581614899565b929592945050506040919091013590565b600080604083850312156152b957600080fd5b50508035926020909101359150565b6000806000606084860312156152dd57600080fd5b83356152e881614899565b95602085013595506040909401359392505050565b60006020828403121561530f57600080fd5b5035919050565b6000806000806080858703121561532c57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016153865761538661535e565b5060010190565b60005b838110156153a8578181015183820152602001615390565b50506000910152565b600081518084526153c981602086016020860161538d565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006122f360408301846153b1565b60006020828403121561541157600080fd5b815167ffffffffffffffff8082111561542957600080fd5b818401915084601f83011261543d57600080fd5b81518181111561544f5761544f6148d6565b615462601f8201601f19166020016149a2565b915080825285602082850101111561547957600080fd5b61548a81602084016020860161538d565b50949350505050565b6000602082840312156154a557600080fd5b5051919050565b600081518084526020808501945080840160005b838110156154dc578151875295820195908201906001016154c0565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061399260608301846154ac565b808202811582820484141761105b5761105b61535e565b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261556c60808301846154ac565b9695505050505050565b60006020828403121561558857600080fd5b81516110b381614a6b565b634e487b7160e01b600052601260045260246000fd5b6000826155b8576155b8615593565b500490565b8082018082111561105b5761105b61535e565b8181038181111561105b5761105b61535e565b634e487b7160e01b600052603160045260246000fd5b60008261560857615608615593565b500690565b60006020828403121561561f57600080fd5b81516110b381614899565b60006001600160a01b0380861683528085166020840152506060604083015261399260608301846153b1565b8181036000831280158383131683831282161715612b3c57612b3c61535e565b60008261568557615685615593565b600160ff1b82146000198414161561569f5761569f61535e565b500590565b80820182811260008312801582168215821617156156c4576156c461535e565b505092915050565b80820260008212600160ff1b841416156156e8576156e861535e565b818105831482151761105b5761105b61535e56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220e5a851465befbda56684aa16ebb36e9d04085bb442d1b99bdf712705e3167d5664736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
