{
  "_format": "hh-sol-artifact-1",
  "contractName": "ConvexExiter",
  "sourceName": "contracts/liquidity/convex/ConvexExiter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "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": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "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": "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": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "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"
                },
                {
                  "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 BaseConvexTask.BaseConvexConfig",
              "name": "baseConvexConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct ConvexExiter.ConvexExitConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "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": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61492f80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80635ea54eee1161010f578063a5900c4d116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063a5900c4d14610538578063b187bd2614610592578063c267621e146105af578063d09edf31146105c057600080fd5b80638456cb59116100de5780638456cb59146104d757806390333ba8146104df578063a0c3774f146104f2578063a33741771461050557600080fd5b80635ea54eee146104395780636aacaad8146104655780637125590a146104b157806383f3084f146104c457600080fd5b80633bd9ef28116101875780634a45a3a8116101565780634a45a3a8146103865780634fd49efd146103bb57806351a424b1146103e65780635670e2ce1461041e57600080fd5b80633bd9ef281461033e5780633f4ba83a14610351578063423a4b401461035957806342d4693e1461036c57600080fd5b806321972384116101c35780632197238414610261578063221a8c68146102745780632384c32d1461031857806330eae5721461032b57600080fd5b80630fe105e8146101f557806310188aef1461020a5780631047c5301461021d578063119a5e9614610230575b600080fd5b610208610203366004613d6e565b610625565b005b610208610218366004613dbc565b61065e565b61020861022b3660046141a1565b61068b565b6102386107b1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61020861026f36600461430d565b6107e8565b6102e6610282366004613dbc565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610258565b6102086103263660046143d1565b610898565b610208610339366004614417565b6108c7565b61020861034c366004614432565b610904565b610208610aea565b6102086103673660046143d1565b610b71565b600f546103799060ff1681565b6040516102589190614474565b6103ad7f9b3b19993bea1e8cccf265d6d4b7954e4253de1ed727bf20e870acc71538343e81565b604051908152602001610258565b6001546103ce906001600160a01b031681565b6040516001600160a01b039091168152602001610258565b6103f96103f4366004613dbc565b610ba0565b604080516001600160a01b039094168452602084019290925290820152606001610258565b60025460035460408051928352602083019190915201610258565b600654600754600854600954604080519485526020850193909352918301526060820152608001610258565b6102e66040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102086104bf36600461449c565b610bc9565b601c546103ce906001600160a01b031681565b610208610bf4565b6102086104ed3660046144be565b610c66565b6103ad610500366004613dbc565b610c99565b6103f9604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103f9610546366004613dbc565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461059f9060ff1681565b6040519015158152602001610258565b6001546001600160a01b03166103ce565b6000546103ce906201000090046001600160a01b031681565b6102086105e73660046144be565b610d30565b6102e66105fa366004613dbc565b610d5d565b61020861060d3660046144f3565b610dcc565b61059f610620366004613dbc565b610dfb565b6106348460ff16848484610e46565b61064b336000356001600160e01b03191683610ef1565b61065785858585610f38565b5050505050565b610667816111dd565b61067e336000356001600160e01b03191683610ef1565b610687826111f1565b5050565b600054610100900460ff16158080156106ab5750600054600160ff909116105b806106c55750303b1580156106c5575060005460ff166001145b61073c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561075f576000805461ff0019166101001790555b61076882611288565b8015610687576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600a5460009081908190819060ff1660028111156107d1576107d161445e565b600b54600c54600e54935093509350935090919293565b6107fe336000356001600160e01b0319166112f8565b8051825114610839576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108935761088183828151811061085a5761085a614525565b602002602001015183838151811061087457610874614525565b6020026020010151611314565b8061088b81614551565b91505061083c565b505050565b6108a4848484846113be565b6108bb336000356001600160e01b03191683610ef1565b61065785858585611427565b6108e48160018111156108dc576108dc61445e565b60ff166114e0565b6108fb336000356001600160e01b03191683610ef1565b61068782611527565b61090e8282611584565b610925336000356001600160e01b03191683610ef1565b816000036109395761093683610c99565b91505b61094383836115f3565b604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fef693bed00000000000000000000000000000000000000000000000000000000179052600154601c5493517f1cff79cd000000000000000000000000000000000000000000000000000000008152929360009391831692631cff79cd92610a04929091169086906004016145ba565b6000604051808303816000875af1158015610a23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4b91908101906145dc565b601c546040517f917342ef0000000000000000000000000000000000000000000000000000000081526001600160a01b038089166004830152929350610657928892889291169063917342ef90602401602060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190614670565b610ae585611637565b611644565b610b00336000356001600160e01b0319166112f8565b60045460ff16610b3c576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b7d848484846113be565b610b94336000356001600160e01b03191683610ef1565b61065785858585611658565b600080600080610baf85611718565b805160208201516040909201519097919650945092505050565b610bd382826117a3565b610bea336000356001600160e01b03191683610ef1565b61089383836117fd565b610c0a336000356001600160e01b0319166112f8565b60045460ff1615610c2e5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610c71838383611880565b610c88336000356001600160e01b03191683610ef1565b610c93848484611912565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061468d565b92915050565b610d3b838383611880565b610d52336000356001600160e01b03191683610ef1565b610c93848484611968565b600080600080600080610d6f876119c4565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610dd884848484610e46565b610def336000356001600160e01b03191683610ef1565b610657858585856119f8565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610e3157610e3161445e565b14610e3d578015610e3f565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610e7d57610e7d614525565b6020026020010181815250508381600181518110610e9d57610e9d614525565b6020026020010181815250508281600281518110610ebd57610ebd614525565b6020026020010181815250508181600381518110610edd57610edd614525565b602002602001018181525050949350505050565b610efc838383611a93565b610893578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610733939291906146e1565b60ff8416610fe9576000811180610f4f5750600082115b15610fe45782600003610f815760405163bea499cb60e01b815260ff8516600482015260248101849052604401610733565b801580610f8d57508281115b15610fb757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610733565b81600003610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b611146565b826000036110165760405163bea499cb60e01b815260ff8516600482015260248101849052604401610733565b80158061102e575061102b6224ea0084614713565b81115b1561105857604051639e12fccf60e01b815260ff8516600482015260248101829052604401610733565b8160000361108557604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b60001960ff8516016110c757601c61109c83611b31565b1115610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b60011960ff85160161110f576110dc82611b48565b6110e583611b31565b14610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610733565b8360ff16600281111561115b5761115b61445e565b600a805460ff191660018360028111156111775761117761445e565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610d2a826001600160a01b03166114e0565b6001600160a01b038116611231576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b600054610100900460ff166112e15760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516112ec90611b6b565b6112f581611bda565b50565b6040805160008152602081019091526106879083908390610ef1565b6001600160a01b038216611354576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061136957611364601083611c33565b611374565b611374601083611c48565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516113b2911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106113fe576113fe614525565b602002602001018181525050836001600160a01b031681600181518110610e9d57610e9d614525565b6001600160a01b038416611467576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061148b90848484611c5d565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061151657611516614525565b602002602001018181525050919050565b600f805482919060ff1916600183818111156115455761154561445e565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516115799190614474565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106115c1576115c1614525565b60200260200101818152505081816001815181106115e1576115e1614525565b60200260200101818152505092915050565b6115fd8282611d3a565b80600003610687576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d2a826000611d84565b61164e8282611de1565b610c938484611e67565b6001600160a01b038416611698576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206116bc90848484611e71565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e1448848460405161170a929190918252602082015260400190565b60405180910390a350505050565b611745604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b03808316600090815260156020526040902080549091161561176e5780611771565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106117da576117da614525565b6020026020010181815250508160001c816001815181106115e1576115e1614525565b808214801561180b57508115155b15611845576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610733565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b0316816000815181106118bf576118bf614525565b60200260200101818152505082816001815181106118df576118df614525565b60200260200101818152505081816002815181106118ff576118ff614525565b6020026020010181815250509392505050565b61191f6016848484611e71565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6119756012848484611c5d565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156119ef5780610e3f565b60169392505050565b670de0b6b3a7640000811115611a3a576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016111cf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611ae890879030908890889060040161472a565b602060405180830381865afa158015611b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b299190614770565b949350505050565b6000611b29611b4362015180846147a3565b611fdd565b60008080611b5c611b4362015180866147a3565b5091509150611b298282612079565b600054610100900460ff16611bc45760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b611bd181602001516120ff565b6112f5816121ac565b600054610100900460ff166112f55760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6000610e3f836001600160a01b038416612210565b6000610e3f836001600160a01b03841661230a565b60006001600160a01b038416158015611c74575082155b8015611c7e575081155b905060006001600160a01b03851615801590611ca25750821580611ca25750838310155b905081158015611cb0575080155b15611d00576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610733565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b611d448282612359565b6001600160a01b038216610687576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d918260206147b7565b83511015611dd85782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610733918491600401918252602082015260400190565b50016020015190565b60035415610687576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505050505050565b610687828261239f565b60006001600160a01b038416158015611e88575082155b8015611e92575081155b905060006001600160a01b03851615801590611eae5750600084115b8015611eba5750600083115b905081158015611ec8575080155b15611f18576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610733565b60038601839055600186018490558115611f3f576000600287018190556004870155611fab565b8560040154600003611f665760006002870155611f5c83426147b7565b6004870155611fab565b85546001600160a01b03868116911614611fab578554600090611f92906001600160a01b0316876123c7565b6002880154909150611fa490826123d3565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161203a5761203a61478d565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061208a5750816003145b806120955750816005145b806120a05750816007145b806120ab5750816008145b806120b6575081600a145b806120c1575081600c145b156120ce5750601f610d2a565b816002146120de5750601e610d2a565b6120e783612430565b6120f257601c6120f5565b601d5b60ff169392505050565b600054610100900460ff166121585760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516121639061246c565b61216b61253c565b612178816020015161259f565b6121858160400151612601565b6121928160600151612663565b61219f81608001516126c5565b6112ec8160a00151612727565b600054610100900460ff166122055760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516112f5906111f1565b600081815260018301602052604081205480156122f95760006122346001836147ca565b8554909150600090612248906001906147ca565b90508181146122ad57600086600001828154811061226857612268614525565b906000526020600020015490508087600001848154811061228b5761228b614525565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806122be576122be6147dd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d2a565b6000915050610d2a565b5092915050565b600081815260018301602052604081205461235157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d2a565b506000610d2a565b6123638282612789565b61236d8282612793565b61237782826127b7565b61238182826128a3565b61238b8282612a92565b6123958282612adc565b6106878282612bc9565b6123a98282612cdf565b6123b38282612d81565b6123bd8282612da3565b6106878282612fed565b6000610e3f838361301a565b600082820283158015906123f65750828482816123f2576123f261478d565b0414155b1561241e57604051637472527d60e11b81526004810185905260248101849052604401610733565b670de0b6b3a764000090049392505050565b600061243d6004836147f3565b15801561245357506124506064836147f3565b15155b80610d2a5750612465610190836147f3565b1592915050565b600054610100900460ff166124c55760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b61253381600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa15801561250a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252e9190614670565b613219565b6112f58161327b565b600054610100900460ff166125955760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b61259d613316565b565b600054610100900460ff166125f85760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f58161336f565b600054610100900460ff1661265a5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816133e4565b600054610100900460ff166126bc5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581613459565b600054610100900460ff1661271e5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581613507565b600054610100900460ff166127805760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816135e5565b61068782826136c3565b60045460ff16156106875760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806127f6575081513a11155b90508061283b5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610733565b602082015115610c93576000612851483a6147ca565b602084015190915081111580611e5f5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610733918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156128df5760405163013ce60b60e01b815242600482015260248101839052604401610733565b60008460028111156128f3576128f361445e565b036129ac578260000361290857505050505050565b806000036129225761291a83426147b7565b600d55611e5f565b600061292e83426147ca565b9050600061293c85836147a3565b9050600061294a8683614713565b61295490846147ca565b9050838111156129805760405163013ce60b60e01b815242600482015260248101869052604401610733565b8561298c8360016147b7565b6129969190614713565b6129a090866147b7565b600d5550611e5f915050565b8142101580156129c557506129c181836147b7565b4211155b156129d45761291a8284613716565b600060018560028111156129ea576129ea61445e565b146129fd576129f842611b48565b612a06565b612a0683611b31565b90506000612a1484836137ae565b905080421015612a405760405163013ce60b60e01b815242600482015260248101829052604401610733565b6000612a4c84836147b7565b90504281108015612a795760405163013ce60b60e01b815242600482015260248101839052604401610733565b612a838388613716565b600d5550505050505050505050565b612a9b82610dfb565b610687576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610733565b6000612ae783611718565b80519091506001600160a01b0316612afe57505050565b6000836001600160a01b031682600001516001600160a01b031614612b3a57612b35612b2e8584600001516123c7565b84906123d3565b612b3c565b825b9050600082602001518210158015612b64575060408301511580612b64575082604001518211155b905080610657578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610733565b6000612bd4836119c4565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612c2357505050565b6000836001600160a01b031682600001516001600160a01b031614612c5857612c53612b2e8584600001516123c7565b612c5a565b825b9050600082608001514210612c70576000612c76565b82604001515b612c8090836147b7565b9050826020015181111561065757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610733565b6000612cea836119c4565b80549091506001600160a01b0316612d0157505050565b80546000906001600160a01b03858116911614612d37578154612d3290612b2e9086906001600160a01b03166123c7565b612d39565b825b905081600401544210612d6257600060028301556003820154612d5c90426147b7565b60048301555b80826002016000828254612d7691906147b7565b909155505050505050565b600d54600003612d8f575050565b612d9a600d546137cd565b50506000600d55565b600554600003612ddf576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612e1891906147ca565b90506000612e263a83614713565b90506000836040015160001480612e41575083604001518211155b905080612e8b578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610733929190918252602082015260400190565b6000600555606084015115801590612ea35750600085115b15611e5f576000612f76306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0f9190614670565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f709190614670565b886123c7565b90506000612f848483613802565b90506000612f928289613874565b90508660600151811115612fe25760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610733918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130949190614670565b90506001600160a01b0381166130e5576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610733565b60006130ef61393d565b9050805160001461318057816001600160a01b031663355efdd9613112876139bd565b61311b876139bd565b846040518463ffffffff1660e01b815260040161313a93929190614807565b602060405180830381865afa158015613157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317b919061468d565b613210565b816001600160a01b031663ac41865a613198876139bd565b6131a1876139bd565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613210919061468d565b95945050505050565b600054610100900460ff166132725760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816139f1565b600054610100900460ff166132d45760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055602081015160408201516112f591906117fd565b600054610100900460ff1661259d5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b600054610100900460ff166133c85760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581600001518260200151836040015184606001516119f8565b600054610100900460ff1661343d5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f58160000151826020015183604001518460600151610f38565b600054610100900460ff166134b25760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516134bd90611527565b60005b816020015151811015610687576134f5826020015182815181106134e6576134e6614525565b60200260200101516001611314565b806134ff81614551565b9150506134c0565b600054610100900460ff166135605760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b8051805160208201516040830151613579929190611968565b60005b826020015151811015610893576000836020015182815181106135a1576135a1614525565b602002602001015190506000816020015190506135d08260000151826000015183602001518460400151611427565b505080806135dd90614551565b91505061357c565b600054610100900460ff1661363e5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b8051805160208201516040830151613657929190611912565b60005b8260200151518110156108935760008360200151828151811061367f5761367f614525565b602002602001015190506000816020015190506136ae8260000151826000015183602001518460400151611658565b505080806136bb90614551565b91505061365a565b600254156106875760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401611e31565b60008060008061372586613a8a565b91945092509050600061373886846147b7565b90506000613747600c836147f3565b90506000613756600c846147a3565b61376090876147b7565b905060006002600a5460ff16600281111561377d5761377d61445e565b146137885784613792565b6137928284612079565b90506137a08a838584613aa9565b9a9950505050505050505050565b60008060006137bc42613a8a565b509150915061321085838387613aa9565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611579565b600082820283158015906138255750828482816138215761382161478d565b0414155b1561384d57604051637472527d60e11b81526004810185905260248101849052604401610733565b801561386a57670de0b6b3a7640000600019820104600101611b29565b6000949350505050565b6000816000036138b0576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036138c057506000610d2a565b670de0b6b3a7640000838102908482816138dc576138dc61478d565b041461391e576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610733565b8260018203816139305761393061478d565b0460010191505092915050565b60606000613949613ad1565b90503681111561396757505060408051600081526020810190915290565b8067ffffffffffffffff81111561398057613980613dd9565b6040519080825280601f01601f1916602001820160405280156139aa576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146139e95781610d2a565b610d2a613aec565b600054610100900460ff16613a4a5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008080613a9c620151808504611fdd565b9196909550909350915050565b6000613210848484613aba89613b78565b613ac38a613b96565b613acc8b613bb2565b613bbf565b60006024361015613ae25750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b739190614670565b905090565b600080613b8862015180846147f3565b9050610e3f610e10826147a3565b600080613ba5610e10846147f3565b9050610e3f603c826147a3565b6000610d2a603c836147f3565b600081613bcd603c85614713565b613bd9610e1087614713565b62015180613be88b8b8b613c1b565b613bf29190614713565b613bfc91906147b7565b613c0691906147b7565b613c1091906147b7565b979650505050505050565b60006107b2841015613c2c57600080fd5b838383600062253d8c60046064600c613c46600e88614833565b613c509190614853565b613c5c88611324614881565b613c669190614881565b613c709190614853565b613c7b9060036148a9565b613c859190614853565b600c80613c93600e88614833565b613c9d9190614853565b613ca890600c6148a9565b613cb3600288614833565b613cbd9190614833565b613cc99061016f6148a9565b613cd39190614853565b6004600c613ce2600e89614833565b613cec9190614853565b613cf8896112c0614881565b613d029190614881565b613d0e906105b56148a9565b613d189190614853565b613d24617d4b87614833565b613d2e9190614881565b613d389190614881565b613d429190614833565b613d4c9190614833565b98975050505050505050565b803560ff81168114613d6957600080fd5b919050565b60008060008060808587031215613d8457600080fd5b613d8d85613d58565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146112f557600080fd5b600060208284031215613dce57600080fd5b8135610e3f81613da7565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e1257613e12613dd9565b60405290565b6040805190810167ffffffffffffffff81118282101715613e1257613e12613dd9565b6040516020810167ffffffffffffffff81118282101715613e1257613e12613dd9565b60405160c0810167ffffffffffffffff81118282101715613e1257613e12613dd9565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eaa57613eaa613dd9565b604052919050565b600060608284031215613ec457600080fd5b6040516060810181811067ffffffffffffffff82111715613ee757613ee7613dd9565b6040529050808235613ef881613da7565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215613f2957600080fd5b613f31613def565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215613f6d57600080fd5b613f75613def565b9050613f8082613d58565b815260208201356020820152604082013560408201526060820135606082015292915050565b803560028110613d6957600080fd5b600067ffffffffffffffff821115613fcf57613fcf613dd9565b5060051b60200190565b600082601f830112613fea57600080fd5b81356020613fff613ffa83613fb5565b613e81565b82815260059290921b8401810191818101908684111561401e57600080fd5b8286015b8481101561404257803561403581613da7565b8352918301918301614022565b509695505050505050565b60006040828403121561405f57600080fd5b614067613e18565b905061407282613fa6565b8152602082013567ffffffffffffffff81111561408e57600080fd5b61409a84828501613fd9565b60208301525092915050565b6000608082840312156140b857600080fd5b6140c0613e18565b905081356140cd81613da7565b81526140dc8360208401613eb2565b602082015292915050565b600060808083850312156140fa57600080fd5b614102613e18565b915061410e8484613eb2565b8252606083013567ffffffffffffffff81111561412a57600080fd5b8301601f8101851361413b57600080fd5b8035602061414b613ffa83613fb5565b82815260079290921b8301810191818101908884111561416a57600080fd5b938201935b838510156141905761418189866140a6565b8252938501939082019061416f565b808388015250505050505092915050565b6000602082840312156141b357600080fd5b813567ffffffffffffffff808211156141cb57600080fd5b90830190602082860312156141df57600080fd5b6141e7613e3b565b8235828111156141f657600080fd5b92909201916040838703121561420b57600080fd5b614213613e18565b833561421e81613da7565b815260208401358381111561423257600080fd5b93909301926101c0848803121561424857600080fd5b614250613e5e565b61425a8886613eb2565b81526142698860608701613f17565b602082015261427b8860e08701613f5b565b60408201526101608501358481111561429357600080fd5b61429f8982880161404d565b606083015250610180850135848111156142b857600080fd5b6142c4898288016140e7565b6080830152506101a0850135848111156142dd57600080fd5b6142e9898288016140e7565b60a0830152506020820152815295945050505050565b80151581146112f557600080fd5b6000806040838503121561432057600080fd5b823567ffffffffffffffff8082111561433857600080fd5b61434486838701613fd9565b935060209150818501358181111561435b57600080fd5b85019050601f8101861361436e57600080fd5b803561437c613ffa82613fb5565b81815260059190911b8201830190838101908883111561439b57600080fd5b928401925b828410156143c25783356143b3816142ff565b825292840192908401906143a0565b80955050505050509250929050565b600080600080608085870312156143e757600080fd5b84356143f281613da7565b9350602085013561440281613da7565b93969395505050506040820135916060013590565b60006020828403121561442957600080fd5b610e3f82613fa6565b6000806040838503121561444557600080fd5b823561445081613da7565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061449657634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156144af57600080fd5b50508035926020909101359150565b6000806000606084860312156144d357600080fd5b83356144de81613da7565b95602085013595506040909401359392505050565b6000806000806080858703121561450957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145635761456361453b565b5060010190565b60005b8381101561458557818101518382015260200161456d565b50506000910152565b600081518084526145a681602086016020860161456a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b29604083018461458e565b6000602082840312156145ee57600080fd5b815167ffffffffffffffff8082111561460657600080fd5b818401915084601f83011261461a57600080fd5b81518181111561462c5761462c613dd9565b61463f601f8201601f1916602001613e81565b915080825285602082850101111561465657600080fd5b61466781602084016020860161456a565b50949350505050565b60006020828403121561468257600080fd5b8151610e3f81613da7565b60006020828403121561469f57600080fd5b5051919050565b600081518084526020808501945080840160005b838110156146d6578151875295820195908201906001016146ba565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061321060608301846146a6565b8082028115828204841417610d2a57610d2a61453b565b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261476660808301846146a6565b9695505050505050565b60006020828403121561478257600080fd5b8151610e3f816142ff565b634e487b7160e01b600052601260045260246000fd5b6000826147b2576147b261478d565b500490565b80820180821115610d2a57610d2a61453b565b81810381811115610d2a57610d2a61453b565b634e487b7160e01b600052603160045260246000fd5b6000826148025761480261478d565b500690565b60006001600160a01b03808616835280851660208401525060606040830152613210606083018461458e565b81810360008312801583831316838312821617156123035761230361453b565b6000826148625761486261478d565b600160ff1b82146000198414161561487c5761487c61453b565b500590565b80820182811260008312801582168215821617156148a1576148a161453b565b505092915050565b80820260008212600160ff1b841416156148c5576148c561453b565b8181058314821517610d2a57610d2a61453b56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212204601b6ce729ef7a64ae10e5c298bbd0bf1cd78ac9769dec82aae91e2639d5c5964736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80635ea54eee1161010f578063a5900c4d116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063a5900c4d14610538578063b187bd2614610592578063c267621e146105af578063d09edf31146105c057600080fd5b80638456cb59116100de5780638456cb59146104d757806390333ba8146104df578063a0c3774f146104f2578063a33741771461050557600080fd5b80635ea54eee146104395780636aacaad8146104655780637125590a146104b157806383f3084f146104c457600080fd5b80633bd9ef28116101875780634a45a3a8116101565780634a45a3a8146103865780634fd49efd146103bb57806351a424b1146103e65780635670e2ce1461041e57600080fd5b80633bd9ef281461033e5780633f4ba83a14610351578063423a4b401461035957806342d4693e1461036c57600080fd5b806321972384116101c35780632197238414610261578063221a8c68146102745780632384c32d1461031857806330eae5721461032b57600080fd5b80630fe105e8146101f557806310188aef1461020a5780631047c5301461021d578063119a5e9614610230575b600080fd5b610208610203366004613d6e565b610625565b005b610208610218366004613dbc565b61065e565b61020861022b3660046141a1565b61068b565b6102386107b1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61020861026f36600461430d565b6107e8565b6102e6610282366004613dbc565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610258565b6102086103263660046143d1565b610898565b610208610339366004614417565b6108c7565b61020861034c366004614432565b610904565b610208610aea565b6102086103673660046143d1565b610b71565b600f546103799060ff1681565b6040516102589190614474565b6103ad7f9b3b19993bea1e8cccf265d6d4b7954e4253de1ed727bf20e870acc71538343e81565b604051908152602001610258565b6001546103ce906001600160a01b031681565b6040516001600160a01b039091168152602001610258565b6103f96103f4366004613dbc565b610ba0565b604080516001600160a01b039094168452602084019290925290820152606001610258565b60025460035460408051928352602083019190915201610258565b600654600754600854600954604080519485526020850193909352918301526060820152608001610258565b6102e66040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102086104bf36600461449c565b610bc9565b601c546103ce906001600160a01b031681565b610208610bf4565b6102086104ed3660046144be565b610c66565b6103ad610500366004613dbc565b610c99565b6103f9604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103f9610546366004613dbc565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461059f9060ff1681565b6040519015158152602001610258565b6001546001600160a01b03166103ce565b6000546103ce906201000090046001600160a01b031681565b6102086105e73660046144be565b610d30565b6102e66105fa366004613dbc565b610d5d565b61020861060d3660046144f3565b610dcc565b61059f610620366004613dbc565b610dfb565b6106348460ff16848484610e46565b61064b336000356001600160e01b03191683610ef1565b61065785858585610f38565b5050505050565b610667816111dd565b61067e336000356001600160e01b03191683610ef1565b610687826111f1565b5050565b600054610100900460ff16158080156106ab5750600054600160ff909116105b806106c55750303b1580156106c5575060005460ff166001145b61073c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561075f576000805461ff0019166101001790555b61076882611288565b8015610687576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600a5460009081908190819060ff1660028111156107d1576107d161445e565b600b54600c54600e54935093509350935090919293565b6107fe336000356001600160e01b0319166112f8565b8051825114610839576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108935761088183828151811061085a5761085a614525565b602002602001015183838151811061087457610874614525565b6020026020010151611314565b8061088b81614551565b91505061083c565b505050565b6108a4848484846113be565b6108bb336000356001600160e01b03191683610ef1565b61065785858585611427565b6108e48160018111156108dc576108dc61445e565b60ff166114e0565b6108fb336000356001600160e01b03191683610ef1565b61068782611527565b61090e8282611584565b610925336000356001600160e01b03191683610ef1565b816000036109395761093683610c99565b91505b61094383836115f3565b604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fef693bed00000000000000000000000000000000000000000000000000000000179052600154601c5493517f1cff79cd000000000000000000000000000000000000000000000000000000008152929360009391831692631cff79cd92610a04929091169086906004016145ba565b6000604051808303816000875af1158015610a23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4b91908101906145dc565b601c546040517f917342ef0000000000000000000000000000000000000000000000000000000081526001600160a01b038089166004830152929350610657928892889291169063917342ef90602401602060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190614670565b610ae585611637565b611644565b610b00336000356001600160e01b0319166112f8565b60045460ff16610b3c576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b7d848484846113be565b610b94336000356001600160e01b03191683610ef1565b61065785858585611658565b600080600080610baf85611718565b805160208201516040909201519097919650945092505050565b610bd382826117a3565b610bea336000356001600160e01b03191683610ef1565b61089383836117fd565b610c0a336000356001600160e01b0319166112f8565b60045460ff1615610c2e5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610c71838383611880565b610c88336000356001600160e01b03191683610ef1565b610c93848484611912565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061468d565b92915050565b610d3b838383611880565b610d52336000356001600160e01b03191683610ef1565b610c93848484611968565b600080600080600080610d6f876119c4565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610dd884848484610e46565b610def336000356001600160e01b03191683610ef1565b610657858585856119f8565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610e3157610e3161445e565b14610e3d578015610e3f565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610e7d57610e7d614525565b6020026020010181815250508381600181518110610e9d57610e9d614525565b6020026020010181815250508281600281518110610ebd57610ebd614525565b6020026020010181815250508181600381518110610edd57610edd614525565b602002602001018181525050949350505050565b610efc838383611a93565b610893578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610733939291906146e1565b60ff8416610fe9576000811180610f4f5750600082115b15610fe45782600003610f815760405163bea499cb60e01b815260ff8516600482015260248101849052604401610733565b801580610f8d57508281115b15610fb757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610733565b81600003610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b611146565b826000036110165760405163bea499cb60e01b815260ff8516600482015260248101849052604401610733565b80158061102e575061102b6224ea0084614713565b81115b1561105857604051639e12fccf60e01b815260ff8516600482015260248101829052604401610733565b8160000361108557604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b60001960ff8516016110c757601c61109c83611b31565b1115610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b60011960ff85160161110f576110dc82611b48565b6110e583611b31565b14610fe457604051635686bf5960e11b815260ff8516600482015260248101839052604401610733565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610733565b8360ff16600281111561115b5761115b61445e565b600a805460ff191660018360028111156111775761117761445e565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610d2a826001600160a01b03166114e0565b6001600160a01b038116611231576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b600054610100900460ff166112e15760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516112ec90611b6b565b6112f581611bda565b50565b6040805160008152602081019091526106879083908390610ef1565b6001600160a01b038216611354576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061136957611364601083611c33565b611374565b611374601083611c48565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516113b2911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106113fe576113fe614525565b602002602001018181525050836001600160a01b031681600181518110610e9d57610e9d614525565b6001600160a01b038416611467576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061148b90848484611c5d565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061151657611516614525565b602002602001018181525050919050565b600f805482919060ff1916600183818111156115455761154561445e565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516115799190614474565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106115c1576115c1614525565b60200260200101818152505081816001815181106115e1576115e1614525565b60200260200101818152505092915050565b6115fd8282611d3a565b80600003610687576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d2a826000611d84565b61164e8282611de1565b610c938484611e67565b6001600160a01b038416611698576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206116bc90848484611e71565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e1448848460405161170a929190918252602082015260400190565b60405180910390a350505050565b611745604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b03808316600090815260156020526040902080549091161561176e5780611771565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106117da576117da614525565b6020026020010181815250508160001c816001815181106115e1576115e1614525565b808214801561180b57508115155b15611845576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610733565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b0316816000815181106118bf576118bf614525565b60200260200101818152505082816001815181106118df576118df614525565b60200260200101818152505081816002815181106118ff576118ff614525565b6020026020010181815250509392505050565b61191f6016848484611e71565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6119756012848484611c5d565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156119ef5780610e3f565b60169392505050565b670de0b6b3a7640000811115611a3a576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016111cf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611ae890879030908890889060040161472a565b602060405180830381865afa158015611b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b299190614770565b949350505050565b6000611b29611b4362015180846147a3565b611fdd565b60008080611b5c611b4362015180866147a3565b5091509150611b298282612079565b600054610100900460ff16611bc45760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b611bd181602001516120ff565b6112f5816121ac565b600054610100900460ff166112f55760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6000610e3f836001600160a01b038416612210565b6000610e3f836001600160a01b03841661230a565b60006001600160a01b038416158015611c74575082155b8015611c7e575081155b905060006001600160a01b03851615801590611ca25750821580611ca25750838310155b905081158015611cb0575080155b15611d00576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610733565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b611d448282612359565b6001600160a01b038216610687576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d918260206147b7565b83511015611dd85782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610733918491600401918252602082015260400190565b50016020015190565b60035415610687576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505050505050565b610687828261239f565b60006001600160a01b038416158015611e88575082155b8015611e92575081155b905060006001600160a01b03851615801590611eae5750600084115b8015611eba5750600083115b905081158015611ec8575080155b15611f18576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610733565b60038601839055600186018490558115611f3f576000600287018190556004870155611fab565b8560040154600003611f665760006002870155611f5c83426147b7565b6004870155611fab565b85546001600160a01b03868116911614611fab578554600090611f92906001600160a01b0316876123c7565b6002880154909150611fa490826123d3565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161203a5761203a61478d565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061208a5750816003145b806120955750816005145b806120a05750816007145b806120ab5750816008145b806120b6575081600a145b806120c1575081600c145b156120ce5750601f610d2a565b816002146120de5750601e610d2a565b6120e783612430565b6120f257601c6120f5565b601d5b60ff169392505050565b600054610100900460ff166121585760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516121639061246c565b61216b61253c565b612178816020015161259f565b6121858160400151612601565b6121928160600151612663565b61219f81608001516126c5565b6112ec8160a00151612727565b600054610100900460ff166122055760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516112f5906111f1565b600081815260018301602052604081205480156122f95760006122346001836147ca565b8554909150600090612248906001906147ca565b90508181146122ad57600086600001828154811061226857612268614525565b906000526020600020015490508087600001848154811061228b5761228b614525565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806122be576122be6147dd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d2a565b6000915050610d2a565b5092915050565b600081815260018301602052604081205461235157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d2a565b506000610d2a565b6123638282612789565b61236d8282612793565b61237782826127b7565b61238182826128a3565b61238b8282612a92565b6123958282612adc565b6106878282612bc9565b6123a98282612cdf565b6123b38282612d81565b6123bd8282612da3565b6106878282612fed565b6000610e3f838361301a565b600082820283158015906123f65750828482816123f2576123f261478d565b0414155b1561241e57604051637472527d60e11b81526004810185905260248101849052604401610733565b670de0b6b3a764000090049392505050565b600061243d6004836147f3565b15801561245357506124506064836147f3565b15155b80610d2a5750612465610190836147f3565b1592915050565b600054610100900460ff166124c55760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b61253381600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa15801561250a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252e9190614670565b613219565b6112f58161327b565b600054610100900460ff166125955760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b61259d613316565b565b600054610100900460ff166125f85760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f58161336f565b600054610100900460ff1661265a5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816133e4565b600054610100900460ff166126bc5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581613459565b600054610100900460ff1661271e5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581613507565b600054610100900460ff166127805760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816135e5565b61068782826136c3565b60045460ff16156106875760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806127f6575081513a11155b90508061283b5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610733565b602082015115610c93576000612851483a6147ca565b602084015190915081111580611e5f5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610733918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156128df5760405163013ce60b60e01b815242600482015260248101839052604401610733565b60008460028111156128f3576128f361445e565b036129ac578260000361290857505050505050565b806000036129225761291a83426147b7565b600d55611e5f565b600061292e83426147ca565b9050600061293c85836147a3565b9050600061294a8683614713565b61295490846147ca565b9050838111156129805760405163013ce60b60e01b815242600482015260248101869052604401610733565b8561298c8360016147b7565b6129969190614713565b6129a090866147b7565b600d5550611e5f915050565b8142101580156129c557506129c181836147b7565b4211155b156129d45761291a8284613716565b600060018560028111156129ea576129ea61445e565b146129fd576129f842611b48565b612a06565b612a0683611b31565b90506000612a1484836137ae565b905080421015612a405760405163013ce60b60e01b815242600482015260248101829052604401610733565b6000612a4c84836147b7565b90504281108015612a795760405163013ce60b60e01b815242600482015260248101839052604401610733565b612a838388613716565b600d5550505050505050505050565b612a9b82610dfb565b610687576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610733565b6000612ae783611718565b80519091506001600160a01b0316612afe57505050565b6000836001600160a01b031682600001516001600160a01b031614612b3a57612b35612b2e8584600001516123c7565b84906123d3565b612b3c565b825b9050600082602001518210158015612b64575060408301511580612b64575082604001518211155b905080610657578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610733565b6000612bd4836119c4565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612c2357505050565b6000836001600160a01b031682600001516001600160a01b031614612c5857612c53612b2e8584600001516123c7565b612c5a565b825b9050600082608001514210612c70576000612c76565b82604001515b612c8090836147b7565b9050826020015181111561065757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610733565b6000612cea836119c4565b80549091506001600160a01b0316612d0157505050565b80546000906001600160a01b03858116911614612d37578154612d3290612b2e9086906001600160a01b03166123c7565b612d39565b825b905081600401544210612d6257600060028301556003820154612d5c90426147b7565b60048301555b80826002016000828254612d7691906147b7565b909155505050505050565b600d54600003612d8f575050565b612d9a600d546137cd565b50506000600d55565b600554600003612ddf576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612e1891906147ca565b90506000612e263a83614713565b90506000836040015160001480612e41575083604001518211155b905080612e8b578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610733929190918252602082015260400190565b6000600555606084015115801590612ea35750600085115b15611e5f576000612f76306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0f9190614670565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f709190614670565b886123c7565b90506000612f848483613802565b90506000612f928289613874565b90508660600151811115612fe25760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610733918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130949190614670565b90506001600160a01b0381166130e5576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610733565b60006130ef61393d565b9050805160001461318057816001600160a01b031663355efdd9613112876139bd565b61311b876139bd565b846040518463ffffffff1660e01b815260040161313a93929190614807565b602060405180830381865afa158015613157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317b919061468d565b613210565b816001600160a01b031663ac41865a613198876139bd565b6131a1876139bd565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613210919061468d565b95945050505050565b600054610100900460ff166132725760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f5816139f1565b600054610100900460ff166132d45760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055602081015160408201516112f591906117fd565b600054610100900460ff1661259d5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b600054610100900460ff166133c85760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f581600001518260200151836040015184606001516119f8565b600054610100900460ff1661343d5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b6112f58160000151826020015183604001518460600151610f38565b600054610100900460ff166134b25760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b80516134bd90611527565b60005b816020015151811015610687576134f5826020015182815181106134e6576134e6614525565b60200260200101516001611314565b806134ff81614551565b9150506134c0565b600054610100900460ff166135605760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b8051805160208201516040830151613579929190611968565b60005b826020015151811015610893576000836020015182815181106135a1576135a1614525565b602002602001015190506000816020015190506135d08260000151826000015183602001518460400151611427565b505080806135dd90614551565b91505061357c565b600054610100900460ff1661363e5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b8051805160208201516040830151613657929190611912565b60005b8260200151518110156108935760008360200151828151811061367f5761367f614525565b602002602001015190506000816020015190506136ae8260000151826000015183602001518460400151611658565b505080806136bb90614551565b91505061365a565b600254156106875760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401611e31565b60008060008061372586613a8a565b91945092509050600061373886846147b7565b90506000613747600c836147f3565b90506000613756600c846147a3565b61376090876147b7565b905060006002600a5460ff16600281111561377d5761377d61445e565b146137885784613792565b6137928284612079565b90506137a08a838584613aa9565b9a9950505050505050505050565b60008060006137bc42613a8a565b509150915061321085838387613aa9565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611579565b600082820283158015906138255750828482816138215761382161478d565b0414155b1561384d57604051637472527d60e11b81526004810185905260248101849052604401610733565b801561386a57670de0b6b3a7640000600019820104600101611b29565b6000949350505050565b6000816000036138b0576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036138c057506000610d2a565b670de0b6b3a7640000838102908482816138dc576138dc61478d565b041461391e576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610733565b8260018203816139305761393061478d565b0460010191505092915050565b60606000613949613ad1565b90503681111561396757505060408051600081526020810190915290565b8067ffffffffffffffff81111561398057613980613dd9565b6040519080825280601f01601f1916602001820160405280156139aa576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146139e95781610d2a565b610d2a613aec565b600054610100900460ff16613a4a5760405162461bcd60e51b815260206004820152602b60248201526000805160206148da83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610733565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008080613a9c620151808504611fdd565b9196909550909350915050565b6000613210848484613aba89613b78565b613ac38a613b96565b613acc8b613bb2565b613bbf565b60006024361015613ae25750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b739190614670565b905090565b600080613b8862015180846147f3565b9050610e3f610e10826147a3565b600080613ba5610e10846147f3565b9050610e3f603c826147a3565b6000610d2a603c836147f3565b600081613bcd603c85614713565b613bd9610e1087614713565b62015180613be88b8b8b613c1b565b613bf29190614713565b613bfc91906147b7565b613c0691906147b7565b613c1091906147b7565b979650505050505050565b60006107b2841015613c2c57600080fd5b838383600062253d8c60046064600c613c46600e88614833565b613c509190614853565b613c5c88611324614881565b613c669190614881565b613c709190614853565b613c7b9060036148a9565b613c859190614853565b600c80613c93600e88614833565b613c9d9190614853565b613ca890600c6148a9565b613cb3600288614833565b613cbd9190614833565b613cc99061016f6148a9565b613cd39190614853565b6004600c613ce2600e89614833565b613cec9190614853565b613cf8896112c0614881565b613d029190614881565b613d0e906105b56148a9565b613d189190614853565b613d24617d4b87614833565b613d2e9190614881565b613d389190614881565b613d429190614833565b613d4c9190614833565b98975050505050505050565b803560ff81168114613d6957600080fd5b919050565b60008060008060808587031215613d8457600080fd5b613d8d85613d58565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146112f557600080fd5b600060208284031215613dce57600080fd5b8135610e3f81613da7565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e1257613e12613dd9565b60405290565b6040805190810167ffffffffffffffff81118282101715613e1257613e12613dd9565b6040516020810167ffffffffffffffff81118282101715613e1257613e12613dd9565b60405160c0810167ffffffffffffffff81118282101715613e1257613e12613dd9565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eaa57613eaa613dd9565b604052919050565b600060608284031215613ec457600080fd5b6040516060810181811067ffffffffffffffff82111715613ee757613ee7613dd9565b6040529050808235613ef881613da7565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215613f2957600080fd5b613f31613def565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215613f6d57600080fd5b613f75613def565b9050613f8082613d58565b815260208201356020820152604082013560408201526060820135606082015292915050565b803560028110613d6957600080fd5b600067ffffffffffffffff821115613fcf57613fcf613dd9565b5060051b60200190565b600082601f830112613fea57600080fd5b81356020613fff613ffa83613fb5565b613e81565b82815260059290921b8401810191818101908684111561401e57600080fd5b8286015b8481101561404257803561403581613da7565b8352918301918301614022565b509695505050505050565b60006040828403121561405f57600080fd5b614067613e18565b905061407282613fa6565b8152602082013567ffffffffffffffff81111561408e57600080fd5b61409a84828501613fd9565b60208301525092915050565b6000608082840312156140b857600080fd5b6140c0613e18565b905081356140cd81613da7565b81526140dc8360208401613eb2565b602082015292915050565b600060808083850312156140fa57600080fd5b614102613e18565b915061410e8484613eb2565b8252606083013567ffffffffffffffff81111561412a57600080fd5b8301601f8101851361413b57600080fd5b8035602061414b613ffa83613fb5565b82815260079290921b8301810191818101908884111561416a57600080fd5b938201935b838510156141905761418189866140a6565b8252938501939082019061416f565b808388015250505050505092915050565b6000602082840312156141b357600080fd5b813567ffffffffffffffff808211156141cb57600080fd5b90830190602082860312156141df57600080fd5b6141e7613e3b565b8235828111156141f657600080fd5b92909201916040838703121561420b57600080fd5b614213613e18565b833561421e81613da7565b815260208401358381111561423257600080fd5b93909301926101c0848803121561424857600080fd5b614250613e5e565b61425a8886613eb2565b81526142698860608701613f17565b602082015261427b8860e08701613f5b565b60408201526101608501358481111561429357600080fd5b61429f8982880161404d565b606083015250610180850135848111156142b857600080fd5b6142c4898288016140e7565b6080830152506101a0850135848111156142dd57600080fd5b6142e9898288016140e7565b60a0830152506020820152815295945050505050565b80151581146112f557600080fd5b6000806040838503121561432057600080fd5b823567ffffffffffffffff8082111561433857600080fd5b61434486838701613fd9565b935060209150818501358181111561435b57600080fd5b85019050601f8101861361436e57600080fd5b803561437c613ffa82613fb5565b81815260059190911b8201830190838101908883111561439b57600080fd5b928401925b828410156143c25783356143b3816142ff565b825292840192908401906143a0565b80955050505050509250929050565b600080600080608085870312156143e757600080fd5b84356143f281613da7565b9350602085013561440281613da7565b93969395505050506040820135916060013590565b60006020828403121561442957600080fd5b610e3f82613fa6565b6000806040838503121561444557600080fd5b823561445081613da7565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061449657634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156144af57600080fd5b50508035926020909101359150565b6000806000606084860312156144d357600080fd5b83356144de81613da7565b95602085013595506040909401359392505050565b6000806000806080858703121561450957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145635761456361453b565b5060010190565b60005b8381101561458557818101518382015260200161456d565b50506000910152565b600081518084526145a681602086016020860161456a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611b29604083018461458e565b6000602082840312156145ee57600080fd5b815167ffffffffffffffff8082111561460657600080fd5b818401915084601f83011261461a57600080fd5b81518181111561462c5761462c613dd9565b61463f601f8201601f1916602001613e81565b915080825285602082850101111561465657600080fd5b61466781602084016020860161456a565b50949350505050565b60006020828403121561468257600080fd5b8151610e3f81613da7565b60006020828403121561469f57600080fd5b5051919050565b600081518084526020808501945080840160005b838110156146d6578151875295820195908201906001016146ba565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061321060608301846146a6565b8082028115828204841417610d2a57610d2a61453b565b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261476660808301846146a6565b9695505050505050565b60006020828403121561478257600080fd5b8151610e3f816142ff565b634e487b7160e01b600052601260045260246000fd5b6000826147b2576147b261478d565b500490565b80820180821115610d2a57610d2a61453b565b81810381811115610d2a57610d2a61453b565b634e487b7160e01b600052603160045260246000fd5b6000826148025761480261478d565b500690565b60006001600160a01b03808616835280851660208401525060606040830152613210606083018461458e565b81810360008312801583831316838312821617156123035761230361453b565b6000826148625761486261478d565b600160ff1b82146000198414161561487c5761487c61453b565b500590565b80820182811260008312801582168215821617156148a1576148a161453b565b505092915050565b80820260008212600160ff1b841416156148c5576148c561453b565b8181058314821517610d2a57610d2a61453b56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212204601b6ce729ef7a64ae10e5c298bbd0bf1cd78ac9769dec82aae91e2639d5c5964736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
