{
  "_format": "hh-sol-artifact-1",
  "contractName": "X2EarnAppsV7",
  "sourceName": "contracts/deprecated/V7/X2EarnAppsV7.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "CreatorNFTAlreadyUsed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        },
        {
          "internalType": "uint48",
          "name": "clock",
          "type": "uint48"
        }
      ],
      "name": "ERC5805FutureLookup",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC6372InconsistentClock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "NodeManagementXAppAlreadyIncluded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NodeNotAllowedToEndorse",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "X2EarnAlreadyCreator",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnAlreadyEndorser",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnAppAlreadyEndorsed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnAppAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnAppBlacklisted",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "X2EarnInvalidAddress",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "X2EarnInvalidAllocationPercentage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnInvalidStartIndex",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnInvalidStartIndex",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnMaxCreatorsReached",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnMaxManagersReached",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnMaxModeratorsReached",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnMaxRewardDistributorsReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnNodeCooldownActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnNonEndorser",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "X2EarnNonNodeHolder",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "X2EarnNonexistentApp",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "X2EarnNonexistentCreator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "moderator",
          "type": "address"
        }
      ],
      "name": "X2EarnNonexistentModerator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "distributorAddress",
          "type": "address"
        }
      ],
      "name": "X2EarnNonexistentRewardDistributor",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "X2EarnUnauthorizedUser",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "X2EarnUnverifiedCreator",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "appAvailableForAllocationVoting",
          "type": "bool"
        }
      ],
      "name": "AppAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AppAdminUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "endorsed",
          "type": "bool"
        }
      ],
      "name": "AppEndorsed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "endorsed",
          "type": "bool"
        }
      ],
      "name": "AppEndorsementStatusUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "oldMetadataURI",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "newMetadataURI",
          "type": "string"
        }
      ],
      "name": "AppMetadataURIUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "startBlock",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "endBlock",
          "type": "uint48"
        }
      ],
      "name": "AppUnendorsedGracePeriodStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "oldBaseURI",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "newBaseURI",
          "type": "string"
        }
      ],
      "name": "BaseURIUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isBlacklisted",
          "type": "bool"
        }
      ],
      "name": "BlacklistUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldCooldownPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCooldownPeriod",
          "type": "uint256"
        }
      ],
      "name": "CooldownPeriodUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creatorAddress",
          "type": "address"
        }
      ],
      "name": "CreatorAddedToApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "CreatorRemovedFromApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldThreshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newThreshold",
          "type": "uint256"
        }
      ],
      "name": "EndorsementScoreThresholdUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldGracePeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newGracePeriod",
          "type": "uint256"
        }
      ],
      "name": "GracePeriodUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "moderator",
          "type": "address"
        }
      ],
      "name": "ModeratorAddedToApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "moderator",
          "type": "address"
        }
      ],
      "name": "ModeratorRemovedFromApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "strength",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "thunder",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "mjolnir",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "veThorX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "strengthX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "thunderX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "mjolnirX",
              "type": "uint256"
            }
          ],
          "indexed": true,
          "internalType": "struct EndorsementUtilsV7.NodeStrengthScores",
          "name": "nodeStrengthScores",
          "type": "tuple"
        }
      ],
      "name": "NodeStrengthScoresUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "distributorAddress",
          "type": "address"
        }
      ],
      "name": "RewardDistributorAddedToApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "distributorAddress",
          "type": "address"
        }
      ],
      "name": "RewardDistributorRemovedFromApp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldPercentage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newPercentage",
          "type": "uint256"
        }
      ],
      "name": "TeamAllocationPercentageUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldTeamWalletAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newTeamWalletAddress",
          "type": "address"
        }
      ],
      "name": "TeamWalletAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isAvailable",
          "type": "bool"
        }
      ],
      "name": "VotingEligibilityUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GOVERNANCE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_CREATORS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_MODERATORS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_REWARD_DISTRIBUTORS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_moderator",
          "type": "address"
        }
      ],
      "name": "addAppModerator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_creator",
          "type": "address"
        }
      ],
      "name": "addCreator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_distributor",
          "type": "address"
        }
      ],
      "name": "addRewardDistributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allEligibleApps",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "app",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "teamWalletAddress",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "metadataURI",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "createdAtTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "appAvailableForAllocationVoting",
              "type": "bool"
            }
          ],
          "internalType": "struct X2EarnAppsDataTypes.AppWithDetailsReturnType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "appAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "appCreators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "appExists",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "appModerators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "appURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "apps",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "teamWalletAddress",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "metadataURI",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "createdAtTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "appAvailableForAllocationVoting",
              "type": "bool"
            }
          ],
          "internalType": "struct X2EarnAppsDataTypes.AppWithDetailsReturnType[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "appsCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        }
      ],
      "name": "checkCooldown",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "checkEndorsement",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cooldownPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "creatorApps",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        }
      ],
      "name": "enableRewardsPoolForNewApp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        }
      ],
      "name": "endorseApp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endorsementScoreThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "getEndorsers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        }
      ],
      "name": "getNodeEndorsementScore",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "name": "getPaginatedApps",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "createdAtTimestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct X2EarnAppsDataTypes.App[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "getScore",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStargateNFT",
      "outputs": [
        {
          "internalType": "contract IStargateNFT",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUsersEndorsementScore",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVeBetterPassportContract",
      "outputs": [
        {
          "internalType": "contract IVeBetterPassport",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getXAllocationVotingGovernor",
      "outputs": [
        {
          "internalType": "contract IXAllocationVotingGovernor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gracePeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "appName",
          "type": "string"
        }
      ],
      "name": "hashAppName",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stargateNft",
          "type": "address"
        }
      ],
      "name": "initializeV7",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAppAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAppCreator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAppModerator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "isAppUnendorsed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "isCreatorOfAnyApp",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "isEligible",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "isEligibleNow",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isRewardDistributor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "metadataURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "nodeLevel",
          "type": "uint8"
        }
      ],
      "name": "nodeLevelEndorsementScore",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        }
      ],
      "name": "nodeToEndorsedApp",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_creator",
          "type": "address"
        }
      ],
      "name": "removeAppCreator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_moderator",
          "type": "address"
        }
      ],
      "name": "removeAppModerator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_nodeId",
          "type": "uint256"
        }
      ],
      "name": "removeNodeEndorsement",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_distributor",
          "type": "address"
        }
      ],
      "name": "removeRewardDistributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        }
      ],
      "name": "removeXAppSubmission",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "rewardDistributors",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_newAdmin",
          "type": "address"
        }
      ],
      "name": "setAppAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_baseURI",
          "type": "string"
        }
      ],
      "name": "setBaseURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stargateNft",
          "type": "address"
        }
      ],
      "name": "setStargateNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_percentage",
          "type": "uint256"
        }
      ],
      "name": "setTeamAllocationPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_veBetterPassportContract",
          "type": "address"
        }
      ],
      "name": "setVeBetterPassportContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "_isEligible",
          "type": "bool"
        }
      ],
      "name": "setVotingEligibility",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_x2EarnCreatorContract",
          "type": "address"
        }
      ],
      "name": "setX2EarnCreatorContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_x2EarnRewardsPoolContract",
          "type": "address"
        }
      ],
      "name": "setX2EarnRewardsPoolContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAllocationVotingGovernor",
          "type": "address"
        }
      ],
      "name": "setXAllocationVotingGovernor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_teamWalletAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_appName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_appMetadataURI",
          "type": "string"
        }
      ],
      "name": "submitApp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "teamAllocationPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "teamWalletAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "appId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "nodeId",
          "type": "uint256"
        }
      ],
      "name": "unendorseApp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unendorsedAppIds",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unendorsedApps",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "teamWalletAddress",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "metadataURI",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "createdAtTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "appAvailableForAllocationVoting",
              "type": "bool"
            }
          ],
          "internalType": "struct X2EarnAppsDataTypes.AppWithDetailsReturnType[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "_newMetadataURI",
          "type": "string"
        }
      ],
      "name": "updateAppMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newCooldownPeriod",
          "type": "uint256"
        }
      ],
      "name": "updateCooldownPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_scoreThreshold",
          "type": "uint256"
        }
      ],
      "name": "updateEndorsementScoreThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "_newGracePeriod",
          "type": "uint48"
        }
      ],
      "name": "updateGracePeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "strength",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "thunder",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "mjolnir",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "veThorX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "strengthX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "thunderX",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "mjolnirX",
              "type": "uint256"
            }
          ],
          "internalType": "struct EndorsementUtilsV7.NodeStrengthScores",
          "name": "_nodeStrengthScores",
          "type": "tuple"
        }
      ],
      "name": "updateNodeEndorsementScores",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_appId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_newReceiverAddress",
          "type": "address"
        }
      ],
      "name": "updateTeamWalletAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "x2EarnCreatorContract",
      "outputs": [
        {
          "internalType": "contract IX2EarnCreator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "x2EarnRewardsPoolContract",
      "outputs": [
        {
          "internalType": "contract IX2EarnRewardsPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161530a620001046000396000818161352a0152818161355301526136ee015261530a6000f3fe6080604052600436106103f15760003560e01c806301ffc9a7146103f657806303bc087f1461042b57806304646a491461044d5780630765ef60146104705780630ab12e14146104925780630ad0e45f146104b25780630b6ae130146104d25780630bf4f68e146104f25780630cb212e1146105125780630e1fb61a146105325780630f5d4c5e14610552578063169efd47146105725780631772503b146105925780631a25071f146105bf578063228cf42f146105df578063248a9ca3146105f45780632589a49d146106145780632b5f3879146106345780632c35f428146106495780632e87d31f146106695780632f2ff15d1461069657806334b0e6b3146106b657806336568abe146106d65780634047d7ff146106f6578063416c0f741461071657806342c89f521461074357806344bb58f7146107635780634bf5d7e9146107835780634f1ef286146107985780634f77fe12146107ab57806352d1902d146107cb57806354933bf0146107e057806354fd4d501461080057806355f804b31461082a578063594ae8481461084a5780635da2c0d01461086a578063607bfb241461087f5780636165267c1461089f57806361b215a1146108bf5780636520f41a146108df5780636912f1f6146108f457806369ad5156146109145780636a0ae325146105df5780636b623bbe146109345780636c0360eb146109545780636f604ab314610969578063785d6e1814610989578063790cb966146109b65780637ba53285146109d6578063826b9a4e146109f6578063833d29b414610a165780638380216514610a36578063861f6bfd14610a565780638e3a29dc14610a765780638e4284f514610a965780638ed087ee14610aab57806391d1485414610acb57806391ddadf414610aeb5780639478401714610b17578063993f8d3614610b375780639fa949ad14610b575780639fb0270214610b77578063a06bb12914610b97578063a06db7dc14610bb7578063a099a19214610bcc578063a217fddf14610bec578063acdb9f0514610c01578063ad3cb1cc14610c21578063b2072eec14610c52578063b58a754714610c67578063b747e2e914610c87578063bcbd410c14610ca7578063c04cff1914610cc7578063c7b24f3014610ce9578063c996c62414610d09578063d2570b9414610d29578063d455e0c514610d49578063d493091714610d69578063d547741f14610d7e578063d5e66e1214610d9e578063d6418b8a14610dcb578063d676535d14610de0578063e03252ae14610e00578063e123cd0c14610e20578063e34cfd3914610e40578063e9a1fee414610e55578063f1a962ac14610e75578063f36c8f5c14610e8a578063f72c0d8b14610eac578063f770337914610ece575b600080fd5b34801561040257600080fd5b506104166104113660046147ab565b610ee3565b60405190151581526020015b60405180910390f35b34801561043757600080fd5b50610440610f1a565b6040516104229190614892565b34801561045957600080fd5b50610462610f37565b604051908152602001610422565b34801561047c57600080fd5b5061049061048b366004614902565b610f4c565b005b34801561049e57600080fd5b506104906104ad366004614932565b610ff9565b3480156104be57600080fd5b506104166104cd366004614960565b611043565b3480156104de57600080fd5b506104166104ed366004614960565b6110d8565b3480156104fe57600080fd5b5061049061050d366004614985565b611124565b34801561051e57600080fd5b5061049061052d366004614960565b611149565b34801561053e57600080fd5b5061049061054d3660046149ad565b61119a565b34801561055e57600080fd5b5061049061056d3660046149c5565b6111bb565b34801561057e57600080fd5b5061049061058d366004614a9f565b6111cf565b34801561059e57600080fd5b506105b26105ad366004614932565b6111db565b6040516104229190614b27565b3480156105cb57600080fd5b506104906105da366004614932565b611204565b3480156105eb57600080fd5b50610462606481565b34801561060057600080fd5b5061046261060f366004614932565b611218565b34801561062057600080fd5b5061049061062f366004614960565b611238565b34801561064057600080fd5b50610462611283565b34801561065557600080fd5b506105b2610664366004614932565b611298565b34801561067557600080fd5b50610689610684366004614932565b6112be565b6040516104229190614b3b565b3480156106a257600080fd5b506104906106b1366004614960565b611321565b3480156106c257600080fd5b506104626106d1366004614b4e565b61133d565b3480156106e257600080fd5b506104906106f1366004614960565b61136d565b34801561070257600080fd5b506104906107113660046149c5565b6113a0565b34801561072257600080fd5b50610736610731366004614932565b6113b4565b6040516104229190614b82565b34801561074f57600080fd5b5061046261075e366004614932565b611431565b34801561076f57600080fd5b5061073661077e366004614932565b6114cd565b34801561078f57600080fd5b50610689611579565b6104906107a6366004614bcf565b6115f1565b3480156107b757600080fd5b506104906107c6366004614932565b61160c565b3480156107d757600080fd5b5061046261162d565b3480156107ec57600080fd5b506104906107fb366004614c32565b61164a565b34801561080c57600080fd5b506040805180820190915260018152603760f81b6020820152610689565b34801561083657600080fd5b50610490610845366004614b4e565b611695565b34801561085657600080fd5b50610490610865366004614c32565b6116a9565b34801561087657600080fd5b506105b26117ee565b34801561088b57600080fd5b5061041661089a366004614932565b61180c565b3480156108ab57600080fd5b506104906108ba366004614960565b61182e565b3480156108cb57600080fd5b506104626108da366004614932565b611879565b3480156108eb57600080fd5b506105b2611897565b34801561090057600080fd5b5061046261090f3660046149c5565b6118b3565b34801561092057600080fd5b5061073661092f366004614932565b6118e0565b34801561094057600080fd5b5061041661094f366004614932565b61195b565b34801561096057600080fd5b5061068961197e565b34801561097557600080fd5b50610689610984366004614932565b611a1f565b34801561099557600080fd5b506109a96109a4366004614932565b611ac6565b6040516104229190614c54565b3480156109c257600080fd5b506104166109d1366004614932565b611b41565b3480156109e257600080fd5b506104626109f1366004614932565b611be2565b348015610a0257600080fd5b50610462610a11366004614932565b611c02565b348015610a2257600080fd5b50610490610a31366004614960565b611c22565b348015610a4257600080fd5b50610490610a51366004614960565b611c6d565b348015610a6257600080fd5b50610490610a71366004614932565b611cb8565b348015610a8257600080fd5b50610416610a91366004614960565b611cd9565b348015610aa257600080fd5b50610462600381565b348015610ab757600080fd5b50610490610ac6366004614c32565b611d05565b348015610ad757600080fd5b50610416610ae6366004614960565b61204d565b348015610af757600080fd5b50610b00612083565b60405165ffffffffffff9091168152602001610422565b348015610b2357600080fd5b50610416610b32366004614932565b612092565b348015610b4357600080fd5b50610490610b52366004614960565b6120e3565b348015610b6357600080fd5b50610490610b72366004614960565b61212e565b348015610b8357600080fd5b50610490610b923660046149c5565b612179565b348015610ba357600080fd5b50610490610bb2366004614960565b6122c9565b348015610bc357600080fd5b50610462612314565b348015610bd857600080fd5b50610416610be7366004614932565b612331565b348015610bf857600080fd5b50610462600081565b348015610c0d57600080fd5b50610462610c1c366004614c76565b6123ab565b348015610c2d57600080fd5b50610689604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610c5e57600080fd5b506105b26123d1565b348015610c7357600080fd5b50610416610c82366004614960565b6123ef565b348015610c9357600080fd5b50610736610ca2366004614932565b61243b565b348015610cb357600080fd5b50610416610cc23660046149c5565b6124b6565b348015610cd357600080fd5b50610cdc6124e5565b6040516104229190614c93565b348015610cf557600080fd5b50610416610d04366004614932565b612545565b348015610d1557600080fd5b50610462610d243660046149c5565b61257f565b348015610d3557600080fd5b50610416610d44366004614c32565b612620565b348015610d5557600080fd5b50610490610d643660046149c5565b6126a6565b348015610d7557600080fd5b506105b26126ba565b348015610d8a57600080fd5b50610490610d99366004614960565b6126d6565b348015610daa57600080fd5b50610dbe610db9366004614c32565b6126f2565b6040516104229190614ccb565b348015610dd757600080fd5b50610cdc612761565b348015610dec57600080fd5b50610490610dfb3660046149c5565b61276d565b348015610e0c57600080fd5b50610490610e1b3660046149c5565b612781565b348015610e2c57600080fd5b50610490610e3b366004614c32565b612795565b348015610e4c57600080fd5b506105b26127e0565b348015610e6157600080fd5b50610490610e70366004614d4c565b6127fc565b348015610e8157600080fd5b5061046261285a565b348015610e9657600080fd5b5061046260008051602061525583398151915281565b348015610eb857600080fd5b5061046260008051602061527583398151915281565b348015610eda57600080fd5b50610440612864565b60006001600160e01b03198216637965db0b60e01b1480610f1457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000610f26612761565b9050610f31816128c9565b91505090565b600080610f42612ac0565b600d015492915050565b600080516020615255833981519152610f6481612ae4565b610f6d83612af1565b610f925760405163018f58af60e31b8152600481018490526024015b60405180910390fd5b610f9b8361180c565b15610faa57610faa8383612b10565b610fb383612545565b8015610fbd575081155b15610fcd57610fcd836001612bda565b81610fe057610fdb83612c27565b610fe9565b610fe983612cc4565b610ff4838315612d2e565b505050565b600081611006823361204d565b15801561101a57506110188133611cd9565b155b1561103a57336040516363a704cf60e11b8152600401610f899190614b27565b610ff483612d9a565b60008061104e612df8565b60405163109fb2eb60e31b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__906384fd97589061108f90600185019088908890600401614d88565b602060405180830381865af41580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614da7565b949350505050565b6000806110e3612df8565b60405163be4d2cb960e01b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__9063be4d2cb99061108f90600685019088908890600401614d88565b60008051602061525583398151915261113c81612ae4565b61114582612e1c565b5050565b600082611156823361204d565b15801561116a57506111688133611cd9565b155b1561118a57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484612e92565b50505050565b6000805160206152558339815191526111b281612ae4565b61114582612f11565b60006111c681612ae4565b61114582612f9c565b61119484848484613037565b6000806111e6612df8565b6000938452600301602052505060409020546001600160a01b031690565b600061120f81612ae4565b61114582613252565b6000806112236132a7565b60009384526020525050604090206001015490565b600082611245823361204d565b15801561125957506112578133611cd9565b155b1561127957336040516363a704cf60e11b8152600401610f899190614b27565b61119484846132cb565b60008061128e613341565b6001015492915050565b6000806112a3612df8565b6000938452602052505060409020546001600160a01b031690565b60606112c982612af1565b6112e95760405163018f58af60e31b815260048101839052602401610f89565b6112f161197e565b6112fa83611a1f565b60405160200161130b929190614dc4565b6040516020818303038152906040529050919050565b61132a82611218565b61133381612ae4565b6111948383613365565b6000816040516020016113509190614df3565b604051602081830303815290604052805190602001209050919050565b6001600160a01b03811633146113965760405163334bd91960e11b815260040160405180910390fd5b610ff48282613406565b60006113ab81612ae4565b6111458261347e565b606060006113c0612df8565b6000848152600282016020908152604091829020805483518184028101840190945280845293945091929083018282801561142457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611406575b5050505050915050919050565b60008061143c612ac0565b600f810154604051633404591760e21b8152600481018690529192506000916001600160a01b039091169063d011645c90602401602060405180830381865afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190614e0f565b60ff166000908152600390920160205250604090205492915050565b606060006114d9612ac0565b600f810154604051632fc6f2d160e01b81526002830160048201526001600160a01b0390911660248201526044810185905290915073__$3595fb81bb2992837332c28d269a7eece2$__90632fc6f2d190606401600060405180830381865af415801561154a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115729190810190614e2c565b9392505050565b6060611583613514565b65ffffffffffff16611593612083565b65ffffffffffff16146115b9576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6115f961351f565b611602826135c6565b61114582826135de565b60008051602061525583398151915261162481612ae4565b61114582613692565b60006116376136e3565b5060008051602061529583398151915290565b600082611657823361204d565b15801561166b57506116698133611cd9565b155b1561168b57336040516363a704cf60e11b8152600401610f899190614b27565b611194848461372c565b60006116a081612ae4565b61114582613780565b60006116b3612ac0565b600f81015460405162491fcf60e11b8152600481018590529192506001600160a01b03169062923f9e90602401602060405180830381865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117219190614da7565b158061179f5750600f810154604051631975e30960e11b81526001600160a01b03909116906332ebc6129061175c9033908690600401614edd565b602060405180830381865afa158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d9190614da7565b155b156117bd576040516326a2091b60e21b815260040160405180910390fd5b6117c682611b41565b156117e45760405163f404220560e01b815260040160405180910390fd5b610ff483836137d3565b6000806117f9612df8565b600901546001600160a01b031692915050565b600080611817613341565b600093845260205250506040902060020154151590565b60008261183b823361204d565b15801561184f575061184d8133611cd9565b155b1561186f57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613898565b6000611883612ac0565b600092835260050160205250604090205490565b60006118a1612ac0565b600b01546001600160a01b0316919050565b6000806118be612df8565b6001600160a01b03909316600090815260079093016020525050604090205490565b606060006118ec612df8565b60008481526001820160209081526040918290208054835181840281018401909452808452939450919290830182828015611424576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611406575050505050915050919050565b6000806119666138cd565b60009384526003016020525050604090205460ff1690565b6060600061198a6138f1565b905080600001805461199b90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546119c790614ef6565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b505050505091505090565b60606000611a2b612df8565b60008481526005820160205260409020805491925090611a4a90614ef6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7690614ef6565b80156114245780601f10611a9857610100808354040283529160200191611424565b820191906000526020600020905b815481529060010190602001808311611aa6575093979650505050505050565b611ace614743565b6000611ad983613915565b90506040518060c0016040528082600001518152602001611af9856111db565b6001600160a01b0316815260200182602001518152602001611b1a85611a1f565b815260200182604001518152602001611b368360000151612092565b151590529392505050565b600080611b4c612ac0565b600d810154600e820154604051636fc28ef560e01b815292935073__$3595fb81bb2992837332c28d269a7eece2$__92636fc28ef592611ba192600c8701926001600160a01b03909116908990600401614f2a565b602060405180830381865af4158015611bbe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190614da7565b600080611bed612ac0565b60009384526008016020525050604090205490565b600080611c0d612df8565b60009384526004016020525050604090205490565b600082611c2f823361204d565b158015611c435750611c418133611cd9565b155b15611c6357336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613a20565b600082611c7a823361204d565b158015611c8e5750611c8c8133611cd9565b155b15611cae57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613a52565b600080516020615255833981519152611cd081612ae4565b61114582613a87565b600080611ce4612df8565b600094855260205250506040909120546001600160a01b0391821691161490565b6000611d0f612ac0565b9050611d1a83612af1565b611d3a5760405163018f58af60e31b815260048101849052602401610f89565b611d438361195b565b15611d6457604051633126f1ab60e01b815260048101849052602401610f89565b81600003611d85576040516326a2091b60e21b815260040160405180910390fd5b611d8e83612545565b611dae57604051635fb805d960e11b815260048101849052602401610f89565b600f81015460405162491fcf60e11b8152600481018490526001600160a01b039091169062923f9e90602401602060405180830381865afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b9190614da7565b1580611e995750600f810154604051631975e30960e11b81526001600160a01b03909116906332ebc61290611e569033908690600401614edd565b602060405180830381865afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e979190614da7565b155b15611eb7576040516326a2091b60e21b815260040160405180910390fd5b600082815260058201602052604090205415611ee657604051637069cd4360e11b815260040160405180910390fd5b611eef82611b41565b15611f0d5760405163f404220560e01b815260040160405180910390fd5b611f1682611431565b600003611f3657604051632e8e471b60e21b815260040160405180910390fd5b6000838152600282016020908152604080832080546001810182559084528284200185905584835260058401825291829020859055600e8301548251639cbe5efd60e01b815292516001600160a01b0390911692639cbe5efd9260048083019391928290030181865afa158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd59190614f4e565b6000838152600c83016020526040812091909155611ff38482613ad8565b9050611ffd613b9a565b811061200c5761200c84613baf565b604080518481526001602082015285917ffbd45dc6be377be558cbfa21354b354150da398460fa6e807150d984bda05726910160405180910390a250505050565b6000806120586132a7565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600061208d613514565b905090565b600061209d8261180c565b6120a957506000919050565b60006120b36138cd565b600084815260028201602052604090209091506120cf90613d07565b6001600160d01b0316600114915050919050565b6000826120f0823361204d565b15801561210457506121028133611cd9565b155b1561212457336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613d4e565b60008261213b823361204d565b15801561214f575061214d8133611cd9565b155b1561216f57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613df2565b60008051602061527583398151915261219181612ae4565b6007600061219d613e8f565b8054909150600160401b900460ff16806121c4575080546001600160401b03808416911610155b156121e25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0384166122735760405162461bcd60e51b815260206004820152603360248201527f58324561726e4170707356373a20496e76616c6964205374617267617465204e604482015272465420636f6e7472616374206164647265737360681b6064820152608401610f89565b61227c84613eb3565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000826122d6823361204d565b1580156122ea57506122e88133611cd9565b155b1561230a57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613ec4565b60008061231f612ac0565b6006015465ffffffffffff1692915050565b600061233c82612af1565b61235c5760405163018f58af60e31b815260048101839052602401610f89565b6123658261195b565b1561237257506000919050565b600061237f836000613ad8565b9050612389613b9a565b8110156123995761157283613ef9565b6123a283613baf565b50600192915050565b60006123b5612ac0565b60ff909216600090815260039290920160205250604090205490565b6000806123dc612df8565b600801546001600160a01b031692915050565b6000806123fa612df8565b60405163f6b5036160e01b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__9063f6b503619061108f90600285019088908890600401614d88565b60606000612447612df8565b60008481526006820160209081526040918290208054835181840281018401909452808452939450919290830182828015611424576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611406575050505050915050919050565b6000806124c1612df8565b6001600160a01b039093166000908152600790930160205250506040902054151590565b606060006124f16138cd565b805460408051602080840282018101909252828152929350839190830182828015611a1457602002820191906000526020600020905b81548152602001906001019080831161252757505050505091505090565b600080612550612ac0565b905061255b8361195b565b156125695750600092915050565b6000928352600101602052506040902054151590565b60008061258a612ac0565b600f8101546040516357d6086360e01b81526003830160048201526001600160a01b039182166024820152908516604482015290915073__$3595fb81bb2992837332c28d269a7eece2$__906357d6086390606401602060405180830381865af41580156125fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190614f4e565b60008061262b6138cd565b905073__$54490b80653f2fa675a5803f32478ee046$__63c660a0f38260020186866126568961180c565b61265e612083565b6040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091521515606483015265ffffffffffff16608482015260a40161108f565b60006126b181612ae4565b61114582614036565b60006126c4612ac0565b600e01546001600160a01b0316919050565b6126df82611218565b6126e881612ae4565b6111948383613406565b606060006126fe613341565b90506110d0816000018260010180548060200260200160405190810160405280929190818152602001828054801561275557602002820191906000526020600020905b815481526020019060010190808311612741575b505050505086866140c5565b606060006124f1612ac0565b600061277881612ae4565b6111458261428f565b600061278c81612ae4565b6111458261432e565b6000826127a2823361204d565b1580156127b657506127b48133611cd9565b155b156127d657336040516363a704cf60e11b8152600401610f899190614b27565b61119484846137d3565b60006127ea612ac0565b600f01546001600160a01b0316919050565b600082612809823361204d565b15801561281d575061281b8133611cd9565b155b8015612830575061282e8133611043565b155b1561285057336040516363a704cf60e11b8152600401610f899190614b27565b61119484846143b1565b600061208d613b9a565b60606000612870613341565b9050610f31816001018054806020026020016040519081016040528092919081815260200182805480156128c357602002820191906000526020600020905b8154815260200190600101908083116128af575b50505050505b606060006128d5613341565b83519091506000816001600160401b038111156128f4576128f46149e2565b60405190808252806020026020018201604052801561292d57816020015b61291a614743565b8152602001906001900390816129125790505b50905060005b82811015612ab757600084600001600088848151811061295557612955614f67565b602002602001015181526020019081526020016000206040518060600160405290816000820154815260200160018201805461299090614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546129bc90614ef6565b8015612a095780601f106129de57610100808354040283529160200191612a09565b820191906000526020600020905b8154815290600101906020018083116129ec57829003601f168201915b5050505050815260200160028201548152505090506040518060c0016040528082600001518152602001612a4083600001516111db565b6001600160a01b0316815260200182602001518152602001612a658360000151611a1f565b815260200182604001518152602001612a818360000151612092565b1515815250838381518110612a9857612a98614f67565b6020026020010181905250508080612aaf90614f93565b915050612933565b50949350505050565b7fc1a7bcdc0c77e8c77ade4541d1777901ab96ca598d164d89afa5c8dfbfc4430090565b612aee8133614405565b50565b600080612afc613341565b600093845260205250506040902054151590565b6000612b1a6138cd565b905073__$54490b80653f2fa675a5803f32478ee046$__63056433c68260028101600182018787612b4a82612092565b612b52612083565b6040516001600160e01b031960e08a901b168152600481019790975260248701959095526044860193909352606485019190915215156084840152151560a483015265ffffffffffff1660c482015260e4015b60006040518083038186803b158015612bbd57600080fd5b505af4158015612bd1573d6000803e3d6000fd5b50505050505050565b6000612be4612ac0565b604051630377e0a960e51b815290915073__$3595fb81bb2992837332c28d269a7eece2$__90636efc152090612ba5908490600182019088908890600401614fac565b6000612c31612df8565b9050612c3c8261195b565b61114557600881015460405163f84ef3d960e01b815273__$acf64a28289e8f3f46392e24e4d9742041$__9163f84ef3d991612c9091600686019160078701916001600160a01b0316908890600401614f2a565b60006040518083038186803b158015612ca857600080fd5b505af4158015612cbc573d6000803e3d6000fd5b505050505050565b6000612cce612df8565b9050612cd98261195b565b15611145576008810154604051630afeb2b760e01b815273__$acf64a28289e8f3f46392e24e4d9742041$__91630afeb2b791612c9091600686019160078701916001600160a01b0316908890600401614f2a565b6000612d386138cd565b600084815260038201602052604090819020805460ff19168515151790555190915083907fdcf7bb788a4c8c91f85b15fa04797101b624ce86f804c2ccc49d8474adeb90ba90612d8d90851515815260200190565b60405180910390a2505050565b612da381612af1565b612dc35760405163018f58af60e31b815260048101829052602401610f89565b612dcc8161180c565b15612ded5760405163e2cf34b760e01b815260048101829052602401610f89565b612aee816001612bda565b7f5830f0e95c01712d916c34d9e2fa42e9f749b325b67bce7382d70bb99c62350090565b6000612e26612ac0565b60068101546040805165ffffffffffff928316815291851660208301529192507f55c7a79c45e9a972909cd640f9336a14a84adbaf756211f16267001854110191910160405180910390a1600601805465ffffffffffff191665ffffffffffff92909216919091179055565b6000612e9c612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__637848d45f826001018585612ec788612af1565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b031660448301521515606482810191909152608482015260a401612ba5565b6000612f1b612ac0565b60408051639a64683360e01b8152600383016004820152843560248201526020850135604482015290840135606482015260608401356084820152608084013560a482015260a084013560c482015260c084013560e482015290915073__$3595fb81bb2992837332c28d269a7eece2$__90639a6468339061010401612c90565b6000612fa6612ac0565b90506001600160a01b0382166130145760405162461bcd60e51b815260206004820152602d60248201527f58416c6c6f636174696f6e566f74696e67476f7665726e6f722061646472657360448201526c0732063616e6e6f74206265203609c1b6064820152608401610f89565b600e0180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0384166130605783604051630ea81b3f60e21b8152600401610f899190614b27565b6001600160a01b0383166130895782604051630ea81b3f60e21b8152600401610f899190614b27565b60006130948361133d565b905061309f81612af1565b156130c057604051636b4fdeb360e01b815260048101829052602401610f89565b60006130ca613341565b90506130d46123d1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016130ff9190614b27565b602060405180830381865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131409190614f4e565b6000036131625733604051631223ae8960e01b8152600401610f899190614b27565b61316b336124b6565b1561318b573360405163630ad52760e11b8152600401610f899190614b27565b60408051606081018252838152602080820187815260008385018190528681529185905292902081518155915190919060018201906131ca908261500f565b50604082015181600201559050506131e28286613a20565b6131ec8287613898565b6131f682846143b1565b61320182600061372c565b61320c826000614430565b6132168233613d4e565b61321f82613252565b816000805160206152b583398151915287866000604051613242939291906150ce565b60405180910390a2505050505050565b600061325c612df8565b6009810154604051634388a01b60e11b815291925073__$acf64a28289e8f3f46392e24e4d9742041$__91638711403691612c90916001600160a01b03909116908690600401614edd565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b60006132d5612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__6308fe631882600101858561330088612af1565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0316604483015215156064820152608401612ba5565b7fb6909058bd527140b8d55a44344c5e42f1f148f1b3b16df7641882df8dd7290090565b6000806133706132a7565b905061337c848461204d565b6133fc576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556133b23390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610f14565b6000915050610f14565b6000806134116132a7565b905061341d848461204d565b156133fc576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610f14565b6000613488612df8565b90506001600160a01b0382166134f15760405162461bcd60e51b815260206004820152602860248201527f58324561726e417070733a20496e76616c6964207265776172647320706f6f6c604482015267206164647265737360c01b6064820152608401610f89565b60090180546001600160a01b0319166001600160a01b0392909216919091179055565b600061208d4361447a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806135a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661359a600080516020615295833981519152546001600160a01b031690565b6001600160a01b031614155b156135c45760405163703e46dd60e11b815260040160405180910390fd5b565b60008051602061527583398151915261114581612ae4565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613638575060408051601f3d908101601f1916820190925261363591810190614f4e565b60015b6136575781604051634c9c8ce360e01b8152600401610f899190614b27565b600080516020615295833981519152811461368857604051632a87526960e21b815260048101829052602401610f89565b610ff483836144b1565b600061369c612ac0565b600781015460408051918252602082018590529192507fc0d3753bc89284345726d88cd5c82025ebedac4070cdbc551a0ba27b5180a637910160405180910390a160070155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135c45760405163703e46dd60e11b815260040160405180910390fd5b6000613736612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63210a4e1282600401858561376188612af1565b6040518563ffffffff1660e01b8152600401612ba59493929190614fac565b600061378a6138f1565b90507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc181600001836040516137c0929190615181565b60405180910390a180610ff4838261500f565b60006137dd612ac0565b90506137e883612af1565b6138085760405163018f58af60e31b815260048101849052602401610f89565b6000828152600582016020526040902054831461383857604051632469757560e11b815260040160405180910390fd5b60006138448484613ad8565b905061384f84612092565b158061385f575061385f8461195b565b1561386a5750505050565b613872613b9a565b8110156138845761388284613ef9565b505b506000918252600c01602052604081205550565b60006138a2612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__633895ef4782600301858561330088612af1565b7fb5b8d618af1ffb8d5bcc4bd23f445ba34ed08d7a16d1e1b5411cfbe7913e590090565b7f83b9a7e51f394efa93107c3888716138908bbbe611dfc86afa3639a82644110090565b61391d614787565b61392682612af1565b6139465760405163018f58af60e31b815260048101839052602401610f89565b6000613950613341565b90508060000160008481526020019081526020016000206040518060600160405290816000820154815260200160018201805461398c90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546139b890614ef6565b8015613a055780601f106139da57610100808354040283529160200191613a05565b820191906000526020600020905b8154815290600101906020018083116139e857829003601f168201915b50505050508152602001600282015481525050915050919050565b6000613a2a612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__636f3580bc82858561330082612af1565b6000613a5c612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63a7303c9c826002018585612ec788612af1565b6000613a91612ac0565b600d81015460408051918252602082018590529192507f98eaabfe135a9c40c420208962bf81e7926b4d6df3e23502164c0554b7b35224910160405180910390a1600d0155565b600080613ae3612ac0565b600f8101546040516306c7aa3760e31b81526003830160048201526005830160248201526002830160448201526008830160648201526001600160a01b03909116608482015260a4810186905260c4810185905290915073__$3595fb81bb2992837332c28d269a7eece2$__9063363d51b89060e401602060405180830381865af4158015613b76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614f4e565b600080613ba5612ac0565b6007015492915050565b6000613bb9612ac0565b9050613bc48261180c565b613c3d57613bd182614507565b600b810154604051630399a2ab60e21b81526001600160a01b0390911690630e668aac90613c069085906001906004016151a6565b600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50505050613cd0565b613c4682612092565b613cd057613c55826001612b10565b600b810154600083815260098301602052604090819020549051630399a2ab60e21b81526001600160a01b0390921691630e668aac91613c9d91869160ff16906004016151a6565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505050505b613cd982612545565b15613ce957613ce9826001614430565b600091825260040160205260409020805465ffffffffffff19169055565b80546000908015613d4557613d2f83613d216001846151d8565b600091825260209091200190565b54600160301b90046001600160d01b0316611572565b60009392505050565b6000613d58612df8565b600881015490915073__$acf64a28289e8f3f46392e24e4d9742041$__90633be9b7f290600684019060078501906001600160a01b03168787613d9a82612af1565b6040516001600160e01b031960e089901b168152600481019690965260248601949094526001600160a01b0392831660448601526064850191909152166084830152151560a4820152600360c482015260e401612ba5565b6000613dfc612df8565b600881015490915073__$acf64a28289e8f3f46392e24e4d9742041$__90638312528490600684019060078501906001600160a01b03168787613e3e82612af1565b6040516001600160e01b031960e089901b168152600481019690965260248601949094526001600160a01b0392831660448601526064850191909152166084830152151560a482015260c401612ba5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b613ebb614586565b612aee816145ab565b6000613ece612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__6338532ebb82600201858561330088612af1565b600080613f04612ac0565b600b810154600682015491925060009173__$3595fb81bb2992837332c28d269a7eece2$__91633e15ac6f9160048601916009870191879160018301916001600160a01b039091169065ffffffffffff16613f5e8c612545565b613f66612083565b8d613f708f612092565b6040516001600160e01b031960e08d901b168152600481019a909a5260248a0198909852604489019690965260648801949094526001600160a01b03909216608487015265ffffffffffff90811660a487015290151560c48601521660e4840152610104830152151561012482015261014401602060405180830381865af4158015614000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140249190614da7565b90508061157257611572846000612b10565b6001600160a01b0381166140985760405162461bcd60e51b8152602060048201526024808201527f566542657474657250617373706f727420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f89565b806140a1612ac0565b600b0180546001600160a01b0319166001600160a01b039290921691909117905550565b82516060908381116140ea57604051635eb538c960e11b815260040160405180910390fd5b60006140f684866151eb565b9050818111156141035750805b600061410f86836151d8565b6001600160401b03811115614126576141266149e2565b60405190808252806020026020018201604052801561415f57816020015b61414c614787565b8152602001906001900390816141445790505b509050855b828110156142835788600089838151811061418157614181614f67565b60200260200101518152602001908152602001600020604051806060016040529081600082015481526020016001820180546141bc90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546141e890614ef6565b80156142355780601f1061420a57610100808354040283529160200191614235565b820191906000526020600020905b81548152906001019060200180831161421857829003601f168201915b5050505050815260200160028201548152505082888361425591906151d8565b8151811061426557614265614f67565b6020026020010181905250808061427b90614f93565b915050614164565b50979650505050505050565b6000614299612df8565b90506001600160a01b03821661430b5760405162461bcd60e51b815260206004820152603160248201527f58324561726e417070733a20496e76616c69642078324561726e43726561746f60448201527072436f6e7472616374206164647265737360781b6064820152608401610f89565b60080180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166143845760405162461bcd60e51b815260206004820181905260248201527f5374617267617465204e465420616464726573732063616e6e6f7420626520306044820152606401610f89565b8061438d612ac0565b600f0180546001600160a01b0319166001600160a01b039290921691909117905550565b60006143bb612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63850586028260050185856143e688612af1565b6040518563ffffffff1660e01b8152600401612ba594939291906151fe565b61440f828261204d565b61114557808260405163e2517d3f60e01b8152600401610f89929190614edd565b61443a8282612bda565b817f39ed358ca65699fee4083beb84f3d91ce2201bb0c89859317fc5be02231609ed8260405161446e911515815260200190565b60405180910390a25050565b600065ffffffffffff8211156144ad576040516306dfcc6560e41b81526030600482015260248101839052604401610f89565b5090565b6144ba826145bc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156144ff57610ff48282614618565b61114561468e565b6000614511613341565b600083815260208281526040822042600290910155600180840180548083018255908452919092200184905590915061454b908390612b10565b816000805160206152b5833981519152614564846111db565b60008581526020859052604090819020905161446e9291600190810191615230565b61458e6146ad565b6135c457604051631afcd79f60e31b815260040160405180910390fd5b6145b3614586565b612aee8161432e565b806001600160a01b03163b6000036145e95780604051634c9c8ce360e01b8152600401610f899190614b27565b60008051602061529583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516146359190614df3565b600060405180830381855af49150503d8060008114614670576040519150601f19603f3d011682016040523d82523d6000602084013e614675565b606091505b50915091506146858583836146c7565b95945050505050565b34156135c45760405163b398979f60e01b815260040160405180910390fd5b60006146b7613e8f565b54600160401b900460ff16919050565b6060826146dc576146d78261471a565b611572565b81511580156146f357506001600160a01b0384163b155b156147135783604051639996b31560e01b8152600401610f899190614b27565b5092915050565b80511561472a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060c001604052806000801916815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000151581525090565b60405180606001604052806000801916815260200160608152602001600081525090565b6000602082840312156147bd57600080fd5b81356001600160e01b03198116811461157257600080fd5b60005b838110156147f05781810151838201526020016147d8565b50506000910152565b600081518084526148118160208601602086016147d5565b601f01601f19169290920160200192915050565b8051825260018060a01b0360208201511660208301526000604082015160c0604085015261485660c08501826147f9565b90506060830151848203606086015261486f82826147f9565b9150506080830151608085015260a0830151151560a08501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148e757603f198886030184526148d5858351614825565b945092850192908501906001016148b9565b5092979650505050505050565b8015158114612aee57600080fd5b6000806040838503121561491557600080fd5b823591506020830135614927816148f4565b809150509250929050565b60006020828403121561494457600080fd5b5035919050565b6001600160a01b0381168114612aee57600080fd5b6000806040838503121561497357600080fd5b8235915060208301356149278161494b565b60006020828403121561499757600080fd5b813565ffffffffffff8116811461157257600080fd5b600060e082840312156149bf57600080fd5b50919050565b6000602082840312156149d757600080fd5b81356115728161494b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614a2057614a206149e2565b604052919050565b60006001600160401b03831115614a4157614a416149e2565b614a54601f8401601f19166020016149f8565b9050828152838383011115614a6857600080fd5b828260208301376000602084830101529392505050565b600082601f830112614a9057600080fd5b61157283833560208501614a28565b60008060008060808587031215614ab557600080fd5b8435614ac08161494b565b93506020850135614ad08161494b565b925060408501356001600160401b0380821115614aec57600080fd5b614af888838901614a7f565b93506060870135915080821115614b0e57600080fd5b50614b1b87828801614a7f565b91505092959194509250565b6001600160a01b0391909116815260200190565b60208152600061157260208301846147f9565b600060208284031215614b6057600080fd5b81356001600160401b03811115614b7657600080fd5b6110d084828501614a7f565b6020808252825182820181905260009190848201906040850190845b81811015614bc35783516001600160a01b031683529284019291840191600101614b9e565b50909695505050505050565b60008060408385031215614be257600080fd5b8235614bed8161494b565b915060208301356001600160401b03811115614c0857600080fd5b8301601f81018513614c1957600080fd5b614c2885823560208401614a28565b9150509250929050565b60008060408385031215614c4557600080fd5b50508035926020909101359150565b6020815260006115726020830184614825565b60ff81168114612aee57600080fd5b600060208284031215614c8857600080fd5b813561157281614c67565b6020808252825182820181905260009190848201906040850190845b81811015614bc357835183529284019291840191600101614caf565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614d3e57603f19898403018552815160608151855288820151818a870152614d20828701826147f9565b92890151958901959095525094870194925090860190600101614cf2565b509098975050505050505050565b60008060408385031215614d5f57600080fd5b8235915060208301356001600160401b03811115614d7c57600080fd5b614c2885828601614a7f565b92835260208301919091526001600160a01b0316604082015260600190565b600060208284031215614db957600080fd5b8151611572816148f4565b60008351614dd68184602088016147d5565b835190830190614dea8183602088016147d5565b01949350505050565b60008251614e058184602087016147d5565b9190910192915050565b600060208284031215614e2157600080fd5b815161157281614c67565b60006020808385031215614e3f57600080fd5b82516001600160401b0380821115614e5657600080fd5b818501915085601f830112614e6a57600080fd5b815181811115614e7c57614e7c6149e2565b8060051b9150614e8d8483016149f8565b8181529183018401918481019088841115614ea757600080fd5b938501935b83851015614ed15784519250614ec18361494b565b8282529385019390850190614eac565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600181811c90821680614f0a57607f821691505b6020821081036149bf57634e487b7160e01b600052602260045260246000fd5b93845260208401929092526001600160a01b03166040830152606082015260800190565b600060208284031215614f6057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614fa557614fa5614f7d565b5060010190565b938452602084019290925260408301521515606082015260800190565b601f821115610ff457600081815260208120601f850160051c81016020861015614ff05750805b601f850160051c820191505b81811015612cbc57828155600101614ffc565b81516001600160401b03811115615028576150286149e2565b61503c816150368454614ef6565b84614fc9565b602080601f83116001811461507157600084156150595750858301515b600019600386901b1c1916600185901b178555612cbc565b600085815260208120601f198616915b828110156150a057888601518255948401946001909101908401615081565b50858210156150be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03841681526060602082018190526000906150f2908301856147f9565b90508215156040830152949350505050565b6000815461511181614ef6565b80855260206001838116801561512e576001811461514857615176565b60ff1985168884015283151560051b880183019550615176565b866000528260002060005b8581101561516e5781548a8201860152908301908401615153565b890184019650505b505050505092915050565b6040815260006151946040830185615104565b828103602084015261468581856147f9565b82815260408101600483106151cb57634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b81810381811115610f1457610f14614f7d565b80820180821115610f1457610f14614f7d565b84815283602082015260806040820152600061521d60808301856147f9565b9050821515606083015295945050505050565b6001600160a01b03841681526060602082018190526000906150f29083018561510456fe71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc181c8615e49dc4eaed218e1d225e4a34a0fb364fc70601a191573daa19d57edaa264697066735822122079094ac6b4a7a59967c8bb6314ea0b68544bf0690f4c3c1e43490d2bda36dbc964736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106103f15760003560e01c806301ffc9a7146103f657806303bc087f1461042b57806304646a491461044d5780630765ef60146104705780630ab12e14146104925780630ad0e45f146104b25780630b6ae130146104d25780630bf4f68e146104f25780630cb212e1146105125780630e1fb61a146105325780630f5d4c5e14610552578063169efd47146105725780631772503b146105925780631a25071f146105bf578063228cf42f146105df578063248a9ca3146105f45780632589a49d146106145780632b5f3879146106345780632c35f428146106495780632e87d31f146106695780632f2ff15d1461069657806334b0e6b3146106b657806336568abe146106d65780634047d7ff146106f6578063416c0f741461071657806342c89f521461074357806344bb58f7146107635780634bf5d7e9146107835780634f1ef286146107985780634f77fe12146107ab57806352d1902d146107cb57806354933bf0146107e057806354fd4d501461080057806355f804b31461082a578063594ae8481461084a5780635da2c0d01461086a578063607bfb241461087f5780636165267c1461089f57806361b215a1146108bf5780636520f41a146108df5780636912f1f6146108f457806369ad5156146109145780636a0ae325146105df5780636b623bbe146109345780636c0360eb146109545780636f604ab314610969578063785d6e1814610989578063790cb966146109b65780637ba53285146109d6578063826b9a4e146109f6578063833d29b414610a165780638380216514610a36578063861f6bfd14610a565780638e3a29dc14610a765780638e4284f514610a965780638ed087ee14610aab57806391d1485414610acb57806391ddadf414610aeb5780639478401714610b17578063993f8d3614610b375780639fa949ad14610b575780639fb0270214610b77578063a06bb12914610b97578063a06db7dc14610bb7578063a099a19214610bcc578063a217fddf14610bec578063acdb9f0514610c01578063ad3cb1cc14610c21578063b2072eec14610c52578063b58a754714610c67578063b747e2e914610c87578063bcbd410c14610ca7578063c04cff1914610cc7578063c7b24f3014610ce9578063c996c62414610d09578063d2570b9414610d29578063d455e0c514610d49578063d493091714610d69578063d547741f14610d7e578063d5e66e1214610d9e578063d6418b8a14610dcb578063d676535d14610de0578063e03252ae14610e00578063e123cd0c14610e20578063e34cfd3914610e40578063e9a1fee414610e55578063f1a962ac14610e75578063f36c8f5c14610e8a578063f72c0d8b14610eac578063f770337914610ece575b600080fd5b34801561040257600080fd5b506104166104113660046147ab565b610ee3565b60405190151581526020015b60405180910390f35b34801561043757600080fd5b50610440610f1a565b6040516104229190614892565b34801561045957600080fd5b50610462610f37565b604051908152602001610422565b34801561047c57600080fd5b5061049061048b366004614902565b610f4c565b005b34801561049e57600080fd5b506104906104ad366004614932565b610ff9565b3480156104be57600080fd5b506104166104cd366004614960565b611043565b3480156104de57600080fd5b506104166104ed366004614960565b6110d8565b3480156104fe57600080fd5b5061049061050d366004614985565b611124565b34801561051e57600080fd5b5061049061052d366004614960565b611149565b34801561053e57600080fd5b5061049061054d3660046149ad565b61119a565b34801561055e57600080fd5b5061049061056d3660046149c5565b6111bb565b34801561057e57600080fd5b5061049061058d366004614a9f565b6111cf565b34801561059e57600080fd5b506105b26105ad366004614932565b6111db565b6040516104229190614b27565b3480156105cb57600080fd5b506104906105da366004614932565b611204565b3480156105eb57600080fd5b50610462606481565b34801561060057600080fd5b5061046261060f366004614932565b611218565b34801561062057600080fd5b5061049061062f366004614960565b611238565b34801561064057600080fd5b50610462611283565b34801561065557600080fd5b506105b2610664366004614932565b611298565b34801561067557600080fd5b50610689610684366004614932565b6112be565b6040516104229190614b3b565b3480156106a257600080fd5b506104906106b1366004614960565b611321565b3480156106c257600080fd5b506104626106d1366004614b4e565b61133d565b3480156106e257600080fd5b506104906106f1366004614960565b61136d565b34801561070257600080fd5b506104906107113660046149c5565b6113a0565b34801561072257600080fd5b50610736610731366004614932565b6113b4565b6040516104229190614b82565b34801561074f57600080fd5b5061046261075e366004614932565b611431565b34801561076f57600080fd5b5061073661077e366004614932565b6114cd565b34801561078f57600080fd5b50610689611579565b6104906107a6366004614bcf565b6115f1565b3480156107b757600080fd5b506104906107c6366004614932565b61160c565b3480156107d757600080fd5b5061046261162d565b3480156107ec57600080fd5b506104906107fb366004614c32565b61164a565b34801561080c57600080fd5b506040805180820190915260018152603760f81b6020820152610689565b34801561083657600080fd5b50610490610845366004614b4e565b611695565b34801561085657600080fd5b50610490610865366004614c32565b6116a9565b34801561087657600080fd5b506105b26117ee565b34801561088b57600080fd5b5061041661089a366004614932565b61180c565b3480156108ab57600080fd5b506104906108ba366004614960565b61182e565b3480156108cb57600080fd5b506104626108da366004614932565b611879565b3480156108eb57600080fd5b506105b2611897565b34801561090057600080fd5b5061046261090f3660046149c5565b6118b3565b34801561092057600080fd5b5061073661092f366004614932565b6118e0565b34801561094057600080fd5b5061041661094f366004614932565b61195b565b34801561096057600080fd5b5061068961197e565b34801561097557600080fd5b50610689610984366004614932565b611a1f565b34801561099557600080fd5b506109a96109a4366004614932565b611ac6565b6040516104229190614c54565b3480156109c257600080fd5b506104166109d1366004614932565b611b41565b3480156109e257600080fd5b506104626109f1366004614932565b611be2565b348015610a0257600080fd5b50610462610a11366004614932565b611c02565b348015610a2257600080fd5b50610490610a31366004614960565b611c22565b348015610a4257600080fd5b50610490610a51366004614960565b611c6d565b348015610a6257600080fd5b50610490610a71366004614932565b611cb8565b348015610a8257600080fd5b50610416610a91366004614960565b611cd9565b348015610aa257600080fd5b50610462600381565b348015610ab757600080fd5b50610490610ac6366004614c32565b611d05565b348015610ad757600080fd5b50610416610ae6366004614960565b61204d565b348015610af757600080fd5b50610b00612083565b60405165ffffffffffff9091168152602001610422565b348015610b2357600080fd5b50610416610b32366004614932565b612092565b348015610b4357600080fd5b50610490610b52366004614960565b6120e3565b348015610b6357600080fd5b50610490610b72366004614960565b61212e565b348015610b8357600080fd5b50610490610b923660046149c5565b612179565b348015610ba357600080fd5b50610490610bb2366004614960565b6122c9565b348015610bc357600080fd5b50610462612314565b348015610bd857600080fd5b50610416610be7366004614932565b612331565b348015610bf857600080fd5b50610462600081565b348015610c0d57600080fd5b50610462610c1c366004614c76565b6123ab565b348015610c2d57600080fd5b50610689604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610c5e57600080fd5b506105b26123d1565b348015610c7357600080fd5b50610416610c82366004614960565b6123ef565b348015610c9357600080fd5b50610736610ca2366004614932565b61243b565b348015610cb357600080fd5b50610416610cc23660046149c5565b6124b6565b348015610cd357600080fd5b50610cdc6124e5565b6040516104229190614c93565b348015610cf557600080fd5b50610416610d04366004614932565b612545565b348015610d1557600080fd5b50610462610d243660046149c5565b61257f565b348015610d3557600080fd5b50610416610d44366004614c32565b612620565b348015610d5557600080fd5b50610490610d643660046149c5565b6126a6565b348015610d7557600080fd5b506105b26126ba565b348015610d8a57600080fd5b50610490610d99366004614960565b6126d6565b348015610daa57600080fd5b50610dbe610db9366004614c32565b6126f2565b6040516104229190614ccb565b348015610dd757600080fd5b50610cdc612761565b348015610dec57600080fd5b50610490610dfb3660046149c5565b61276d565b348015610e0c57600080fd5b50610490610e1b3660046149c5565b612781565b348015610e2c57600080fd5b50610490610e3b366004614c32565b612795565b348015610e4c57600080fd5b506105b26127e0565b348015610e6157600080fd5b50610490610e70366004614d4c565b6127fc565b348015610e8157600080fd5b5061046261285a565b348015610e9657600080fd5b5061046260008051602061525583398151915281565b348015610eb857600080fd5b5061046260008051602061527583398151915281565b348015610eda57600080fd5b50610440612864565b60006001600160e01b03198216637965db0b60e01b1480610f1457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000610f26612761565b9050610f31816128c9565b91505090565b600080610f42612ac0565b600d015492915050565b600080516020615255833981519152610f6481612ae4565b610f6d83612af1565b610f925760405163018f58af60e31b8152600481018490526024015b60405180910390fd5b610f9b8361180c565b15610faa57610faa8383612b10565b610fb383612545565b8015610fbd575081155b15610fcd57610fcd836001612bda565b81610fe057610fdb83612c27565b610fe9565b610fe983612cc4565b610ff4838315612d2e565b505050565b600081611006823361204d565b15801561101a57506110188133611cd9565b155b1561103a57336040516363a704cf60e11b8152600401610f899190614b27565b610ff483612d9a565b60008061104e612df8565b60405163109fb2eb60e31b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__906384fd97589061108f90600185019088908890600401614d88565b602060405180830381865af41580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614da7565b949350505050565b6000806110e3612df8565b60405163be4d2cb960e01b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__9063be4d2cb99061108f90600685019088908890600401614d88565b60008051602061525583398151915261113c81612ae4565b61114582612e1c565b5050565b600082611156823361204d565b15801561116a57506111688133611cd9565b155b1561118a57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484612e92565b50505050565b6000805160206152558339815191526111b281612ae4565b61114582612f11565b60006111c681612ae4565b61114582612f9c565b61119484848484613037565b6000806111e6612df8565b6000938452600301602052505060409020546001600160a01b031690565b600061120f81612ae4565b61114582613252565b6000806112236132a7565b60009384526020525050604090206001015490565b600082611245823361204d565b15801561125957506112578133611cd9565b155b1561127957336040516363a704cf60e11b8152600401610f899190614b27565b61119484846132cb565b60008061128e613341565b6001015492915050565b6000806112a3612df8565b6000938452602052505060409020546001600160a01b031690565b60606112c982612af1565b6112e95760405163018f58af60e31b815260048101839052602401610f89565b6112f161197e565b6112fa83611a1f565b60405160200161130b929190614dc4565b6040516020818303038152906040529050919050565b61132a82611218565b61133381612ae4565b6111948383613365565b6000816040516020016113509190614df3565b604051602081830303815290604052805190602001209050919050565b6001600160a01b03811633146113965760405163334bd91960e11b815260040160405180910390fd5b610ff48282613406565b60006113ab81612ae4565b6111458261347e565b606060006113c0612df8565b6000848152600282016020908152604091829020805483518184028101840190945280845293945091929083018282801561142457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611406575b5050505050915050919050565b60008061143c612ac0565b600f810154604051633404591760e21b8152600481018690529192506000916001600160a01b039091169063d011645c90602401602060405180830381865afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190614e0f565b60ff166000908152600390920160205250604090205492915050565b606060006114d9612ac0565b600f810154604051632fc6f2d160e01b81526002830160048201526001600160a01b0390911660248201526044810185905290915073__$3595fb81bb2992837332c28d269a7eece2$__90632fc6f2d190606401600060405180830381865af415801561154a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115729190810190614e2c565b9392505050565b6060611583613514565b65ffffffffffff16611593612083565b65ffffffffffff16146115b9576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6115f961351f565b611602826135c6565b61114582826135de565b60008051602061525583398151915261162481612ae4565b61114582613692565b60006116376136e3565b5060008051602061529583398151915290565b600082611657823361204d565b15801561166b57506116698133611cd9565b155b1561168b57336040516363a704cf60e11b8152600401610f899190614b27565b611194848461372c565b60006116a081612ae4565b61114582613780565b60006116b3612ac0565b600f81015460405162491fcf60e11b8152600481018590529192506001600160a01b03169062923f9e90602401602060405180830381865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117219190614da7565b158061179f5750600f810154604051631975e30960e11b81526001600160a01b03909116906332ebc6129061175c9033908690600401614edd565b602060405180830381865afa158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d9190614da7565b155b156117bd576040516326a2091b60e21b815260040160405180910390fd5b6117c682611b41565b156117e45760405163f404220560e01b815260040160405180910390fd5b610ff483836137d3565b6000806117f9612df8565b600901546001600160a01b031692915050565b600080611817613341565b600093845260205250506040902060020154151590565b60008261183b823361204d565b15801561184f575061184d8133611cd9565b155b1561186f57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613898565b6000611883612ac0565b600092835260050160205250604090205490565b60006118a1612ac0565b600b01546001600160a01b0316919050565b6000806118be612df8565b6001600160a01b03909316600090815260079093016020525050604090205490565b606060006118ec612df8565b60008481526001820160209081526040918290208054835181840281018401909452808452939450919290830182828015611424576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611406575050505050915050919050565b6000806119666138cd565b60009384526003016020525050604090205460ff1690565b6060600061198a6138f1565b905080600001805461199b90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546119c790614ef6565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b505050505091505090565b60606000611a2b612df8565b60008481526005820160205260409020805491925090611a4a90614ef6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7690614ef6565b80156114245780601f10611a9857610100808354040283529160200191611424565b820191906000526020600020905b815481529060010190602001808311611aa6575093979650505050505050565b611ace614743565b6000611ad983613915565b90506040518060c0016040528082600001518152602001611af9856111db565b6001600160a01b0316815260200182602001518152602001611b1a85611a1f565b815260200182604001518152602001611b368360000151612092565b151590529392505050565b600080611b4c612ac0565b600d810154600e820154604051636fc28ef560e01b815292935073__$3595fb81bb2992837332c28d269a7eece2$__92636fc28ef592611ba192600c8701926001600160a01b03909116908990600401614f2a565b602060405180830381865af4158015611bbe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190614da7565b600080611bed612ac0565b60009384526008016020525050604090205490565b600080611c0d612df8565b60009384526004016020525050604090205490565b600082611c2f823361204d565b158015611c435750611c418133611cd9565b155b15611c6357336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613a20565b600082611c7a823361204d565b158015611c8e5750611c8c8133611cd9565b155b15611cae57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613a52565b600080516020615255833981519152611cd081612ae4565b61114582613a87565b600080611ce4612df8565b600094855260205250506040909120546001600160a01b0391821691161490565b6000611d0f612ac0565b9050611d1a83612af1565b611d3a5760405163018f58af60e31b815260048101849052602401610f89565b611d438361195b565b15611d6457604051633126f1ab60e01b815260048101849052602401610f89565b81600003611d85576040516326a2091b60e21b815260040160405180910390fd5b611d8e83612545565b611dae57604051635fb805d960e11b815260048101849052602401610f89565b600f81015460405162491fcf60e11b8152600481018490526001600160a01b039091169062923f9e90602401602060405180830381865afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b9190614da7565b1580611e995750600f810154604051631975e30960e11b81526001600160a01b03909116906332ebc61290611e569033908690600401614edd565b602060405180830381865afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e979190614da7565b155b15611eb7576040516326a2091b60e21b815260040160405180910390fd5b600082815260058201602052604090205415611ee657604051637069cd4360e11b815260040160405180910390fd5b611eef82611b41565b15611f0d5760405163f404220560e01b815260040160405180910390fd5b611f1682611431565b600003611f3657604051632e8e471b60e21b815260040160405180910390fd5b6000838152600282016020908152604080832080546001810182559084528284200185905584835260058401825291829020859055600e8301548251639cbe5efd60e01b815292516001600160a01b0390911692639cbe5efd9260048083019391928290030181865afa158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd59190614f4e565b6000838152600c83016020526040812091909155611ff38482613ad8565b9050611ffd613b9a565b811061200c5761200c84613baf565b604080518481526001602082015285917ffbd45dc6be377be558cbfa21354b354150da398460fa6e807150d984bda05726910160405180910390a250505050565b6000806120586132a7565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600061208d613514565b905090565b600061209d8261180c565b6120a957506000919050565b60006120b36138cd565b600084815260028201602052604090209091506120cf90613d07565b6001600160d01b0316600114915050919050565b6000826120f0823361204d565b15801561210457506121028133611cd9565b155b1561212457336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613d4e565b60008261213b823361204d565b15801561214f575061214d8133611cd9565b155b1561216f57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613df2565b60008051602061527583398151915261219181612ae4565b6007600061219d613e8f565b8054909150600160401b900460ff16806121c4575080546001600160401b03808416911610155b156121e25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0384166122735760405162461bcd60e51b815260206004820152603360248201527f58324561726e4170707356373a20496e76616c6964205374617267617465204e604482015272465420636f6e7472616374206164647265737360681b6064820152608401610f89565b61227c84613eb3565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000826122d6823361204d565b1580156122ea57506122e88133611cd9565b155b1561230a57336040516363a704cf60e11b8152600401610f899190614b27565b6111948484613ec4565b60008061231f612ac0565b6006015465ffffffffffff1692915050565b600061233c82612af1565b61235c5760405163018f58af60e31b815260048101839052602401610f89565b6123658261195b565b1561237257506000919050565b600061237f836000613ad8565b9050612389613b9a565b8110156123995761157283613ef9565b6123a283613baf565b50600192915050565b60006123b5612ac0565b60ff909216600090815260039290920160205250604090205490565b6000806123dc612df8565b600801546001600160a01b031692915050565b6000806123fa612df8565b60405163f6b5036160e01b815290915073__$acf64a28289e8f3f46392e24e4d9742041$__9063f6b503619061108f90600285019088908890600401614d88565b60606000612447612df8565b60008481526006820160209081526040918290208054835181840281018401909452808452939450919290830182828015611424576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611406575050505050915050919050565b6000806124c1612df8565b6001600160a01b039093166000908152600790930160205250506040902054151590565b606060006124f16138cd565b805460408051602080840282018101909252828152929350839190830182828015611a1457602002820191906000526020600020905b81548152602001906001019080831161252757505050505091505090565b600080612550612ac0565b905061255b8361195b565b156125695750600092915050565b6000928352600101602052506040902054151590565b60008061258a612ac0565b600f8101546040516357d6086360e01b81526003830160048201526001600160a01b039182166024820152908516604482015290915073__$3595fb81bb2992837332c28d269a7eece2$__906357d6086390606401602060405180830381865af41580156125fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190614f4e565b60008061262b6138cd565b905073__$54490b80653f2fa675a5803f32478ee046$__63c660a0f38260020186866126568961180c565b61265e612083565b6040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091521515606483015265ffffffffffff16608482015260a40161108f565b60006126b181612ae4565b61114582614036565b60006126c4612ac0565b600e01546001600160a01b0316919050565b6126df82611218565b6126e881612ae4565b6111948383613406565b606060006126fe613341565b90506110d0816000018260010180548060200260200160405190810160405280929190818152602001828054801561275557602002820191906000526020600020905b815481526020019060010190808311612741575b505050505086866140c5565b606060006124f1612ac0565b600061277881612ae4565b6111458261428f565b600061278c81612ae4565b6111458261432e565b6000826127a2823361204d565b1580156127b657506127b48133611cd9565b155b156127d657336040516363a704cf60e11b8152600401610f899190614b27565b61119484846137d3565b60006127ea612ac0565b600f01546001600160a01b0316919050565b600082612809823361204d565b15801561281d575061281b8133611cd9565b155b8015612830575061282e8133611043565b155b1561285057336040516363a704cf60e11b8152600401610f899190614b27565b61119484846143b1565b600061208d613b9a565b60606000612870613341565b9050610f31816001018054806020026020016040519081016040528092919081815260200182805480156128c357602002820191906000526020600020905b8154815260200190600101908083116128af575b50505050505b606060006128d5613341565b83519091506000816001600160401b038111156128f4576128f46149e2565b60405190808252806020026020018201604052801561292d57816020015b61291a614743565b8152602001906001900390816129125790505b50905060005b82811015612ab757600084600001600088848151811061295557612955614f67565b602002602001015181526020019081526020016000206040518060600160405290816000820154815260200160018201805461299090614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546129bc90614ef6565b8015612a095780601f106129de57610100808354040283529160200191612a09565b820191906000526020600020905b8154815290600101906020018083116129ec57829003601f168201915b5050505050815260200160028201548152505090506040518060c0016040528082600001518152602001612a4083600001516111db565b6001600160a01b0316815260200182602001518152602001612a658360000151611a1f565b815260200182604001518152602001612a818360000151612092565b1515815250838381518110612a9857612a98614f67565b6020026020010181905250508080612aaf90614f93565b915050612933565b50949350505050565b7fc1a7bcdc0c77e8c77ade4541d1777901ab96ca598d164d89afa5c8dfbfc4430090565b612aee8133614405565b50565b600080612afc613341565b600093845260205250506040902054151590565b6000612b1a6138cd565b905073__$54490b80653f2fa675a5803f32478ee046$__63056433c68260028101600182018787612b4a82612092565b612b52612083565b6040516001600160e01b031960e08a901b168152600481019790975260248701959095526044860193909352606485019190915215156084840152151560a483015265ffffffffffff1660c482015260e4015b60006040518083038186803b158015612bbd57600080fd5b505af4158015612bd1573d6000803e3d6000fd5b50505050505050565b6000612be4612ac0565b604051630377e0a960e51b815290915073__$3595fb81bb2992837332c28d269a7eece2$__90636efc152090612ba5908490600182019088908890600401614fac565b6000612c31612df8565b9050612c3c8261195b565b61114557600881015460405163f84ef3d960e01b815273__$acf64a28289e8f3f46392e24e4d9742041$__9163f84ef3d991612c9091600686019160078701916001600160a01b0316908890600401614f2a565b60006040518083038186803b158015612ca857600080fd5b505af4158015612cbc573d6000803e3d6000fd5b505050505050565b6000612cce612df8565b9050612cd98261195b565b15611145576008810154604051630afeb2b760e01b815273__$acf64a28289e8f3f46392e24e4d9742041$__91630afeb2b791612c9091600686019160078701916001600160a01b0316908890600401614f2a565b6000612d386138cd565b600084815260038201602052604090819020805460ff19168515151790555190915083907fdcf7bb788a4c8c91f85b15fa04797101b624ce86f804c2ccc49d8474adeb90ba90612d8d90851515815260200190565b60405180910390a2505050565b612da381612af1565b612dc35760405163018f58af60e31b815260048101829052602401610f89565b612dcc8161180c565b15612ded5760405163e2cf34b760e01b815260048101829052602401610f89565b612aee816001612bda565b7f5830f0e95c01712d916c34d9e2fa42e9f749b325b67bce7382d70bb99c62350090565b6000612e26612ac0565b60068101546040805165ffffffffffff928316815291851660208301529192507f55c7a79c45e9a972909cd640f9336a14a84adbaf756211f16267001854110191910160405180910390a1600601805465ffffffffffff191665ffffffffffff92909216919091179055565b6000612e9c612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__637848d45f826001018585612ec788612af1565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b031660448301521515606482810191909152608482015260a401612ba5565b6000612f1b612ac0565b60408051639a64683360e01b8152600383016004820152843560248201526020850135604482015290840135606482015260608401356084820152608084013560a482015260a084013560c482015260c084013560e482015290915073__$3595fb81bb2992837332c28d269a7eece2$__90639a6468339061010401612c90565b6000612fa6612ac0565b90506001600160a01b0382166130145760405162461bcd60e51b815260206004820152602d60248201527f58416c6c6f636174696f6e566f74696e67476f7665726e6f722061646472657360448201526c0732063616e6e6f74206265203609c1b6064820152608401610f89565b600e0180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0384166130605783604051630ea81b3f60e21b8152600401610f899190614b27565b6001600160a01b0383166130895782604051630ea81b3f60e21b8152600401610f899190614b27565b60006130948361133d565b905061309f81612af1565b156130c057604051636b4fdeb360e01b815260048101829052602401610f89565b60006130ca613341565b90506130d46123d1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016130ff9190614b27565b602060405180830381865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131409190614f4e565b6000036131625733604051631223ae8960e01b8152600401610f899190614b27565b61316b336124b6565b1561318b573360405163630ad52760e11b8152600401610f899190614b27565b60408051606081018252838152602080820187815260008385018190528681529185905292902081518155915190919060018201906131ca908261500f565b50604082015181600201559050506131e28286613a20565b6131ec8287613898565b6131f682846143b1565b61320182600061372c565b61320c826000614430565b6132168233613d4e565b61321f82613252565b816000805160206152b583398151915287866000604051613242939291906150ce565b60405180910390a2505050505050565b600061325c612df8565b6009810154604051634388a01b60e11b815291925073__$acf64a28289e8f3f46392e24e4d9742041$__91638711403691612c90916001600160a01b03909116908690600401614edd565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b60006132d5612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__6308fe631882600101858561330088612af1565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0316604483015215156064820152608401612ba5565b7fb6909058bd527140b8d55a44344c5e42f1f148f1b3b16df7641882df8dd7290090565b6000806133706132a7565b905061337c848461204d565b6133fc576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556133b23390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610f14565b6000915050610f14565b6000806134116132a7565b905061341d848461204d565b156133fc576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610f14565b6000613488612df8565b90506001600160a01b0382166134f15760405162461bcd60e51b815260206004820152602860248201527f58324561726e417070733a20496e76616c6964207265776172647320706f6f6c604482015267206164647265737360c01b6064820152608401610f89565b60090180546001600160a01b0319166001600160a01b0392909216919091179055565b600061208d4361447a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806135a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661359a600080516020615295833981519152546001600160a01b031690565b6001600160a01b031614155b156135c45760405163703e46dd60e11b815260040160405180910390fd5b565b60008051602061527583398151915261114581612ae4565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613638575060408051601f3d908101601f1916820190925261363591810190614f4e565b60015b6136575781604051634c9c8ce360e01b8152600401610f899190614b27565b600080516020615295833981519152811461368857604051632a87526960e21b815260048101829052602401610f89565b610ff483836144b1565b600061369c612ac0565b600781015460408051918252602082018590529192507fc0d3753bc89284345726d88cd5c82025ebedac4070cdbc551a0ba27b5180a637910160405180910390a160070155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135c45760405163703e46dd60e11b815260040160405180910390fd5b6000613736612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63210a4e1282600401858561376188612af1565b6040518563ffffffff1660e01b8152600401612ba59493929190614fac565b600061378a6138f1565b90507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc181600001836040516137c0929190615181565b60405180910390a180610ff4838261500f565b60006137dd612ac0565b90506137e883612af1565b6138085760405163018f58af60e31b815260048101849052602401610f89565b6000828152600582016020526040902054831461383857604051632469757560e11b815260040160405180910390fd5b60006138448484613ad8565b905061384f84612092565b158061385f575061385f8461195b565b1561386a5750505050565b613872613b9a565b8110156138845761388284613ef9565b505b506000918252600c01602052604081205550565b60006138a2612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__633895ef4782600301858561330088612af1565b7fb5b8d618af1ffb8d5bcc4bd23f445ba34ed08d7a16d1e1b5411cfbe7913e590090565b7f83b9a7e51f394efa93107c3888716138908bbbe611dfc86afa3639a82644110090565b61391d614787565b61392682612af1565b6139465760405163018f58af60e31b815260048101839052602401610f89565b6000613950613341565b90508060000160008481526020019081526020016000206040518060600160405290816000820154815260200160018201805461398c90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546139b890614ef6565b8015613a055780601f106139da57610100808354040283529160200191613a05565b820191906000526020600020905b8154815290600101906020018083116139e857829003601f168201915b50505050508152602001600282015481525050915050919050565b6000613a2a612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__636f3580bc82858561330082612af1565b6000613a5c612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63a7303c9c826002018585612ec788612af1565b6000613a91612ac0565b600d81015460408051918252602082018590529192507f98eaabfe135a9c40c420208962bf81e7926b4d6df3e23502164c0554b7b35224910160405180910390a1600d0155565b600080613ae3612ac0565b600f8101546040516306c7aa3760e31b81526003830160048201526005830160248201526002830160448201526008830160648201526001600160a01b03909116608482015260a4810186905260c4810185905290915073__$3595fb81bb2992837332c28d269a7eece2$__9063363d51b89060e401602060405180830381865af4158015613b76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614f4e565b600080613ba5612ac0565b6007015492915050565b6000613bb9612ac0565b9050613bc48261180c565b613c3d57613bd182614507565b600b810154604051630399a2ab60e21b81526001600160a01b0390911690630e668aac90613c069085906001906004016151a6565b600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50505050613cd0565b613c4682612092565b613cd057613c55826001612b10565b600b810154600083815260098301602052604090819020549051630399a2ab60e21b81526001600160a01b0390921691630e668aac91613c9d91869160ff16906004016151a6565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505050505b613cd982612545565b15613ce957613ce9826001614430565b600091825260040160205260409020805465ffffffffffff19169055565b80546000908015613d4557613d2f83613d216001846151d8565b600091825260209091200190565b54600160301b90046001600160d01b0316611572565b60009392505050565b6000613d58612df8565b600881015490915073__$acf64a28289e8f3f46392e24e4d9742041$__90633be9b7f290600684019060078501906001600160a01b03168787613d9a82612af1565b6040516001600160e01b031960e089901b168152600481019690965260248601949094526001600160a01b0392831660448601526064850191909152166084830152151560a4820152600360c482015260e401612ba5565b6000613dfc612df8565b600881015490915073__$acf64a28289e8f3f46392e24e4d9742041$__90638312528490600684019060078501906001600160a01b03168787613e3e82612af1565b6040516001600160e01b031960e089901b168152600481019690965260248601949094526001600160a01b0392831660448601526064850191909152166084830152151560a482015260c401612ba5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b613ebb614586565b612aee816145ab565b6000613ece612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__6338532ebb82600201858561330088612af1565b600080613f04612ac0565b600b810154600682015491925060009173__$3595fb81bb2992837332c28d269a7eece2$__91633e15ac6f9160048601916009870191879160018301916001600160a01b039091169065ffffffffffff16613f5e8c612545565b613f66612083565b8d613f708f612092565b6040516001600160e01b031960e08d901b168152600481019a909a5260248a0198909852604489019690965260648801949094526001600160a01b03909216608487015265ffffffffffff90811660a487015290151560c48601521660e4840152610104830152151561012482015261014401602060405180830381865af4158015614000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140249190614da7565b90508061157257611572846000612b10565b6001600160a01b0381166140985760405162461bcd60e51b8152602060048201526024808201527f566542657474657250617373706f727420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f89565b806140a1612ac0565b600b0180546001600160a01b0319166001600160a01b039290921691909117905550565b82516060908381116140ea57604051635eb538c960e11b815260040160405180910390fd5b60006140f684866151eb565b9050818111156141035750805b600061410f86836151d8565b6001600160401b03811115614126576141266149e2565b60405190808252806020026020018201604052801561415f57816020015b61414c614787565b8152602001906001900390816141445790505b509050855b828110156142835788600089838151811061418157614181614f67565b60200260200101518152602001908152602001600020604051806060016040529081600082015481526020016001820180546141bc90614ef6565b80601f01602080910402602001604051908101604052809291908181526020018280546141e890614ef6565b80156142355780601f1061420a57610100808354040283529160200191614235565b820191906000526020600020905b81548152906001019060200180831161421857829003601f168201915b5050505050815260200160028201548152505082888361425591906151d8565b8151811061426557614265614f67565b6020026020010181905250808061427b90614f93565b915050614164565b50979650505050505050565b6000614299612df8565b90506001600160a01b03821661430b5760405162461bcd60e51b815260206004820152603160248201527f58324561726e417070733a20496e76616c69642078324561726e43726561746f60448201527072436f6e7472616374206164647265737360781b6064820152608401610f89565b60080180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166143845760405162461bcd60e51b815260206004820181905260248201527f5374617267617465204e465420616464726573732063616e6e6f7420626520306044820152606401610f89565b8061438d612ac0565b600f0180546001600160a01b0319166001600160a01b039290921691909117905550565b60006143bb612df8565b905073__$acf64a28289e8f3f46392e24e4d9742041$__63850586028260050185856143e688612af1565b6040518563ffffffff1660e01b8152600401612ba594939291906151fe565b61440f828261204d565b61114557808260405163e2517d3f60e01b8152600401610f89929190614edd565b61443a8282612bda565b817f39ed358ca65699fee4083beb84f3d91ce2201bb0c89859317fc5be02231609ed8260405161446e911515815260200190565b60405180910390a25050565b600065ffffffffffff8211156144ad576040516306dfcc6560e41b81526030600482015260248101839052604401610f89565b5090565b6144ba826145bc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156144ff57610ff48282614618565b61114561468e565b6000614511613341565b600083815260208281526040822042600290910155600180840180548083018255908452919092200184905590915061454b908390612b10565b816000805160206152b5833981519152614564846111db565b60008581526020859052604090819020905161446e9291600190810191615230565b61458e6146ad565b6135c457604051631afcd79f60e31b815260040160405180910390fd5b6145b3614586565b612aee8161432e565b806001600160a01b03163b6000036145e95780604051634c9c8ce360e01b8152600401610f899190614b27565b60008051602061529583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516146359190614df3565b600060405180830381855af49150503d8060008114614670576040519150601f19603f3d011682016040523d82523d6000602084013e614675565b606091505b50915091506146858583836146c7565b95945050505050565b34156135c45760405163b398979f60e01b815260040160405180910390fd5b60006146b7613e8f565b54600160401b900460ff16919050565b6060826146dc576146d78261471a565b611572565b81511580156146f357506001600160a01b0384163b155b156147135783604051639996b31560e01b8152600401610f899190614b27565b5092915050565b80511561472a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060c001604052806000801916815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000151581525090565b60405180606001604052806000801916815260200160608152602001600081525090565b6000602082840312156147bd57600080fd5b81356001600160e01b03198116811461157257600080fd5b60005b838110156147f05781810151838201526020016147d8565b50506000910152565b600081518084526148118160208601602086016147d5565b601f01601f19169290920160200192915050565b8051825260018060a01b0360208201511660208301526000604082015160c0604085015261485660c08501826147f9565b90506060830151848203606086015261486f82826147f9565b9150506080830151608085015260a0830151151560a08501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148e757603f198886030184526148d5858351614825565b945092850192908501906001016148b9565b5092979650505050505050565b8015158114612aee57600080fd5b6000806040838503121561491557600080fd5b823591506020830135614927816148f4565b809150509250929050565b60006020828403121561494457600080fd5b5035919050565b6001600160a01b0381168114612aee57600080fd5b6000806040838503121561497357600080fd5b8235915060208301356149278161494b565b60006020828403121561499757600080fd5b813565ffffffffffff8116811461157257600080fd5b600060e082840312156149bf57600080fd5b50919050565b6000602082840312156149d757600080fd5b81356115728161494b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614a2057614a206149e2565b604052919050565b60006001600160401b03831115614a4157614a416149e2565b614a54601f8401601f19166020016149f8565b9050828152838383011115614a6857600080fd5b828260208301376000602084830101529392505050565b600082601f830112614a9057600080fd5b61157283833560208501614a28565b60008060008060808587031215614ab557600080fd5b8435614ac08161494b565b93506020850135614ad08161494b565b925060408501356001600160401b0380821115614aec57600080fd5b614af888838901614a7f565b93506060870135915080821115614b0e57600080fd5b50614b1b87828801614a7f565b91505092959194509250565b6001600160a01b0391909116815260200190565b60208152600061157260208301846147f9565b600060208284031215614b6057600080fd5b81356001600160401b03811115614b7657600080fd5b6110d084828501614a7f565b6020808252825182820181905260009190848201906040850190845b81811015614bc35783516001600160a01b031683529284019291840191600101614b9e565b50909695505050505050565b60008060408385031215614be257600080fd5b8235614bed8161494b565b915060208301356001600160401b03811115614c0857600080fd5b8301601f81018513614c1957600080fd5b614c2885823560208401614a28565b9150509250929050565b60008060408385031215614c4557600080fd5b50508035926020909101359150565b6020815260006115726020830184614825565b60ff81168114612aee57600080fd5b600060208284031215614c8857600080fd5b813561157281614c67565b6020808252825182820181905260009190848201906040850190845b81811015614bc357835183529284019291840191600101614caf565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614d3e57603f19898403018552815160608151855288820151818a870152614d20828701826147f9565b92890151958901959095525094870194925090860190600101614cf2565b509098975050505050505050565b60008060408385031215614d5f57600080fd5b8235915060208301356001600160401b03811115614d7c57600080fd5b614c2885828601614a7f565b92835260208301919091526001600160a01b0316604082015260600190565b600060208284031215614db957600080fd5b8151611572816148f4565b60008351614dd68184602088016147d5565b835190830190614dea8183602088016147d5565b01949350505050565b60008251614e058184602087016147d5565b9190910192915050565b600060208284031215614e2157600080fd5b815161157281614c67565b60006020808385031215614e3f57600080fd5b82516001600160401b0380821115614e5657600080fd5b818501915085601f830112614e6a57600080fd5b815181811115614e7c57614e7c6149e2565b8060051b9150614e8d8483016149f8565b8181529183018401918481019088841115614ea757600080fd5b938501935b83851015614ed15784519250614ec18361494b565b8282529385019390850190614eac565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600181811c90821680614f0a57607f821691505b6020821081036149bf57634e487b7160e01b600052602260045260246000fd5b93845260208401929092526001600160a01b03166040830152606082015260800190565b600060208284031215614f6057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614fa557614fa5614f7d565b5060010190565b938452602084019290925260408301521515606082015260800190565b601f821115610ff457600081815260208120601f850160051c81016020861015614ff05750805b601f850160051c820191505b81811015612cbc57828155600101614ffc565b81516001600160401b03811115615028576150286149e2565b61503c816150368454614ef6565b84614fc9565b602080601f83116001811461507157600084156150595750858301515b600019600386901b1c1916600185901b178555612cbc565b600085815260208120601f198616915b828110156150a057888601518255948401946001909101908401615081565b50858210156150be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03841681526060602082018190526000906150f2908301856147f9565b90508215156040830152949350505050565b6000815461511181614ef6565b80855260206001838116801561512e576001811461514857615176565b60ff1985168884015283151560051b880183019550615176565b866000528260002060005b8581101561516e5781548a8201860152908301908401615153565b890184019650505b505050505092915050565b6040815260006151946040830185615104565b828103602084015261468581856147f9565b82815260408101600483106151cb57634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b81810381811115610f1457610f14614f7d565b80820180821115610f1457610f14614f7d565b84815283602082015260806040820152600061521d60808301856147f9565b9050821515606083015295945050505050565b6001600160a01b03841681526060602082018190526000906150f29083018561510456fe71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc181c8615e49dc4eaed218e1d225e4a34a0fb364fc70601a191573daa19d57edaa264697066735822122079094ac6b4a7a59967c8bb6314ea0b68544bf0690f4c3c1e43490d2bda36dbc964736f6c63430008140033",
  "linkReferences": {
    "contracts/deprecated/V7/x-2-earn-apps/libraries/AdministrationUtilsV7.sol": {
      "AdministrationUtilsV7": [
        {
          "length": 20,
          "start": 4452
        },
        {
          "length": 20,
          "start": 4601
        },
        {
          "length": 20,
          "start": 9488
        },
        {
          "length": 20,
          "start": 11608
        },
        {
          "length": 20,
          "start": 11766
        },
        {
          "length": 20,
          "start": 12196
        },
        {
          "length": 20,
          "start": 13175
        },
        {
          "length": 20,
          "start": 13277
        },
        {
          "length": 20,
          "start": 14398
        },
        {
          "length": 20,
          "start": 14762
        },
        {
          "length": 20,
          "start": 15154
        },
        {
          "length": 20,
          "start": 15204
        },
        {
          "length": 20,
          "start": 15974
        },
        {
          "length": 20,
          "start": 16138
        },
        {
          "length": 20,
          "start": 16342
        },
        {
          "length": 20,
          "start": 17603
        }
      ]
    },
    "contracts/deprecated/V7/x-2-earn-apps/libraries/EndorsementUtilsV7.sol": {
      "EndorsementUtilsV7": [
        {
          "length": 20,
          "start": 5652
        },
        {
          "length": 20,
          "start": 7276
        },
        {
          "length": 20,
          "start": 9926
        },
        {
          "length": 20,
          "start": 11514
        },
        {
          "length": 20,
          "start": 12413
        },
        {
          "length": 20,
          "start": 15424
        },
        {
          "length": 20,
          "start": 16410
        }
      ]
    },
    "contracts/deprecated/V7/x-2-earn-apps/libraries/VoteEligibilityUtilsV7.sol": {
      "VoteEligibilityUtilsV7": [
        {
          "length": 20,
          "start": 10035
        },
        {
          "length": 20,
          "start": 11298
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/deprecated/V7/x-2-earn-apps/libraries/AdministrationUtilsV7.sol": {
      "AdministrationUtilsV7": [
        {
          "length": 20,
          "start": 4192
        },
        {
          "length": 20,
          "start": 4341
        },
        {
          "length": 20,
          "start": 9228
        },
        {
          "length": 20,
          "start": 11348
        },
        {
          "length": 20,
          "start": 11506
        },
        {
          "length": 20,
          "start": 11936
        },
        {
          "length": 20,
          "start": 12915
        },
        {
          "length": 20,
          "start": 13017
        },
        {
          "length": 20,
          "start": 14138
        },
        {
          "length": 20,
          "start": 14502
        },
        {
          "length": 20,
          "start": 14894
        },
        {
          "length": 20,
          "start": 14944
        },
        {
          "length": 20,
          "start": 15714
        },
        {
          "length": 20,
          "start": 15878
        },
        {
          "length": 20,
          "start": 16082
        },
        {
          "length": 20,
          "start": 17343
        }
      ]
    },
    "contracts/deprecated/V7/x-2-earn-apps/libraries/EndorsementUtilsV7.sol": {
      "EndorsementUtilsV7": [
        {
          "length": 20,
          "start": 5392
        },
        {
          "length": 20,
          "start": 7016
        },
        {
          "length": 20,
          "start": 9666
        },
        {
          "length": 20,
          "start": 11254
        },
        {
          "length": 20,
          "start": 12153
        },
        {
          "length": 20,
          "start": 15164
        },
        {
          "length": 20,
          "start": 16150
        }
      ]
    },
    "contracts/deprecated/V7/x-2-earn-apps/libraries/VoteEligibilityUtilsV7.sol": {
      "VoteEligibilityUtilsV7": [
        {
          "length": 20,
          "start": 9775
        },
        {
          "length": 20,
          "start": 11038
        }
      ]
    }
  }
}
