{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockVenusERC4626",
  "sourceName": "contracts/test/Mocks/MockVenusERC4626.sol",
  "abi": [
    {
      "inputs": [],
      "name": "ERC4626__DepositMoreThanMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC4626__MintMoreThanMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC4626__RedeemMoreThanMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC4626__WithdrawMoreThanMax",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "operation",
          "type": "string"
        }
      ],
      "name": "ERC4626__ZeroAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loopsLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requiredLoops",
          "type": "uint256"
        }
      ],
      "name": "MaxLoopsLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "calledContract",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        }
      ],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "VenusERC4626__VenusError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewardToken",
          "type": "address"
        }
      ],
      "name": "ClaimRewards",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLoopsLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newmaxLoopsLimit",
          "type": "uint256"
        }
      ],
      "name": "MaxLoopsLimitUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAccessControlManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAccessControlManager",
          "type": "address"
        }
      ],
      "name": "NewAccessControlManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldRecipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "RewardRecipientUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SweepToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accessControlManager",
      "outputs": [
        {
          "internalType": "contract IAccessControlManagerV8",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "comptroller",
      "outputs": [
        {
          "internalType": "contract IComptroller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "convertToAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "convertToShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rewardRecipient_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "loopsLimit_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "vaultOwner_",
          "type": "address"
        }
      ],
      "name": "initialize2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLoopsLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "setAccessControlManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "setAccountBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxDeposit",
          "type": "uint256"
        }
      ],
      "name": "setMaxDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loopsLimit",
          "type": "uint256"
        }
      ],
      "name": "setMaxLoopsLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxMint",
          "type": "uint256"
        }
      ],
      "name": "setMaxMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxRedeem",
          "type": "uint256"
        }
      ],
      "name": "setMaxRedeem",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxWithdraw",
          "type": "uint256"
        }
      ],
      "name": "setMaxWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRewardRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_totalAssets",
          "type": "uint256"
        }
      ],
      "name": "setTotalAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_totalSupply",
          "type": "uint256"
        }
      ],
      "name": "setTotalSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vToken",
      "outputs": [
        {
          "internalType": "contract VToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b610105565b600054610100900460ff161561004f5760405162461bcd60e51b8152600401610046906100a5565b60405180910390fd5b60005460ff908116146100a3576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161009a916100f6565b60405180910390a15b565b602080825281016100f081602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100f0565b6143d3806101146000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806379ba50971161019d578063be26317e116100e9578063dcd9bb42116100a2578063e521136f1161007c578063e521136f14610690578063ef8b30f714610619578063f2fde38b146106a3578063f7ea7a3d146106b657600080fd5b8063dcd9bb4214610658578063dd62ed3e1461066c578063e30c39781461067f57600080fd5b8063be26317e146105e6578063c4d66de8146105f0578063c63d75b614610603578063c6e6f59214610619578063ce96cb771461062c578063d905777e1461064257600080fd5b8063a457c2d711610156578063b460af9411610130578063b460af941461059b578063b4a0bdf3146105ae578063ba087652146105bf578063bb371fdd146105d257600080fd5b8063a457c2d714610562578063a9059cbb14610575578063b3d7f6b91461058857600080fd5b806379ba50971461050757806380d45a2d1461050f5780638da5cb5b1461052257806394bf804d1461053357806395d89b41146105465780639bb1a99c1461054e57600080fd5b8063313ce5671161025c57806346ddb7db116102155780635fe3b567116101ef5780635fe3b567146104a25780636e553f65146104c357806370a08231146104d6578063715018a6146104ff57600080fd5b806346ddb7db146104635780634cdad50614610326578063547520fe1461048e57600080fd5b8063313ce567146103f9578063372500ab1461040e57806338d52e0f146104165780633950935114610427578063402d267d1461043a57806341e11a5a1461045057600080fd5b80631765b313116102ae5780631765b3131461038157806317f333401461039557806318160ddd146103b65780631be19560146103bf57806320f4af43146103d257806323b872dd146103e657600080fd5b806301e1d114146102f657806306fdde031461031157806307a2d13a14610326578063095ea7b3146103395780630a28a477146103595780630e32cb861461036c575b600080fd5b610195545b6040516103089190612f7b565b60405180910390f35b6103196106ca565b6040516103089190612fdf565b6102fb610334366004613008565b61075c565b61034c61034736600461304e565b61076f565b6040516103089190613093565b6102fb610367366004613008565b610787565b61037f61037a3660046130a1565b610794565b005b61037f61038f366004613008565b61019555565b610193546103a9906001600160a01b031681565b60405161030891906130cb565b61019a546102fb565b61037f6103cd3660046130f8565b6107a8565b61037f6103e0366004613008565b61019955565b61034c6103f4366004613119565b61089a565b6104016108c0565b6040516103089190613172565b61037f6108e6565b6065546001600160a01b03166103a9565b61034c61043536600461304e565b610be8565b6102fb6104483660046130a1565b506101965490565b61037f61045e366004613180565b610c0a565b61037f61047136600461304e565b6001600160a01b0390911660009081526101946020526040902055565b61037f61049c366004613008565b61019855565b610192546104b6906001600160a01b031681565b6040516103089190613226565b6102fb6104d1366004613234565b610cdc565b6102fb6104e43660046130a1565b6001600160a01b031660009081526033602052604090205490565b61037f610e1e565b61037f610e32565b61037f61051d366004613008565b610e67565b6097546001600160a01b03166103a9565b6102fb610541366004613234565b610eae565b610319610fc8565b610191546104b6906001600160a01b031681565b61034c61057036600461304e565b610fd7565b61034c61058336600461304e565b61101f565b6102fb610596366004613008565b61102d565b6102fb6105a9366004613267565b61103a565b60fb546001600160a01b03166104b6565b6102fb6105cd366004613267565b611147565b61037f6105e0366004613008565b61019655565b6102fb61012d5481565b61037f6105fe3660046130a1565b61126b565b6102fb6106113660046130a1565b506101985490565b6102fb610627366004613008565b61146f565b6102fb61063a3660046130a1565b506101975490565b6102fb6106503660046130a1565b506101995490565b61037f610666366004613008565b61019755565b6102fb61067a3660046132ad565b61147c565b60c9546001600160a01b03166103a9565b61037f61069e3660046130a1565b6114a7565b61037f6106b13660046130a1565b6114ee565b61037f6106c4366004613008565b61019a55565b6060603680546106d9906132e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610705906132e5565b80156107525780601f1061072757610100808354040283529160200191610752565b820191906000526020600020905b81548152906001019060200180831161073557829003601f168201915b5050505050905090565b600061076982600061155f565b92915050565b60003361077d8185856115a3565b5060019392505050565b600061076982600161164a565b61079c61167f565b6107a5816116a9565b50565b6107b061167f565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107df9030906004016130cb565b602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610820919061331c565b9050801561089657600061083c6097546001600160a01b031690565b9050610849838284611722565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161088c9190612f7b565b60405180910390a3505b5050565b6000336108a885828561177d565b6108b38585856117c7565b60019150505b9392505050565b60006108ca6118b7565b6065546108e19190600160a01b900460ff16613353565b905090565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610945573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096d9190810190613482565b90506109798151611937565b60005b8151811015610be1576000828281518110610999576109996134bd565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0791906134d3565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a4157610a416134bd565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a7d9030908590600401613551565b600060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610ade9030906004016130cb565b602060405180830381865afa158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f919061331c565b90508015610b9057610b32838883611722565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b63908c9087906002906004016135b5565b600060405180830381600087803b158015610b7d57600080fd5b505af1925050508015610b8e575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610bc99190612f7b565b60405180910390a250506001909201915061097c9050565b5050505050565b60003361077d818585610bfb838361147c565b610c0591906135dd565b6115a3565b600054600290610100900460ff16158015610c2c575060005460ff8083169116105b610c515760405162461bcd60e51b8152600401610c489061363e565b60405180910390fd5b6000805461ffff191660ff831617610100179055610c6e82611962565b610c7785611989565b610c80836119c1565b610c8984611a1e565b610c9282611a85565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ccd908390613172565b60405180910390a15050505050565b6000610ce6611a9e565b610cef82611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061331c565b5082600003610d8b576040516304dd32c560e11b8152600401610c489061366f565b61019654831115610daf576040516326ac6ee160e01b815260040160405180910390fd5b6000610dba8461146f565b905080600003610ddd576040516304dd32c560e11b8152600401610c489061366f565b6000610de961019a5490565b9050610df733858785611ac9565b600081610e0461019a5490565b610e0e919061367f565b9350505050610769600161015f55565b610e2661167f565b610e306000611a85565b565b60c95433906001600160a01b03168114610e5e5760405162461bcd60e51b8152600401610c48906136d8565b6107a581611a85565b610ea56040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250611e70565b6107a5816119c1565b6000610eb8611a9e565b610ec182611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b919061331c565b5082600003610f5d576040516304dd32c560e11b8152600401610c4890613703565b61019854831115610f81576040516340868f7960e01b815260040160405180910390fd5b6000610f8c8461102d565b905080600003610faf576040516304dd32c560e11b8152600401610c4890613703565b610fbb33848387611ac9565b9050610769600161015f55565b6060603780546106d9906132e5565b60003381610fe5828661147c565b9050838110156110075760405162461bcd60e51b8152600401610c4890613755565b61101482868684036115a3565b506001949350505050565b60003361077d8185856117c7565b600061076982600161155f565b6000611044611a9e565b61104d83611962565b61105682611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061331c565b50836000036110f2576040516304dd32c560e11b8152600401610c4890613784565b610197548411156111165760405163e9ed951560e01b815260040160405180910390fd5b60008061112286611f0a565b915091506111396111303390565b868685856121ff565b9150506108b9600161015f55565b6000611151611a9e565b61115a83611962565b61116382611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd919061331c565b50836000036111ff576040516304dd32c560e11b8152600401610c48906137b1565b6101995484111561122357604051638890247960e01b815260040160405180910390fd5b600061122e856122a2565b905080600003611251576040516304dd32c560e11b8152600401610c48906137b1565b61125e33858584896121ff565b90506108b9600161015f55565b600054610100900460ff161580801561128b5750600054600160ff909116105b806112a55750303b1580156112a5575060005460ff166001145b6112c15760405162461bcd60e51b8152600401610c489061363e565b6000805460ff1916600117905580156112e4576000805461ff0019166101001790555b6112ed82611962565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906134d3565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906137cc565b905061140f611401826124f1565b61140a8361257f565b6125f7565b61141881612628565b611420612658565b508015610896576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061146390600190613801565b60405180910390a15050565b600061076982600061164a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6114e56040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250611e70565b6107a581611a1e565b6114f661167f565b60c980546001600160a01b0383166001600160a01b031990911681179091556115276097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006108b961156e6101955490565b6115799060016135dd565b6115816118b7565b61158c90600a61391d565b61019a5461159a91906135dd565b85919085612687565b6001600160a01b0383166115c95760405162461bcd60e51b8152600401610c4890613973565b6001600160a01b0382166115ef5760405162461bcd60e51b8152600401610c48906139c2565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088c908590612f7b565b60006108b96116576118b7565b61166290600a61391d565b61019a5461167091906135dd565b6101955461159a9060016135dd565b6097546001600160a01b03163314610e305760405162461bcd60e51b8152600401610c4890613a04565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610c4890613a56565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906114639083908590613a66565b6117788363a9059cbb60e01b8484604051602401611741929190613a81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e6565b505050565b6000611789848461147c565b905060001981146117c157818110156117b45760405162461bcd60e51b8152600401610c4890613ad0565b6117c184848484036115a3565b50505050565b6001600160a01b0383166117ed5760405162461bcd60e51b8152600401610c4890613b22565b6001600160a01b0382166118135760405162461bcd60e51b8152600401610c4890613b72565b6001600160a01b0383166000908152603360205260409020548181101561184c5760405162461bcd60e51b8152600401610c4890613bc5565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118aa908690612f7b565b60405180910390a36117c1565b60006118cb6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190613be9565b6108e1906012613c0a565b61012d548111156107a55761012d548160405163792bfb1b60e11b8152600401610c48929190613c27565b6001600160a01b0381166107a5576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff166119b05760405162461bcd60e51b8152600401610c4890613c7d565b6119b8612778565b6107a5816127a7565b61012d5481116119e35760405162461bcd60e51b8152600401610c4890613ccc565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa906114639083908590613c27565b611a2781611962565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b03191690556107a5816127ce565b600261015f5403611ac15760405162461bcd60e51b8152600401610c4890613d10565b600261015f55565b6000611add6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b0891906130cb565b602060405180830381865afa158015611b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b49919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611b809030906004016130cb565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061331c565b9050611be0611bd86065546001600160a01b031690565b873087612820565b600082611bf56065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c2091906130cb565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c61919061331c565b611c6b919061367f565b9050611c7681612841565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a0823190611cac9030906004016130cb565b602060405180830381865afa158015611cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ced919061331c565b611cf7919061367f565b905080600003611d1a576040516304dd32c560e11b8152600401610c4890613d54565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061331c565b611da79084613d64565b611db19190613d99565b90506000611e03611dc06118b7565b611dcb90600a61391d565b61019a54611dd991906135dd565b83611de46101955490565b611def9060016135dd565b611df9919061367f565b8491906000612687565b9050611e0f898261290d565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a84604051611e54929190613c27565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90611ea39033908690600401613dad565b602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613de0565b90508061089657333083604051634a3fa29360e01b8152600401610c4893929190613e01565b6000806000611f216065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f5191906130cb565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f92919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611fc99030906004016130cb565b602060405180830381865afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a919061331c565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612041908a90600401612f7b565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061331c565b905080156120a75780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906120d59030906004016130cb565b602060405180830381865afa1580156120f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612116919061331c565b612120919061367f565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a08231906121579030906004016130cb565b602060405180830381865afa158015612174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612198919061331c565b6121a2908461367f565b9050806000036121c5576040516304dd32c560e11b8152600401610c4890613e69565b6121f36121d06118b7565b6121db90600a61391d565b61019a546121e991906135dd565b8290856001612687565b95505050505050915091565b826001600160a01b0316856001600160a01b0316146122235761222383868361177d565b61222d838261295e565b606554612244906001600160a01b03168584611722565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051612293929190613c27565b60405180910390a45050505050565b6000806122b76065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122e791906130cb565b602060405180830381865afa158015612304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612328919061331c565b610191546040516370a0823160e01b81529192506000916123cd916001600160a01b0316906370a08231906123619030906004016130cb565b602060405180830381865afa15801561237e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a2919061331c565b6123aa6118b7565b6123b590600a61391d565b61019a546123c391906135dd565b8791906000612687565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a7590612404908590600401612f7b565b6020604051808303816000875af1158015612423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612447919061331c565b9050801561246a5780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906124999030906004016130cb565b602060405180830381865afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da919061331c565b90506124e6848261367f565b979650505050505050565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190613f04565b6040516020016125699190613f61565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156125bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125e79190810190613f04565b6040516020016125699190613f90565b600054610100900460ff1661261e5760405162461bcd60e51b8152600401610c4890613c7d565b61089682826129af565b600054610100900460ff1661264f5760405162461bcd60e51b8152600401610c4890613c7d565b6107a5816129ef565b600054610100900460ff1661267f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612a74565b600080612695868686612a9b565b905060018360028111156126ab576126ab613571565b1480156126c85750600084806126c3576126c3613d83565b868809115b156126db576126d86001826135dd565b90505b90505b949350505050565b600061273b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5d9092919063ffffffff16565b905080516000148061275c57508080602001905181019061275c9190613de0565b6117785760405162461bcd60e51b8152600401610c4890613fed565b600054610100900460ff1661279f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612b6c565b600054610100900460ff1661079c5760405162461bcd60e51b8152600401610c4890613c7d565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117c1846323b872dd60e01b85858560405160240161174193929190613ffd565b61019154612875906001600160a01b0316826128656065546001600160a01b031690565b6001600160a01b03169190612b9c565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d68906128a7908590600401612f7b565b6020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea919061331c565b905080156108965780604051630864657760e21b8152600401610c489190612f7b565b8061019a600082825461292091906135dd565b90915550506001600160a01b038216600090815261019460205260408120805483929061294e9084906135dd565b9091555061089690508282612c50565b8061019a6000828254612971919061367f565b90915550506001600160a01b038216600090815261019460205260408120805483929061299f90849061367f565b9091555061089690508282612ce6565b600054610100900460ff166129d65760405162461bcd60e51b8152600401610c4890613c7d565b60366129e283826140b6565b50603761177882826140b6565b600054610100900460ff16612a165760405162461bcd60e51b8152600401610c4890613c7d565b600080612a2283612d9d565b9150915081612a32576012612a34565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16611e685760405162461bcd60e51b8152600401610c4890613c7d565b6000808060001985870985870292508281108382030391505080600003612ad557838281612acb57612acb613d83565b04925050506108b9565b808411612af45760405162461bcd60e51b8152600401610c48906141a6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606126de8484600085612e79565b600054610100900460ff16612b935760405162461bcd60e51b8152600401610c4890613c7d565b610e3033611a85565b801580612c155750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bd29030908690600401613a66565b602060405180830381865afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c13919061331c565b155b612c315760405162461bcd60e51b8152600401610c4890614209565b6117788363095ea7b360e01b8484604051602401611741929190613a81565b6001600160a01b038216612c765760405162461bcd60e51b8152600401610c489061424d565b8060356000828254612c8891906135dd565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cda908590612f7b565b60405180910390a35050565b6001600160a01b038216612d0c5760405162461bcd60e51b8152600401610c489061429b565b6001600160a01b03821660009081526033602052604090205481811015612d455760405162461bcd60e51b8152600401610c48906142ea565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088c908690612f7b565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691612de4916142fa565b600060405180830381855afa9150503d8060008114612e1f576040519150601f19603f3d011682016040523d82523d6000602084013e612e24565b606091505b5091509150818015612e3857506020815110155b15612e6c57600081806020019051810190612e53919061331c565b905060ff8111612e6a576001969095509350505050565b505b5060009485945092505050565b606082471015612e9b5760405162461bcd60e51b8152600401610c4890614349565b600080866001600160a01b03168587604051612eb791906142fa565b60006040518083038185875af1925050503d8060008114612ef4576040519150601f19603f3d011682016040523d82523d6000602084013e612ef9565b606091505b50915091506124e68783838760608315612f44578251600003612f3d576001600160a01b0385163b612f3d5760405162461bcd60e51b8152600401610c489061438d565b50816126de565b6126de8383815115612f595781518083602001fd5b8060405162461bcd60e51b8152600401610c489190612fdf565b805b82525050565b602081016107698284612f73565b60005b83811015612fa4578181015183820152602001612f8c565b50506000910152565b6000612fb7825190565b808452602084019350612fce818560208601612f89565b601f01601f19169290920192915050565b602080825281016108b98184612fad565b805b81146107a557600080fd5b803561076981612ff0565b60006020828403121561301d5761301d600080fd5b60006126de8484612ffd565b60006001600160a01b038216610769565b612ff281613029565b80356107698161303a565b6000806040838503121561306457613064600080fd5b60006130708585613043565b925050602061308185828601612ffd565b9150509250929050565b801515612f75565b60208101610769828461308b565b6000602082840312156130b6576130b6600080fd5b60006126de8484613043565b612f7581613029565b6020810161076982846130c2565b600061076982613029565b612ff2816130d9565b8035610769816130e4565b60006020828403121561310d5761310d600080fd5b60006126de84846130ed565b60008060006060848603121561313157613131600080fd5b600061313d8686613043565b935050602061314e86828701613043565b925050604061315f86828701612ffd565b9150509250925092565b60ff8116612f75565b602081016107698284613169565b6000806000806080858703121561319957613199600080fd5b60006131a58787613043565b94505060206131b687828801613043565b93505060406131c787828801612ffd565b92505060606131d887828801613043565b91505092959194509250565b60006107696001600160a01b0383166131fb565b90565b6001600160a01b031690565b6000610769826131e4565b600061076982613207565b612f7581613212565b60208101610769828461321d565b6000806040838503121561324a5761324a600080fd5b60006132568585612ffd565b925050602061308185828601613043565b60008060006060848603121561327f5761327f600080fd5b600061328b8686612ffd565b935050602061329c86828701613043565b925050604061315f86828701613043565b600080604083850312156132c3576132c3600080fd5b60006132568585613043565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806132f957607f821691505b60208210810361330b5761330b6132cf565b50919050565b805161076981612ff0565b60006020828403121561333157613331600080fd5b60006126de8484613311565b634e487b7160e01b600052601160045260246000fd5b60ff9182169190811690828201908111156107695761076961333d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156133ac576133ac613370565b6040525050565b60006133be60405190565b90506133ca8282613386565b919050565b600067ffffffffffffffff8211156133e9576133e9613370565b5060209081020190565b8051610769816130e4565b600061341161340c846133cf565b6133b3565b8381529050602080820190840283018581111561343057613430600080fd5b835b81811015613454578061344588826133f3565b84525060209283019201613432565b5050509392505050565b600082601f83011261347257613472600080fd5b81516126de8482602086016133fe565b60006020828403121561349757613497600080fd5b815167ffffffffffffffff8111156134b1576134b1600080fd5b6126de8482850161345e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e8576134e8600080fd5b60006126de84846133f3565b6000613500838361321d565b505060200190565b6000613512825190565b80845260209384019383018060005b8381101561354657815161353588826134f4565b975060208301925050600101613521565b509495945050505050565b6040810161355f82856130c2565b81810360208301526126de8184613508565b634e487b7160e01b600052602160045260246000fd5b600481106107a5576107a5613571565b806133ca81613587565b600061076982613597565b612f75816135a1565b606081016135c382866130c2565b6135d060208301856130c2565b6126de60408301846135ac565b808201808211156107695761076961333d565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610769816135f0565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b602080825281016107698161364e565b818103818111156107695761076961333d565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613637565b6020808252810161076981613692565b60048152600060208201631b5a5b9d60e21b81529150613668565b60208082528101610769816136e8565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613637565b6020808252810161076981613713565b6008815260006020820167776974686472617760c01b81529150613668565b6020808252810161076981613765565b600681526000602082016572656465656d60d01b81529150613668565b6020808252810161076981613794565b80516107698161303a565b6000602082840312156137e1576137e1600080fd5b60006126de84846137c1565b600060ff8216610769565b612f75816137ed565b6020810161076982846137f8565b80825b600185111561384e5780860481111561382d5761382d61333d565b600185161561383b57908102905b80026138478560011c90565b9450613812565b94509492505050565b600082613866575060016108b9565b81613873575060006108b9565b81600181146138895760028114613893576138c0565b60019150506108b9565b60ff8411156138a4576138a461333d565b8360020a9150848211156138ba576138ba61333d565b506108b9565b5060208310610133831016604e8410600b84101617156138f3575081810a838111156138ee576138ee61333d565b6108b9565b613900848484600161380f565b925090508184048111156139165761391661333d565b0292915050565b600060ff831692506108b96000198484613857565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613637565b6020808252810161076981613932565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613637565b6020808252810161076981613983565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613668565b60208082528101610769816139d2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613637565b6020808252810161076981613a14565b60408101613a7482856130c2565b6108b960208301846130c2565b60408101613a8f82856130c2565b6108b96020830184612f73565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613668565b6020808252810161076981613a9c565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613637565b6020808252810161076981613ae0565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613637565b6020808252810161076981613b32565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613637565b6020808252810161076981613b82565b60ff8116612ff2565b805161076981613bd5565b600060208284031215613bfe57613bfe600080fd5b60006126de8484613bde565b60ff9182169190811690828203908111156107695761076961333d565b60408101613a8f8285612f73565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613637565b6020808252810161076981613c35565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613637565b6020808252810161076981613c8d565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613668565b6020808252810161076981613cdc565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613668565b6020808252810161076981613d20565b818102808215838204851417613d7c57613d7c61333d565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082613da857613da8613d83565b500490565b60408101613dbb82856130c2565b81810360208301526126de8184612fad565b801515612ff2565b805161076981613dcd565b600060208284031215613df557613df5600080fd5b60006126de8484613dd5565b60608101613e0f82866130c2565b613e1c60208301856130c2565b8181036040830152613e2e8184612fad565b95945050505050565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613668565b6020808252810161076981613e37565b600067ffffffffffffffff821115613e9357613e93613370565b601f19601f83011660200192915050565b6000613eb261340c84613e79565b905082815260208101848484011115613ecd57613ecd600080fd5b613ed8848285612f89565b509392505050565b600082601f830112613ef457613ef4600080fd5b81516126de848260208601613ea4565b600060208284031215613f1957613f19600080fd5b815167ffffffffffffffff811115613f3357613f33600080fd5b6126de84828501613ee0565b6000613f49825190565b613f57818560208601612f89565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b91506108b98284613f3f565b643b1a1b191b60d91b8152600060058201613f84565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613637565b6020808252810161076981613fa6565b6060810161400b82866130c2565b61401860208301856130c2565b6126de6040830184612f73565b60006107696131f88381565b61403a83614025565b815460001960089490940293841b1916921b91909117905550565b6000611778818484614031565b8181101561089657614075600082614055565b600101614062565b601f821115611778576000818152602090206020601f850104810160208510156140a45750805b610be16020601f860104830182614062565b815167ffffffffffffffff8111156140d0576140d0613370565b6140da82546132e5565b6140e582828561407d565b6020601f83116001811461411957600084156141015750858201515b600019600886021c1981166002860217865550614172565b600085815260208120601f198616915b828110156141495788850151825560209485019460019092019101614129565b868310156141655784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613668565b602080825281016107698161417a565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613637565b60208082528101610769816141b6565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613668565b6020808252810161076981614219565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613637565b602080825281016107698161425d565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613637565b60208082528101610769816142ab565b60006108b98284613f3f565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613637565b6020808252810161076981614306565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613668565b602080825281016107698161435956fea2646970667358221220c316e91d90208cb84b567b814a12c4b23c6d3f0cc08be6ce814c43c66611f4d664736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f15760003560e01c806379ba50971161019d578063be26317e116100e9578063dcd9bb42116100a2578063e521136f1161007c578063e521136f14610690578063ef8b30f714610619578063f2fde38b146106a3578063f7ea7a3d146106b657600080fd5b8063dcd9bb4214610658578063dd62ed3e1461066c578063e30c39781461067f57600080fd5b8063be26317e146105e6578063c4d66de8146105f0578063c63d75b614610603578063c6e6f59214610619578063ce96cb771461062c578063d905777e1461064257600080fd5b8063a457c2d711610156578063b460af9411610130578063b460af941461059b578063b4a0bdf3146105ae578063ba087652146105bf578063bb371fdd146105d257600080fd5b8063a457c2d714610562578063a9059cbb14610575578063b3d7f6b91461058857600080fd5b806379ba50971461050757806380d45a2d1461050f5780638da5cb5b1461052257806394bf804d1461053357806395d89b41146105465780639bb1a99c1461054e57600080fd5b8063313ce5671161025c57806346ddb7db116102155780635fe3b567116101ef5780635fe3b567146104a25780636e553f65146104c357806370a08231146104d6578063715018a6146104ff57600080fd5b806346ddb7db146104635780634cdad50614610326578063547520fe1461048e57600080fd5b8063313ce567146103f9578063372500ab1461040e57806338d52e0f146104165780633950935114610427578063402d267d1461043a57806341e11a5a1461045057600080fd5b80631765b313116102ae5780631765b3131461038157806317f333401461039557806318160ddd146103b65780631be19560146103bf57806320f4af43146103d257806323b872dd146103e657600080fd5b806301e1d114146102f657806306fdde031461031157806307a2d13a14610326578063095ea7b3146103395780630a28a477146103595780630e32cb861461036c575b600080fd5b610195545b6040516103089190612f7b565b60405180910390f35b6103196106ca565b6040516103089190612fdf565b6102fb610334366004613008565b61075c565b61034c61034736600461304e565b61076f565b6040516103089190613093565b6102fb610367366004613008565b610787565b61037f61037a3660046130a1565b610794565b005b61037f61038f366004613008565b61019555565b610193546103a9906001600160a01b031681565b60405161030891906130cb565b61019a546102fb565b61037f6103cd3660046130f8565b6107a8565b61037f6103e0366004613008565b61019955565b61034c6103f4366004613119565b61089a565b6104016108c0565b6040516103089190613172565b61037f6108e6565b6065546001600160a01b03166103a9565b61034c61043536600461304e565b610be8565b6102fb6104483660046130a1565b506101965490565b61037f61045e366004613180565b610c0a565b61037f61047136600461304e565b6001600160a01b0390911660009081526101946020526040902055565b61037f61049c366004613008565b61019855565b610192546104b6906001600160a01b031681565b6040516103089190613226565b6102fb6104d1366004613234565b610cdc565b6102fb6104e43660046130a1565b6001600160a01b031660009081526033602052604090205490565b61037f610e1e565b61037f610e32565b61037f61051d366004613008565b610e67565b6097546001600160a01b03166103a9565b6102fb610541366004613234565b610eae565b610319610fc8565b610191546104b6906001600160a01b031681565b61034c61057036600461304e565b610fd7565b61034c61058336600461304e565b61101f565b6102fb610596366004613008565b61102d565b6102fb6105a9366004613267565b61103a565b60fb546001600160a01b03166104b6565b6102fb6105cd366004613267565b611147565b61037f6105e0366004613008565b61019655565b6102fb61012d5481565b61037f6105fe3660046130a1565b61126b565b6102fb6106113660046130a1565b506101985490565b6102fb610627366004613008565b61146f565b6102fb61063a3660046130a1565b506101975490565b6102fb6106503660046130a1565b506101995490565b61037f610666366004613008565b61019755565b6102fb61067a3660046132ad565b61147c565b60c9546001600160a01b03166103a9565b61037f61069e3660046130a1565b6114a7565b61037f6106b13660046130a1565b6114ee565b61037f6106c4366004613008565b61019a55565b6060603680546106d9906132e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610705906132e5565b80156107525780601f1061072757610100808354040283529160200191610752565b820191906000526020600020905b81548152906001019060200180831161073557829003601f168201915b5050505050905090565b600061076982600061155f565b92915050565b60003361077d8185856115a3565b5060019392505050565b600061076982600161164a565b61079c61167f565b6107a5816116a9565b50565b6107b061167f565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107df9030906004016130cb565b602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610820919061331c565b9050801561089657600061083c6097546001600160a01b031690565b9050610849838284611722565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161088c9190612f7b565b60405180910390a3505b5050565b6000336108a885828561177d565b6108b38585856117c7565b60019150505b9392505050565b60006108ca6118b7565b6065546108e19190600160a01b900460ff16613353565b905090565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610945573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096d9190810190613482565b90506109798151611937565b60005b8151811015610be1576000828281518110610999576109996134bd565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0791906134d3565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a4157610a416134bd565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a7d9030908590600401613551565b600060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610ade9030906004016130cb565b602060405180830381865afa158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f919061331c565b90508015610b9057610b32838883611722565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b63908c9087906002906004016135b5565b600060405180830381600087803b158015610b7d57600080fd5b505af1925050508015610b8e575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610bc99190612f7b565b60405180910390a250506001909201915061097c9050565b5050505050565b60003361077d818585610bfb838361147c565b610c0591906135dd565b6115a3565b600054600290610100900460ff16158015610c2c575060005460ff8083169116105b610c515760405162461bcd60e51b8152600401610c489061363e565b60405180910390fd5b6000805461ffff191660ff831617610100179055610c6e82611962565b610c7785611989565b610c80836119c1565b610c8984611a1e565b610c9282611a85565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ccd908390613172565b60405180910390a15050505050565b6000610ce6611a9e565b610cef82611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061331c565b5082600003610d8b576040516304dd32c560e11b8152600401610c489061366f565b61019654831115610daf576040516326ac6ee160e01b815260040160405180910390fd5b6000610dba8461146f565b905080600003610ddd576040516304dd32c560e11b8152600401610c489061366f565b6000610de961019a5490565b9050610df733858785611ac9565b600081610e0461019a5490565b610e0e919061367f565b9350505050610769600161015f55565b610e2661167f565b610e306000611a85565b565b60c95433906001600160a01b03168114610e5e5760405162461bcd60e51b8152600401610c48906136d8565b6107a581611a85565b610ea56040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250611e70565b6107a5816119c1565b6000610eb8611a9e565b610ec182611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b919061331c565b5082600003610f5d576040516304dd32c560e11b8152600401610c4890613703565b61019854831115610f81576040516340868f7960e01b815260040160405180910390fd5b6000610f8c8461102d565b905080600003610faf576040516304dd32c560e11b8152600401610c4890613703565b610fbb33848387611ac9565b9050610769600161015f55565b6060603780546106d9906132e5565b60003381610fe5828661147c565b9050838110156110075760405162461bcd60e51b8152600401610c4890613755565b61101482868684036115a3565b506001949350505050565b60003361077d8185856117c7565b600061076982600161155f565b6000611044611a9e565b61104d83611962565b61105682611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061331c565b50836000036110f2576040516304dd32c560e11b8152600401610c4890613784565b610197548411156111165760405163e9ed951560e01b815260040160405180910390fd5b60008061112286611f0a565b915091506111396111303390565b868685856121ff565b9150506108b9600161015f55565b6000611151611a9e565b61115a83611962565b61116382611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd919061331c565b50836000036111ff576040516304dd32c560e11b8152600401610c48906137b1565b6101995484111561122357604051638890247960e01b815260040160405180910390fd5b600061122e856122a2565b905080600003611251576040516304dd32c560e11b8152600401610c48906137b1565b61125e33858584896121ff565b90506108b9600161015f55565b600054610100900460ff161580801561128b5750600054600160ff909116105b806112a55750303b1580156112a5575060005460ff166001145b6112c15760405162461bcd60e51b8152600401610c489061363e565b6000805460ff1916600117905580156112e4576000805461ff0019166101001790555b6112ed82611962565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906134d3565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906137cc565b905061140f611401826124f1565b61140a8361257f565b6125f7565b61141881612628565b611420612658565b508015610896576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061146390600190613801565b60405180910390a15050565b600061076982600061164a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6114e56040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250611e70565b6107a581611a1e565b6114f661167f565b60c980546001600160a01b0383166001600160a01b031990911681179091556115276097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006108b961156e6101955490565b6115799060016135dd565b6115816118b7565b61158c90600a61391d565b61019a5461159a91906135dd565b85919085612687565b6001600160a01b0383166115c95760405162461bcd60e51b8152600401610c4890613973565b6001600160a01b0382166115ef5760405162461bcd60e51b8152600401610c48906139c2565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088c908590612f7b565b60006108b96116576118b7565b61166290600a61391d565b61019a5461167091906135dd565b6101955461159a9060016135dd565b6097546001600160a01b03163314610e305760405162461bcd60e51b8152600401610c4890613a04565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610c4890613a56565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906114639083908590613a66565b6117788363a9059cbb60e01b8484604051602401611741929190613a81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e6565b505050565b6000611789848461147c565b905060001981146117c157818110156117b45760405162461bcd60e51b8152600401610c4890613ad0565b6117c184848484036115a3565b50505050565b6001600160a01b0383166117ed5760405162461bcd60e51b8152600401610c4890613b22565b6001600160a01b0382166118135760405162461bcd60e51b8152600401610c4890613b72565b6001600160a01b0383166000908152603360205260409020548181101561184c5760405162461bcd60e51b8152600401610c4890613bc5565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118aa908690612f7b565b60405180910390a36117c1565b60006118cb6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190613be9565b6108e1906012613c0a565b61012d548111156107a55761012d548160405163792bfb1b60e11b8152600401610c48929190613c27565b6001600160a01b0381166107a5576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff166119b05760405162461bcd60e51b8152600401610c4890613c7d565b6119b8612778565b6107a5816127a7565b61012d5481116119e35760405162461bcd60e51b8152600401610c4890613ccc565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa906114639083908590613c27565b611a2781611962565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b03191690556107a5816127ce565b600261015f5403611ac15760405162461bcd60e51b8152600401610c4890613d10565b600261015f55565b6000611add6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b0891906130cb565b602060405180830381865afa158015611b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b49919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611b809030906004016130cb565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061331c565b9050611be0611bd86065546001600160a01b031690565b873087612820565b600082611bf56065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c2091906130cb565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c61919061331c565b611c6b919061367f565b9050611c7681612841565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a0823190611cac9030906004016130cb565b602060405180830381865afa158015611cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ced919061331c565b611cf7919061367f565b905080600003611d1a576040516304dd32c560e11b8152600401610c4890613d54565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061331c565b611da79084613d64565b611db19190613d99565b90506000611e03611dc06118b7565b611dcb90600a61391d565b61019a54611dd991906135dd565b83611de46101955490565b611def9060016135dd565b611df9919061367f565b8491906000612687565b9050611e0f898261290d565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a84604051611e54929190613c27565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90611ea39033908690600401613dad565b602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613de0565b90508061089657333083604051634a3fa29360e01b8152600401610c4893929190613e01565b6000806000611f216065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f5191906130cb565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f92919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611fc99030906004016130cb565b602060405180830381865afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a919061331c565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612041908a90600401612f7b565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061331c565b905080156120a75780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906120d59030906004016130cb565b602060405180830381865afa1580156120f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612116919061331c565b612120919061367f565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a08231906121579030906004016130cb565b602060405180830381865afa158015612174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612198919061331c565b6121a2908461367f565b9050806000036121c5576040516304dd32c560e11b8152600401610c4890613e69565b6121f36121d06118b7565b6121db90600a61391d565b61019a546121e991906135dd565b8290856001612687565b95505050505050915091565b826001600160a01b0316856001600160a01b0316146122235761222383868361177d565b61222d838261295e565b606554612244906001600160a01b03168584611722565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051612293929190613c27565b60405180910390a45050505050565b6000806122b76065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122e791906130cb565b602060405180830381865afa158015612304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612328919061331c565b610191546040516370a0823160e01b81529192506000916123cd916001600160a01b0316906370a08231906123619030906004016130cb565b602060405180830381865afa15801561237e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a2919061331c565b6123aa6118b7565b6123b590600a61391d565b61019a546123c391906135dd565b8791906000612687565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a7590612404908590600401612f7b565b6020604051808303816000875af1158015612423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612447919061331c565b9050801561246a5780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906124999030906004016130cb565b602060405180830381865afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da919061331c565b90506124e6848261367f565b979650505050505050565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190613f04565b6040516020016125699190613f61565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156125bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125e79190810190613f04565b6040516020016125699190613f90565b600054610100900460ff1661261e5760405162461bcd60e51b8152600401610c4890613c7d565b61089682826129af565b600054610100900460ff1661264f5760405162461bcd60e51b8152600401610c4890613c7d565b6107a5816129ef565b600054610100900460ff1661267f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612a74565b600080612695868686612a9b565b905060018360028111156126ab576126ab613571565b1480156126c85750600084806126c3576126c3613d83565b868809115b156126db576126d86001826135dd565b90505b90505b949350505050565b600061273b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5d9092919063ffffffff16565b905080516000148061275c57508080602001905181019061275c9190613de0565b6117785760405162461bcd60e51b8152600401610c4890613fed565b600054610100900460ff1661279f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612b6c565b600054610100900460ff1661079c5760405162461bcd60e51b8152600401610c4890613c7d565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117c1846323b872dd60e01b85858560405160240161174193929190613ffd565b61019154612875906001600160a01b0316826128656065546001600160a01b031690565b6001600160a01b03169190612b9c565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d68906128a7908590600401612f7b565b6020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea919061331c565b905080156108965780604051630864657760e21b8152600401610c489190612f7b565b8061019a600082825461292091906135dd565b90915550506001600160a01b038216600090815261019460205260408120805483929061294e9084906135dd565b9091555061089690508282612c50565b8061019a6000828254612971919061367f565b90915550506001600160a01b038216600090815261019460205260408120805483929061299f90849061367f565b9091555061089690508282612ce6565b600054610100900460ff166129d65760405162461bcd60e51b8152600401610c4890613c7d565b60366129e283826140b6565b50603761177882826140b6565b600054610100900460ff16612a165760405162461bcd60e51b8152600401610c4890613c7d565b600080612a2283612d9d565b9150915081612a32576012612a34565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16611e685760405162461bcd60e51b8152600401610c4890613c7d565b6000808060001985870985870292508281108382030391505080600003612ad557838281612acb57612acb613d83565b04925050506108b9565b808411612af45760405162461bcd60e51b8152600401610c48906141a6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606126de8484600085612e79565b600054610100900460ff16612b935760405162461bcd60e51b8152600401610c4890613c7d565b610e3033611a85565b801580612c155750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bd29030908690600401613a66565b602060405180830381865afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c13919061331c565b155b612c315760405162461bcd60e51b8152600401610c4890614209565b6117788363095ea7b360e01b8484604051602401611741929190613a81565b6001600160a01b038216612c765760405162461bcd60e51b8152600401610c489061424d565b8060356000828254612c8891906135dd565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cda908590612f7b565b60405180910390a35050565b6001600160a01b038216612d0c5760405162461bcd60e51b8152600401610c489061429b565b6001600160a01b03821660009081526033602052604090205481811015612d455760405162461bcd60e51b8152600401610c48906142ea565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088c908690612f7b565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691612de4916142fa565b600060405180830381855afa9150503d8060008114612e1f576040519150601f19603f3d011682016040523d82523d6000602084013e612e24565b606091505b5091509150818015612e3857506020815110155b15612e6c57600081806020019051810190612e53919061331c565b905060ff8111612e6a576001969095509350505050565b505b5060009485945092505050565b606082471015612e9b5760405162461bcd60e51b8152600401610c4890614349565b600080866001600160a01b03168587604051612eb791906142fa565b60006040518083038185875af1925050503d8060008114612ef4576040519150601f19603f3d011682016040523d82523d6000602084013e612ef9565b606091505b50915091506124e68783838760608315612f44578251600003612f3d576001600160a01b0385163b612f3d5760405162461bcd60e51b8152600401610c489061438d565b50816126de565b6126de8383815115612f595781518083602001fd5b8060405162461bcd60e51b8152600401610c489190612fdf565b805b82525050565b602081016107698284612f73565b60005b83811015612fa4578181015183820152602001612f8c565b50506000910152565b6000612fb7825190565b808452602084019350612fce818560208601612f89565b601f01601f19169290920192915050565b602080825281016108b98184612fad565b805b81146107a557600080fd5b803561076981612ff0565b60006020828403121561301d5761301d600080fd5b60006126de8484612ffd565b60006001600160a01b038216610769565b612ff281613029565b80356107698161303a565b6000806040838503121561306457613064600080fd5b60006130708585613043565b925050602061308185828601612ffd565b9150509250929050565b801515612f75565b60208101610769828461308b565b6000602082840312156130b6576130b6600080fd5b60006126de8484613043565b612f7581613029565b6020810161076982846130c2565b600061076982613029565b612ff2816130d9565b8035610769816130e4565b60006020828403121561310d5761310d600080fd5b60006126de84846130ed565b60008060006060848603121561313157613131600080fd5b600061313d8686613043565b935050602061314e86828701613043565b925050604061315f86828701612ffd565b9150509250925092565b60ff8116612f75565b602081016107698284613169565b6000806000806080858703121561319957613199600080fd5b60006131a58787613043565b94505060206131b687828801613043565b93505060406131c787828801612ffd565b92505060606131d887828801613043565b91505092959194509250565b60006107696001600160a01b0383166131fb565b90565b6001600160a01b031690565b6000610769826131e4565b600061076982613207565b612f7581613212565b60208101610769828461321d565b6000806040838503121561324a5761324a600080fd5b60006132568585612ffd565b925050602061308185828601613043565b60008060006060848603121561327f5761327f600080fd5b600061328b8686612ffd565b935050602061329c86828701613043565b925050604061315f86828701613043565b600080604083850312156132c3576132c3600080fd5b60006132568585613043565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806132f957607f821691505b60208210810361330b5761330b6132cf565b50919050565b805161076981612ff0565b60006020828403121561333157613331600080fd5b60006126de8484613311565b634e487b7160e01b600052601160045260246000fd5b60ff9182169190811690828201908111156107695761076961333d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156133ac576133ac613370565b6040525050565b60006133be60405190565b90506133ca8282613386565b919050565b600067ffffffffffffffff8211156133e9576133e9613370565b5060209081020190565b8051610769816130e4565b600061341161340c846133cf565b6133b3565b8381529050602080820190840283018581111561343057613430600080fd5b835b81811015613454578061344588826133f3565b84525060209283019201613432565b5050509392505050565b600082601f83011261347257613472600080fd5b81516126de8482602086016133fe565b60006020828403121561349757613497600080fd5b815167ffffffffffffffff8111156134b1576134b1600080fd5b6126de8482850161345e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e8576134e8600080fd5b60006126de84846133f3565b6000613500838361321d565b505060200190565b6000613512825190565b80845260209384019383018060005b8381101561354657815161353588826134f4565b975060208301925050600101613521565b509495945050505050565b6040810161355f82856130c2565b81810360208301526126de8184613508565b634e487b7160e01b600052602160045260246000fd5b600481106107a5576107a5613571565b806133ca81613587565b600061076982613597565b612f75816135a1565b606081016135c382866130c2565b6135d060208301856130c2565b6126de60408301846135ac565b808201808211156107695761076961333d565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610769816135f0565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b602080825281016107698161364e565b818103818111156107695761076961333d565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613637565b6020808252810161076981613692565b60048152600060208201631b5a5b9d60e21b81529150613668565b60208082528101610769816136e8565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613637565b6020808252810161076981613713565b6008815260006020820167776974686472617760c01b81529150613668565b6020808252810161076981613765565b600681526000602082016572656465656d60d01b81529150613668565b6020808252810161076981613794565b80516107698161303a565b6000602082840312156137e1576137e1600080fd5b60006126de84846137c1565b600060ff8216610769565b612f75816137ed565b6020810161076982846137f8565b80825b600185111561384e5780860481111561382d5761382d61333d565b600185161561383b57908102905b80026138478560011c90565b9450613812565b94509492505050565b600082613866575060016108b9565b81613873575060006108b9565b81600181146138895760028114613893576138c0565b60019150506108b9565b60ff8411156138a4576138a461333d565b8360020a9150848211156138ba576138ba61333d565b506108b9565b5060208310610133831016604e8410600b84101617156138f3575081810a838111156138ee576138ee61333d565b6108b9565b613900848484600161380f565b925090508184048111156139165761391661333d565b0292915050565b600060ff831692506108b96000198484613857565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613637565b6020808252810161076981613932565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613637565b6020808252810161076981613983565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613668565b60208082528101610769816139d2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613637565b6020808252810161076981613a14565b60408101613a7482856130c2565b6108b960208301846130c2565b60408101613a8f82856130c2565b6108b96020830184612f73565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613668565b6020808252810161076981613a9c565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613637565b6020808252810161076981613ae0565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613637565b6020808252810161076981613b32565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613637565b6020808252810161076981613b82565b60ff8116612ff2565b805161076981613bd5565b600060208284031215613bfe57613bfe600080fd5b60006126de8484613bde565b60ff9182169190811690828203908111156107695761076961333d565b60408101613a8f8285612f73565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613637565b6020808252810161076981613c35565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613637565b6020808252810161076981613c8d565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613668565b6020808252810161076981613cdc565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613668565b6020808252810161076981613d20565b818102808215838204851417613d7c57613d7c61333d565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082613da857613da8613d83565b500490565b60408101613dbb82856130c2565b81810360208301526126de8184612fad565b801515612ff2565b805161076981613dcd565b600060208284031215613df557613df5600080fd5b60006126de8484613dd5565b60608101613e0f82866130c2565b613e1c60208301856130c2565b8181036040830152613e2e8184612fad565b95945050505050565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613668565b6020808252810161076981613e37565b600067ffffffffffffffff821115613e9357613e93613370565b601f19601f83011660200192915050565b6000613eb261340c84613e79565b905082815260208101848484011115613ecd57613ecd600080fd5b613ed8848285612f89565b509392505050565b600082601f830112613ef457613ef4600080fd5b81516126de848260208601613ea4565b600060208284031215613f1957613f19600080fd5b815167ffffffffffffffff811115613f3357613f33600080fd5b6126de84828501613ee0565b6000613f49825190565b613f57818560208601612f89565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b91506108b98284613f3f565b643b1a1b191b60d91b8152600060058201613f84565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613637565b6020808252810161076981613fa6565b6060810161400b82866130c2565b61401860208301856130c2565b6126de6040830184612f73565b60006107696131f88381565b61403a83614025565b815460001960089490940293841b1916921b91909117905550565b6000611778818484614031565b8181101561089657614075600082614055565b600101614062565b601f821115611778576000818152602090206020601f850104810160208510156140a45750805b610be16020601f860104830182614062565b815167ffffffffffffffff8111156140d0576140d0613370565b6140da82546132e5565b6140e582828561407d565b6020601f83116001811461411957600084156141015750858201515b600019600886021c1981166002860217865550614172565b600085815260208120601f198616915b828110156141495788850151825560209485019460019092019101614129565b868310156141655784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613668565b602080825281016107698161417a565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613637565b60208082528101610769816141b6565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613668565b6020808252810161076981614219565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613637565b602080825281016107698161425d565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613637565b60208082528101610769816142ab565b60006108b98284613f3f565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613637565b6020808252810161076981614306565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613668565b602080825281016107698161435956fea2646970667358221220c316e91d90208cb84b567b814a12c4b23c6d3f0cc08be6ce814c43c66611f4d664736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
