{
  "_format": "hh-sol-artifact-1",
  "contractName": "ReferralRewards",
  "sourceName": "contracts/ReferralRewards.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_rewardToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_decimals",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_referralBonus",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_secondsUntilInactive",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "_onlyRewardActiveReferrers",
          "type": "bool"
        },
        {
          "internalType": "uint32[3]",
          "name": "_levelRates",
          "type": "uint32[3]"
        },
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "refereeCount",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "rate",
              "type": "uint32"
            }
          ],
          "internalType": "struct ReferralRewards.RateStep[]",
          "name": "rateSteps",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidConfig",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "ActiveUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "referralBonus",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "secondsUntilInactive",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "onlyRewardActiveReferrers",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "level1",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "level2",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "level3",
          "type": "uint32"
        }
      ],
      "name": "ConfigUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "referee",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        }
      ],
      "name": "ReferrerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPERATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directRefereeCount",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastActiveAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "levelRates",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "onlyRewardActiveReferrers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "referee",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "processPurchase",
      "outputs": [
        {
          "internalType": "address[3]",
          "name": "recipients",
          "type": "address[3]"
        },
        {
          "internalType": "uint256[3]",
          "name": "bonuses",
          "type": "uint256[3]"
        },
        {
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "idx",
          "type": "uint256"
        }
      ],
      "name": "rateStepAt",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "refereeCount",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "rate",
              "type": "uint32"
            }
          ],
          "internalType": "struct ReferralRewards.RateStep",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rateStepsLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "referralBonus",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "referrerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "secondsUntilInactive",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_referralBonus",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_secondsUntilInactive",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "_onlyRewardActiveReferrers",
          "type": "bool"
        },
        {
          "internalType": "uint32[3]",
          "name": "_levelRates",
          "type": "uint32[3]"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "setOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "refereeCount",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "rate",
              "type": "uint32"
            }
          ],
          "internalType": "struct ReferralRewards.RateStep[]",
          "name": "rateSteps",
          "type": "tuple[]"
        }
      ],
      "name": "setRateSteps",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052346104e657611a6d8038038061001981610503565b928339810190610160818303126104e65780516001600160a01b03811681036104e65761004860208301610528565b61005460408401610528565b6100606060850161053c565b61006c6080860161053c565b9161007960a0870161053c565b9360c0870151958615158097036104e6578860ff890112156104e65760405197606089016001600160401b0381118a8210176104d0576040526101408101898b82116104e65760e08301905b8282106104eb57505051906001600160401b0382116104e6570189601f820112156104e6578051906001600160401b0382116104d05761010a60208360051b01610503565b9a6020808d858152019360061b830101918183116104e657602001925b82841061047e575050505061014992916101439160805261054d565b506105c9565b5063ffffffff811691821561046d5763ffffffff9160a0521690811161046d5761019961018863ffffffff86511663ffffffff60208801511690610661565b63ffffffff60408701511690610661565b63ffffffff60a051161061046d5767ffffffff000000009068ff00000000000000006001549460401b169360018060481b031916179160201b16171760015560009060005b60038110610443575050600255600154906002917fea043b6f5411cf3705a5407008dc7b5cf47623505062142902f19701f2c2b32760c060009263ffffffff86541660049663ffffffff80825460201c16915460401c169160ff6040519463ffffffff8116865263ffffffff8160201c16602087015260401c16151560408501526060840152608083015260a0820152a16003548160035580610401575b50809181925b81518410156103c45763ffffffff602061029c8685610684565b5101511663ffffffff60a05116106103b6578315159081610397575b506103895763ffffffff6102cc8483610684565b515116926102da8183610684565b5160035468010000000000000000811015610376576001810180600355811015610363576003855281517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546020938401516001600160401b031990911663ffffffff93909316929092179190921b67ffffffff000000001617905560010192610282565b634e487b7160e01b855260328752602485fd5b634e487b7160e01b855260418752602485fd5b6306b7c75960e31b82528382fd5b905063ffffffff806103a98685610684565b51511691161015386102b8565b6306b7c75960e31b83528483fd5b60405161135e90816106af82396080518161013d015260a05181818161060101528181610874015281816109ad01528181610d9e01526113060152f35b600382527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b908101905b818110610438575061027c565b82815560010161042b565b9091602060019163ffffffff8551169063ffffffff8560051b92831b921b191617930191016101de565b6306b7c75960e31b60005260046000fd5b6040848303126104e6576040805191908201906001600160401b038211838310176104d05760409260209284526104b48761053c565b81526104c183880161053c565b83820152815201930192610127565b634e487b7160e01b600052604160045260246000fd5b600080fd5b602080916104f88461053c565b8152019101906100c5565b6040519190601f01601f191682016001600160401b038111838210176104d057604052565b51906001600160a01b03821682036104e657565b519063ffffffff821682036104e657565b6001600160a01b0381166000908152600080516020611a4d833981519152602052604090205460ff166105c3576001600160a01b03166000818152600080516020611a4d83398151915260205260408120805460ff19166001179055339190600080516020611a0d8339815191528180a4600190565b50600090565b6001600160a01b0381166000908152600080516020611a2d833981519152602052604090205460ff166105c3576001600160a01b03166000818152600080516020611a2d83398151915260205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990600080516020611a0d8339815191529080a4600190565b9190820180921161066e57565b634e487b7160e01b600052601160045260246000fd5b80518210156106985760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610b265750806312640d9914610933578063248a9ca3146108fe5780632ee7754d146108d85780632f2ff15d14610898578063313ce5671461085757806336568abe146108115780633a8e7bdc146107eb5780633d35a5711461056e5780634e44624c14610550578063563a4c3b146105105780637879b5ef146104d357806391d14854146104865780639f8a13d714610459578063a217fddf1461043d578063b3ab15fb14610414578063ce7842f5146103f0578063cfbb497214610391578063d21cacdf1461034f578063d547741f14610308578063e696d10d146101e6578063eb799d23146101ac578063f5b541a6146101715763f7c618c11461012757600080fd5b3461016c57600036600319011261016c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600080fd5b3461016c57600036600319011261016c5760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b3461016c57602036600319011261016c576001600160a01b036101cd610bfc565b1660005260066020526020604060002054604051908152f35b3461016c57606036600319011261016c576101ff610bfc565b610207610be6565b9060609161021483610bc0565b908336833761022284610bc0565b92843685373360009081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16156102cf5761026b9360443593610d11565b9260405192836000905b600382106102af5750505082016000905b600382106102995760e0848660c0820152f35b6020806001928551815201930191019091610286565b82516001600160a01b031681526020928301926001929092019101610275565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3461016c57604036600319011261016c5761034d600435610327610be6565b9061034861034382600052600060205260016040600020015490565b610f29565b6110bd565b005b3461016c57602036600319011261016c576001600160a01b03610370610bfc565b166000526004602052602060018060a01b0360406000205416604051908152f35b3461016c57602036600319011261016c57600060206103ae610b8a565b828152015260406103c0600435610cb2565b5063ffffffff6103ce610b8a565b915481602081831694858152019160201c168152835192835251166020820152f35b3461016c57600036600319011261016c57602063ffffffff60015416604051908152f35b3461016c57602036600319011261016c5761034d610430610bfc565b610438610ed6565b610f64565b3461016c57600036600319011261016c57602060405160008152f35b3461016c57602036600319011261016c57602061047c610477610bfc565b610c66565b6040519015158152f35b3461016c57604036600319011261016c5761049f610be6565b600435600052600060205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461016c57602036600319011261016c57600435600381101561016c5763ffffffff610500602092610c12565b90549060031b1c16604051908152f35b3461016c57602036600319011261016c576001600160a01b03610531610bfc565b166000526005602052602063ffffffff60406000205416604051908152f35b3461016c57600036600319011261016c576020600354604051908152f35b3461016c57602036600319011261016c5760043567ffffffffffffffff811161016c573660238201121561016c57806004013567ffffffffffffffff811161016c5760248160061b8301019136831161016c576105c9610ed6565b600092602460206105de818660051b01610bc0565b80958152019201915b8183106107ab57505050600354826003558061074b575b507f000000000000000000000000000000000000000000000000000000000000000063ffffffff169082805b8251821015610747578363ffffffff6020610645858761113f565b5101511611610738578115159081610719575b5061070a5763ffffffff61066c828461113f565b5151169061067a818461113f565b51600354680100000000000000008110156106f65780600161069f9201600355610cb2565b9190916106e2578051825460209283015167ffffffffffffffff1990911663ffffffff9290921691909117911b67ffffffff00000000161790556001019061062a565b634e487b7160e01b87526004879052602487fd5b634e487b7160e01b87526041600452602487fd5b6306b7c75960e31b8452600484fd5b905063ffffffff8061072b848661113f565b5151169116101585610658565b6306b7c75960e31b8552600485fd5b8480f35b600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b017fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8181106107a057506105fe565b838155600101610793565b6040833603126107e75760206040916107c2610b8a565b6107cb86610b79565b81526107d8838701610b79565b838201528152019201916105e7565b8480fd5b3461016c57600036600319011261016c57602063ffffffff600154821c16604051908152f35b3461016c57604036600319011261016c5761082a610be6565b336001600160a01b038216036108465761034d906004356110bd565b63334bd91960e11b60005260046000fd5b3461016c57600036600319011261016c57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016c57604036600319011261016c5761034d6004356108b7610be6565b906108d361034382600052600060205260016040600020015490565b611032565b3461016c57600036600319011261016c57602060ff60015460401c166040519015158152f35b3461016c57602036600319011261016c57602061092b600435600052600060205260016040600020015490565b604051908152f35b3461016c5760c036600319011261016c5760043563ffffffff811680910361016c5760243563ffffffff8116810361016c576044359081151580920361016c57366083121561016c576109866060610bc0565b92833660c41161016c576064905b60c48210610b0e5750506109a6610ed6565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016808211610afd57610a046109f363ffffffff87511663ffffffff60208901511690610c43565b63ffffffff60408801511690610c43565b11610afd5767ffffffff000000009068ff00000000000000006001549460401b169368ffffffffffffffffff1916179160201b16171760015560009060005b60038110610ad357826002556001547fea043b6f5411cf3705a5407008dc7b5cf47623505062142902f19701f2c2b32760c060029260009363ffffffff8154169063ffffffff80825460201c16915460401c169160ff6040519463ffffffff8116865263ffffffff8160201c16602087015260401c16151560408501526060840152608083015260a0820152a180f35b9091602060019163ffffffff8551169063ffffffff8560051b92831b921b19161793019101610a43565b6306b7c75960e31b60005260046000fd5b60208091610b1b84610b79565b815201910190610994565b3461016c57602036600319011261016c576004359063ffffffff60e01b821680920361016c57602091637965db0b60e01b8114908115610b68575b5015158152f35b6301ffc9a760e01b14905083610b61565b359063ffffffff8216820361016c57565b604051906040820182811067ffffffffffffffff821117610baa57604052565b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f1916820167ffffffffffffffff811183821017610baa57604052565b602435906001600160a01b038216820361016c57565b600435906001600160a01b038216820361016c57565b906003821015610c2d57601c8260031c6002019260021b1690565b634e487b7160e01b600052603260045260246000fd5b91908201809211610c5057565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03166000908152600660205260409020548015610cac5763ffffffff60015460201c168015610ca557610c9f91610c43565b42111590565b5050600190565b50600090565b600354811015610c2d57600360005260206000200190600090565b81810292918115918404141715610c5057565b8115610cea570490565b634e487b7160e01b600052601260045260246000fd5b906003811015610c2d5760051b0190565b94929390918592809660009660018060a01b038416806000526006602052426040600020557ffecc4799a16a7823139e82b96d8c3cfa06e17fef29658cfe3103ceb21cc8eba26020604051428152a26001600160a01b038116610ec6575b5083158015610eb6575b610ea9575050610d936001549263ffffffff841690610ccd565b90610dc563ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168093610ce0565b9060ff60009460401c16158015915b60038610610de8575b505050505050929190565b6001600160a01b03908116600090815260046020526040902054168015610ea45780610e148789610d00565b52898284610e95575b610e2e575b50600190950194610dd4565b86829a610e8c92610e86610e7e8a610e748b610e7983610e7463ffffffff610e5760019e611286565b1663ffffffff610e668d610c12565b90549060031b1c1694610ccd565b610ce0565b610ccd565b938492610d00565b52610c43565b98905089610e22565b50610e9f82610c66565b610e1d565b610ddd565b9650945060009392505050565b5063ffffffff6001541615610d79565b610ed09084611153565b38610d6f565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615610f0f57565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526020818152604080832033845290915290205460ff1615610f4c5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16610cac576001600160a01b031660008181527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f60205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b6000818152602081815260408083206001600160a01b038616845290915290205460ff166110b6576000818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152602081815260408083206001600160a01b038616845290915290205460ff16156110b6576000818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b8051821015610c2d5760209160051b010190565b6001600160a01b03169081158015611275575b611271576001600160a01b0381169082821461126c576000838152600460205260409020546001600160a01b031661126c57916000925b6003841061122c575b508091925060005260046020526040600020826bffffffffffffffffffffffff60a01b8254161790558160005260056020526040600020600163ffffffff8254160163ffffffff8111610c505763ffffffff1663ffffffff198254161790557f5f7165288eef601591cf549e15ff19ef9060b7f71b9c115be946fa1fe7ebf68a600080a3565b6001600160a01b03168015611267578181146112615760005260046020526001808060a01b036040600020541693019261119d565b50505050565b6111a6565b505050565b5050565b506001600160a01b03811615611166565b600354908115611302576001600160a01b0316600090815260056020526040812054909190829063ffffffff165b8282106112c2575b50505090565b90919263ffffffff6112d384610cb2565b50541682106112fc5750600163ffffffff6112ed84610cb2565b505460201c16939201906112b4565b926112bc565b50507f00000000000000000000000000000000000000000000000000000000000000009056fea2646970667358221220a8dd8905219b642527114d3c01f45fd1c0acc4f3c564050a1d0be2573a038e0064736f6c634300081c00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5",
  "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610b265750806312640d9914610933578063248a9ca3146108fe5780632ee7754d146108d85780632f2ff15d14610898578063313ce5671461085757806336568abe146108115780633a8e7bdc146107eb5780633d35a5711461056e5780634e44624c14610550578063563a4c3b146105105780637879b5ef146104d357806391d14854146104865780639f8a13d714610459578063a217fddf1461043d578063b3ab15fb14610414578063ce7842f5146103f0578063cfbb497214610391578063d21cacdf1461034f578063d547741f14610308578063e696d10d146101e6578063eb799d23146101ac578063f5b541a6146101715763f7c618c11461012757600080fd5b3461016c57600036600319011261016c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600080fd5b3461016c57600036600319011261016c5760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b3461016c57602036600319011261016c576001600160a01b036101cd610bfc565b1660005260066020526020604060002054604051908152f35b3461016c57606036600319011261016c576101ff610bfc565b610207610be6565b9060609161021483610bc0565b908336833761022284610bc0565b92843685373360009081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16156102cf5761026b9360443593610d11565b9260405192836000905b600382106102af5750505082016000905b600382106102995760e0848660c0820152f35b6020806001928551815201930191019091610286565b82516001600160a01b031681526020928301926001929092019101610275565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3461016c57604036600319011261016c5761034d600435610327610be6565b9061034861034382600052600060205260016040600020015490565b610f29565b6110bd565b005b3461016c57602036600319011261016c576001600160a01b03610370610bfc565b166000526004602052602060018060a01b0360406000205416604051908152f35b3461016c57602036600319011261016c57600060206103ae610b8a565b828152015260406103c0600435610cb2565b5063ffffffff6103ce610b8a565b915481602081831694858152019160201c168152835192835251166020820152f35b3461016c57600036600319011261016c57602063ffffffff60015416604051908152f35b3461016c57602036600319011261016c5761034d610430610bfc565b610438610ed6565b610f64565b3461016c57600036600319011261016c57602060405160008152f35b3461016c57602036600319011261016c57602061047c610477610bfc565b610c66565b6040519015158152f35b3461016c57604036600319011261016c5761049f610be6565b600435600052600060205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461016c57602036600319011261016c57600435600381101561016c5763ffffffff610500602092610c12565b90549060031b1c16604051908152f35b3461016c57602036600319011261016c576001600160a01b03610531610bfc565b166000526005602052602063ffffffff60406000205416604051908152f35b3461016c57600036600319011261016c576020600354604051908152f35b3461016c57602036600319011261016c5760043567ffffffffffffffff811161016c573660238201121561016c57806004013567ffffffffffffffff811161016c5760248160061b8301019136831161016c576105c9610ed6565b600092602460206105de818660051b01610bc0565b80958152019201915b8183106107ab57505050600354826003558061074b575b507f000000000000000000000000000000000000000000000000000000000000000063ffffffff169082805b8251821015610747578363ffffffff6020610645858761113f565b5101511611610738578115159081610719575b5061070a5763ffffffff61066c828461113f565b5151169061067a818461113f565b51600354680100000000000000008110156106f65780600161069f9201600355610cb2565b9190916106e2578051825460209283015167ffffffffffffffff1990911663ffffffff9290921691909117911b67ffffffff00000000161790556001019061062a565b634e487b7160e01b87526004879052602487fd5b634e487b7160e01b87526041600452602487fd5b6306b7c75960e31b8452600484fd5b905063ffffffff8061072b848661113f565b5151169116101585610658565b6306b7c75960e31b8552600485fd5b8480f35b600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b017fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8181106107a057506105fe565b838155600101610793565b6040833603126107e75760206040916107c2610b8a565b6107cb86610b79565b81526107d8838701610b79565b838201528152019201916105e7565b8480fd5b3461016c57600036600319011261016c57602063ffffffff600154821c16604051908152f35b3461016c57604036600319011261016c5761082a610be6565b336001600160a01b038216036108465761034d906004356110bd565b63334bd91960e11b60005260046000fd5b3461016c57600036600319011261016c57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016c57604036600319011261016c5761034d6004356108b7610be6565b906108d361034382600052600060205260016040600020015490565b611032565b3461016c57600036600319011261016c57602060ff60015460401c166040519015158152f35b3461016c57602036600319011261016c57602061092b600435600052600060205260016040600020015490565b604051908152f35b3461016c5760c036600319011261016c5760043563ffffffff811680910361016c5760243563ffffffff8116810361016c576044359081151580920361016c57366083121561016c576109866060610bc0565b92833660c41161016c576064905b60c48210610b0e5750506109a6610ed6565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016808211610afd57610a046109f363ffffffff87511663ffffffff60208901511690610c43565b63ffffffff60408801511690610c43565b11610afd5767ffffffff000000009068ff00000000000000006001549460401b169368ffffffffffffffffff1916179160201b16171760015560009060005b60038110610ad357826002556001547fea043b6f5411cf3705a5407008dc7b5cf47623505062142902f19701f2c2b32760c060029260009363ffffffff8154169063ffffffff80825460201c16915460401c169160ff6040519463ffffffff8116865263ffffffff8160201c16602087015260401c16151560408501526060840152608083015260a0820152a180f35b9091602060019163ffffffff8551169063ffffffff8560051b92831b921b19161793019101610a43565b6306b7c75960e31b60005260046000fd5b60208091610b1b84610b79565b815201910190610994565b3461016c57602036600319011261016c576004359063ffffffff60e01b821680920361016c57602091637965db0b60e01b8114908115610b68575b5015158152f35b6301ffc9a760e01b14905083610b61565b359063ffffffff8216820361016c57565b604051906040820182811067ffffffffffffffff821117610baa57604052565b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f1916820167ffffffffffffffff811183821017610baa57604052565b602435906001600160a01b038216820361016c57565b600435906001600160a01b038216820361016c57565b906003821015610c2d57601c8260031c6002019260021b1690565b634e487b7160e01b600052603260045260246000fd5b91908201809211610c5057565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03166000908152600660205260409020548015610cac5763ffffffff60015460201c168015610ca557610c9f91610c43565b42111590565b5050600190565b50600090565b600354811015610c2d57600360005260206000200190600090565b81810292918115918404141715610c5057565b8115610cea570490565b634e487b7160e01b600052601260045260246000fd5b906003811015610c2d5760051b0190565b94929390918592809660009660018060a01b038416806000526006602052426040600020557ffecc4799a16a7823139e82b96d8c3cfa06e17fef29658cfe3103ceb21cc8eba26020604051428152a26001600160a01b038116610ec6575b5083158015610eb6575b610ea9575050610d936001549263ffffffff841690610ccd565b90610dc563ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168093610ce0565b9060ff60009460401c16158015915b60038610610de8575b505050505050929190565b6001600160a01b03908116600090815260046020526040902054168015610ea45780610e148789610d00565b52898284610e95575b610e2e575b50600190950194610dd4565b86829a610e8c92610e86610e7e8a610e748b610e7983610e7463ffffffff610e5760019e611286565b1663ffffffff610e668d610c12565b90549060031b1c1694610ccd565b610ce0565b610ccd565b938492610d00565b52610c43565b98905089610e22565b50610e9f82610c66565b610e1d565b610ddd565b9650945060009392505050565b5063ffffffff6001541615610d79565b610ed09084611153565b38610d6f565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615610f0f57565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526020818152604080832033845290915290205460ff1615610f4c5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16610cac576001600160a01b031660008181527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f60205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b6000818152602081815260408083206001600160a01b038616845290915290205460ff166110b6576000818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152602081815260408083206001600160a01b038616845290915290205460ff16156110b6576000818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b8051821015610c2d5760209160051b010190565b6001600160a01b03169081158015611275575b611271576001600160a01b0381169082821461126c576000838152600460205260409020546001600160a01b031661126c57916000925b6003841061122c575b508091925060005260046020526040600020826bffffffffffffffffffffffff60a01b8254161790558160005260056020526040600020600163ffffffff8254160163ffffffff8111610c505763ffffffff1663ffffffff198254161790557f5f7165288eef601591cf549e15ff19ef9060b7f71b9c115be946fa1fe7ebf68a600080a3565b6001600160a01b03168015611267578181146112615760005260046020526001808060a01b036040600020541693019261119d565b50505050565b6111a6565b505050565b5050565b506001600160a01b03811615611166565b600354908115611302576001600160a01b0316600090815260056020526040812054909190829063ffffffff165b8282106112c2575b50505090565b90919263ffffffff6112d384610cb2565b50541682106112fc5750600163ffffffff6112ed84610cb2565b505460201c16939201906112b4565b926112bc565b50507f00000000000000000000000000000000000000000000000000000000000000009056fea2646970667358221220a8dd8905219b642527114d3c01f45fd1c0acc4f3c564050a1d0be2573a038e0064736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}

Graph