Loading
[ { "inputs": [ { "internalType": "address", "name": "transferRules_", "type": "address" }, { "internalType": "address", "name": "contractAdmin_", "type": "address" }, { "internalType": "address", "name": "tokenReserveAdmin_", "type": "address" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "uint256", "name": "totalSupply_", "type": "uint256" }, { "internalType": "uint256", "name": "maxTotalSupply_", "type": "uint256" }, { "internalType": "uint256", "name": "minTimelockAmount_", "type": "uint256" }, { "internalType": "uint256", "name": "maxReleaseDelay_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "AddressFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "AddressTransferGroup", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "fromGroup", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "toGroup", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockedUntil", "type": "uint256" } ], "name": "AllowGroupTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "holderId", "type": "uint256" } ], "name": "AppendHolderAddress", "type": "event" }, { "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": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ForceTransferBetween", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "holderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "addr", "type": "address" } ], "name": "HolderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "MinWalletBalanceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "Pause", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "holderId", "type": "uint256" } ], "name": "RemoveHolder", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "grantor", "type": "address" }, { "indexed": true, "internalType": "address", "name": "grantee", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "role", "type": "uint8" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "RoleChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "scheduleId", "type": "uint256" } ], "name": "ScheduleCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "scheduleId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "commencementTimestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timelockId", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "cancelableBy", "type": "address[]" } ], "name": "ScheduleFunded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "indexed": false, "internalType": "int256", "name": "groupHolderMax", "type": "int256" } ], "name": "SetHolderGroupMax", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "holderMax", "type": "int256" } ], "name": "SetHolderMax", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "Snapshot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "canceledBy", "type": "address" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "timelockIndex", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "reclaimTokenTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "canceledAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paidAmount", "type": "uint256" } ], "name": "TimelockCanceled", "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": "admin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldRules", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newRules", "type": "address" } ], "name": "Upgrade", "type": "event" }, { "inputs": [], "name": "CONTRACT_ADMIN_ROLE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVE_ADMIN_ROLE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TRANSFER_ADMIN_ROLE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WALLETS_ADMIN_ROLE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_ITRANSFER_RULES_INTERFACE_ID", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "addresses_", "type": "address[]" } ], "name": "addHolderWithAddresses", "outputs": [ { "internalType": "uint256", "name": "_holderId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" } ], "name": "addressHasHolder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "addr", "type": "address" }, { "internalType": "uint256", "name": "holderId", "type": "uint256" } ], "name": "appendHolderAddress", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "snapshotId", "type": "uint256" } ], "name": "balanceOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "timelockIndex", "type": "uint256" } ], "name": "balanceOfTimelock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "to", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "commencementTimestamps", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "scheduleIds", "type": "uint256[]" }, { "internalType": "address[]", "name": "cancelableBy", "type": "address[]" } ], "name": "batchFundReleaseSchedule", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "batchTransfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "uint256", "name": "value_", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "commencedTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "currentTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "releaseCount", "type": "uint256" }, { "internalType": "uint256", "name": "delayUntilFirstReleaseInSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "initialReleasePortionInBips", "type": "uint256" }, { "internalType": "uint256", "name": "periodBetweenReleasesInSeconds", "type": "uint256" } ], "internalType": "struct RestrictedLockupToken.ReleaseSchedule", "name": "releaseSchedule", "type": "tuple" } ], "name": "calculateUnlocked", "outputs": [ { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "commencedTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "currentTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "releaseCount", "type": "uint256" }, { "internalType": "uint256", "name": "delayUntilFirstReleaseInSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "initialReleasePortionInBips", "type": "uint256" }, { "internalType": "uint256", "name": "periodBetweenReleasesInSeconds", "type": "uint256" } ], "name": "calculateUnlocked", "outputs": [ { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "commencedTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "currentTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "scheduleId", "type": "uint256" } ], "name": "calculateUnlocked", "outputs": [ { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "timelockIndex", "type": "uint256" }, { "internalType": "uint256", "name": "scheduleId", "type": "uint256" }, { "internalType": "uint256", "name": "commencementTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "address", "name": "reclaimTokenTo", "type": "address" } ], "name": "cancelTimelock", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractAdminCount", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" } ], "name": "createHolderFromAddress", "outputs": [ { "internalType": "uint256", "name": "_holderId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "releaseCount", "type": "uint256" }, { "internalType": "uint256", "name": "delayUntilFirstReleaseInSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "initialReleasePortionInBips", "type": "uint256" }, { "internalType": "uint256", "name": "periodBetweenReleasesInSeconds", "type": "uint256" } ], "name": "createReleaseSchedule", "outputs": [ { "internalType": "uint256", "name": "unlockScheduleId", "type": "uint256" } ], "stateMutability": "nonpayable", "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": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "detectTransferRestriction", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "forceTransferBetween", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "freeze", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "commencementTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "scheduleId", "type": "uint256" }, { "internalType": "address[]", "name": "cancelableBy", "type": "address[]" } ], "name": "fundReleaseSchedule", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "from", "type": "uint256" }, { "internalType": "uint256", "name": "to", "type": "uint256" } ], "name": "getAllowGroupTransferTime", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "getAllowTransferTime", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentSnapshotId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "getFrozenStatus", "outputs": [ { "internalType": "bool", "name": "status", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "holderId_", "type": "uint256" } ], "name": "getHolderAddresses", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" } ], "name": "getHolderId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "getTransferGroup", "outputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" } ], "name": "hasAnyGroup", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" }, { "internalType": "uint256", "name": "groupId_", "type": "uint256" } ], "name": "hasGroup", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "holderId_", "type": "uint256" } ], "name": "holderBalance", "outputs": [ { "internalType": "uint256", "name": "_balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "holderId_", "type": "uint256" }, { "internalType": "uint256", "name": "groupId_", "type": "uint256" } ], "name": "holderBalanceByGroupId", "outputs": [ { "internalType": "uint256", "name": "_balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "holderCount", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "holderId_", "type": "uint256" } ], "name": "holderExists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "holderGroupCount", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "holderGroupMax", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "holderMax", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "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": [], "name": "isPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferRulesAddr_", "type": "address" } ], "name": "isValidTransferRules", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "lockedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "timelockIndex", "type": "uint256" } ], "name": "lockedBalanceOfTimelock", "outputs": [ { "internalType": "uint256", "name": "locked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxReleaseDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "restrictionCode", "type": "uint8" } ], "name": "messageForTransferRestriction", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTimelockAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minWalletBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "value_", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "isPaused_", "type": "bool" } ], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "releaseSchedules", "outputs": [ { "internalType": "uint256", "name": "releaseCount", "type": "uint256" }, { "internalType": "uint256", "name": "delayUntilFirstReleaseInSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "initialReleasePortionInBips", "type": "uint256" }, { "internalType": "uint256", "name": "periodBetweenReleasesInSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "holderId", "type": "uint256" } ], "name": "removeHolder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "safeApprove", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "scheduleCount", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "buyerAddr_", "type": "address" }, { "internalType": "uint256", "name": "groupId_", "type": "uint256" }, { "internalType": "bool", "name": "freezeStatus_", "type": "bool" } ], "name": "setAddressPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "from", "type": "uint256" }, { "internalType": "uint256", "name": "to", "type": "uint256" }, { "internalType": "uint256", "name": "lockedUntil", "type": "uint256" } ], "name": "setAllowGroupTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "int256", "name": "groupHolderMax", "type": "int256" } ], "name": "setHolderGroupMax", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "holderMax_", "type": "int256" } ], "name": "setHolderMax", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minWalletBalance_", "type": "uint256" } ], "name": "setMinWalletBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr_", "type": "address" }, { "internalType": "uint256", "name": "groupId_", "type": "uint256" }, { "internalType": "bool", "name": "ignoreMinWalletBalance", "type": "bool" } ], "name": "setTransferGroup", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "snapshot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "superBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "timelockCountOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "timelockOf", "outputs": [ { "components": [ { "internalType": "address", "name": "funder", "type": "address" }, { "internalType": "uint256", "name": "scheduleId", "type": "uint256" }, { "internalType": "uint256", "name": "commencementTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "address[]", "name": "cancelableBy", "type": "address[]" } ], "internalType": "struct RestrictedLockupToken.Timelock", "name": "timelock", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "timelocks", "outputs": [ { "internalType": "address", "name": "funder", "type": "address" }, { "internalType": "uint256", "name": "scheduleId", "type": "uint256" }, { "internalType": "uint256", "name": "commencementTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "snapshotId", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "timelockIndex", "type": "uint256" } ], "name": "totalUnlockedToDateOfTimelock", "outputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferRules", "outputs": [ { "internalType": "contract ITransferRules", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "timelockId", "type": "uint256" } ], "name": "transferTimelock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "unlockedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "timelockIndex", "type": "uint256" } ], "name": "unlockedBalanceOfTimelock", "outputs": [ { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "unlockedTotalBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ITransferRules", "name": "newTransferRules", "type": "address" } ], "name": "upgradeTransferRules", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101206040526001600160ff1b036017553480156200001d57600080fd5b50604051620071f3380380620071f3833981016040819052620000409162000f27565b888688600362000051838262001093565b50600462000060828262001093565b50829150506001600160a01b038116620000975760405162461bcd60e51b81526004016200008e906200115f565b60405180910390fd5b620000a48260016200035a565b50506001600b558551620000fb5760405162461bcd60e51b815260206004820152601460248201527f4e616d652063616e6e6f7420626520656d70747900000000000000000000000060448201526064016200008e565b60008751116200014e5760405162461bcd60e51b815260206004820152601660248201527f53796d626f6c2063616e6e6f7420626520656d7074790000000000000000000060448201526064016200008e565b82841115620001c65760405162461bcd60e51b815260206004820152603460248201527f546f74616c20737570706c792063616e6e6f742062652067726561746572207460448201527f68616e206d617820746f74616c20737570706c7900000000000000000000000060648201526084016200008e565b6001600160a01b038a166200022a5760405162461bcd60e51b8152602060048201526024808201527f5472616e736665722072756c657320616464726573732063616e6e6f742062656044820152630203078360e41b60648201526084016200008e565b6001600160a01b038816620002945760405162461bcd60e51b815260206004820152602960248201527f546f6b656e20726573657276652061646d696e20616464726573732063616e6e60448201526806f74206265203078360bc1b60648201526084016200008e565b600e80546001600160a01b0319166001600160a01b038c1617905563cd1ffd6f60e01b6101005260c083905260ff851660e052620002d485600a620012a9565b601955620002e48860026200035a565b620002f0888562000427565b60008211620003425760405162461bcd60e51b815260206004820152601760248201527f4d696e2074696d656c6f636b20616d6f756e74203e203000000000000000000060448201526064016200008e565b60809190915260a05250620013999650505050505050565b6001600160a01b0382166000908152600960205260409020546001161580156200038657506001811615155b15620003bb57600a805460ff16906000620003a183620012c1565b91906101000a81548160ff021916908360ff160217905550505b6001600160a01b038216600081815260096020908152604091829020805460ff19811660ff9182169187169182171790915591519182526001929133917f7e9e87d17fbf2950f3379a6331b75b6e997a147bbd3eaedc68c30c62186c68cb910160405180910390a45050565b6001600160a01b0382166200047f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200008e565b6200048d6000838362000506565b8060026000828254620004a19190620012e3565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620005026000838362000577565b5050565b6200051e8383836200054260201b620020151760201c565b6001600160a01b0383166200054757620005388262000659565b620005426200068a565b505050565b6001600160a01b0382166200056157620005388362000659565b6200056c8362000659565b620005428262000659565b6200058f8383836200054260201b620020151760201c565b6200059a826200069c565b158015620005b057506001600160a01b03821615155b15620005c357620005c182620006b9565b505b6019548015801590620005de57506001600160a01b03841615155b1562000653576000620005f1856200089a565b90508015806200060357506019548110155b620006515760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642077616c6c65742062616c616e63650000000000000000000060448201526064016200008e565b505b50505050565b6001600160a01b0381166000908152600560205260409020620006879062000681836200089a565b620008dd565b50565b6200069a60066200068160025490565b565b6001600160a01b0316600090815260136020526040902054151590565b6000816001600160a01b038116620006e55760405162461bcd60e51b81526004016200008e906200115f565b620006f0836200069c565b156200072f5760405162461bcd60e51b815260206004820152600d60248201526c486f6c6465722065786973747360981b60448201526064016200008e565b601754601854126200078e5760405162461bcd60e51b815260206004820152602160248201527f52656163686564206d6178696d756d206e756d626572206f6620686f6c6465726044820152607360f81b60648201526084016200008e565b6018600081546200079f90620012f9565b91905081905550620007bd600d6200092c60201b620037ab1760201c565b620007d4600d6200093560201b620037b41760201c565b6001600160a01b038416600081815260136020908152604080832085905584835260148252822080546001810182559083528183200180546001600160a01b03191690931790925580805260109091527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb018054929450909182906200085990620012f9565b909155506040516001600160a01b0385169084907ffdd9f2f6082336dbf994cf6443419e59a158b248c3fa9c9d01166a729754541190600090a35050919050565b6000306001600160a01b03831603620008b557506000919050565b620008c08262000939565b620008cb8362000989565b620008d79190620012e3565b92915050565b6000620008e9620009a1565b905080620008f784620009bf565b101562000542578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b80546001019055565b5490565b600080620009478362000a0f565b905060005b81811015620009825762000961848262000a2a565b6200096d9084620012e3565b92506200097a816200131b565b90506200094c565b5050919050565b6000620009968262000a7b565b620008cb8362000ac4565b6000620009ba60086200093560201b620037b41760201c565b905090565b80546000908103620009d357506000919050565b81548290620009e59060019062001330565b81548110620009f857620009f862001346565b90600052602060002001549050919050565b919050565b6001600160a01b03166000908152600f602052604090205490565b60008062000a39848462000adc565b9050806060015181608001511162000a56576000915050620008d7565b62000a62848462000c07565b816080015162000a73919062001330565b949350505050565b60008062000a898362000a0f565b905060005b81811015620009825762000aa3848262000c38565b62000aaf9084620012e3565b925062000abc816200131b565b905062000a8e565b6000620008d78262000c8160201b620037b81760201c565b62000b1f6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001606081525090565b6001600160a01b0383166000908152600f6020526040902080548390811062000b4c5762000b4c62001346565b60009182526020918290206040805160c081018252600690930290910180546001600160a01b0316835260018101548385015260028101548383015260038101546060840152600481015460808401526005810180548351818702810187019094528084529394919360a08601939283018282801562000bf657602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000bd7575b505050505081525050905092915050565b60008062000c16848462000adc565b905062000a738160400151428360800151846020015162000c9c60201b60201c565b60008062000c47848462000adc565b9050806060015181608001511162000c64576000915050620008d7565b606081015162000c75858562000c07565b62000a73919062001330565b6001600160a01b031660009081526020819052604090205490565b600062000d08858585600c868154811062000cbb5762000cbb62001346565b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505062000d1160201b60201c565b95945050505050565b600062000d08858585856000015186602001518760400151886060015162000d3a60201b60201c565b60008688111562000d4e5750600062000e2d565b600062000d5c898962001330565b905062000d6b60018762001330565b62000d7790846200135c565b62000d839086620012e3565b811062000d94578691505062000e2d565b84811062000e2b5761271062000dab85896200135c565b62000db7919062001376565b91508262000dc6868362001330565b1062000e2b5760008362000ddb878462001330565b62000de7919062001376565b905062000df660018862001330565b8162000e03858b62001330565b62000e0f91906200135c565b62000e1b919062001376565b62000e279084620012e3565b9250505b505b979650505050505050565b80516001600160a01b038116811462000a0a57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000e7857600080fd5b81516001600160401b038082111562000e955762000e9562000e50565b604051601f8301601f19908116603f0116810190828211818310171562000ec05762000ec062000e50565b8160405283815260209250868385880101111562000edd57600080fd5b600091505b8382101562000f01578582018301518183018401529082019062000ee2565b600093810190920192909252949350505050565b805160ff8116811462000a0a57600080fd5b6000806000806000806000806000806101408b8d03121562000f4857600080fd5b62000f538b62000e38565b995062000f6360208c0162000e38565b985062000f7360408c0162000e38565b60608c01519098506001600160401b038082111562000f9157600080fd5b62000f9f8e838f0162000e66565b985060808d015191508082111562000fb657600080fd5b5062000fc58d828e0162000e66565b96505062000fd660a08c0162000f15565b945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b600181811c908216806200101a57607f821691505b6020821081036200103b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054257600081815260208120601f850160051c810160208610156200106a5750805b601f850160051c820191505b818110156200108b5782815560010162001076565b505050505050565b81516001600160401b03811115620010af57620010af62000e50565b620010c781620010c0845462001005565b8462001041565b602080601f831160018114620010ff5760008415620010e65750858301515b600019600386901b1c1916600185901b1785556200108b565b600085815260208120601f198616915b8281101562001130578886015182559484019460019091019084016200110f565b50858210156200114f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526015908201527f416464726573732063616e6e6f74206265203078300000000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620011ed578160001904821115620011d157620011d162001196565b80851615620011df57918102915b93841c9390800290620011b1565b509250929050565b6000826200120657506001620008d7565b816200121557506000620008d7565b81600181146200122e5760028114620012395762001259565b6001915050620008d7565b60ff8411156200124d576200124d62001196565b50506001821b620008d7565b5060208310610133831016604e8410600b84101617156200127e575081810a620008d7565b6200128a8383620011ac565b8060001904821115620012a157620012a162001196565b029392505050565b6000620012ba60ff841683620011f5565b9392505050565b600060ff821660ff8103620012da57620012da62001196565b60010192915050565b80820180821115620008d757620008d762001196565b60006001600160ff1b01820162001314576200131462001196565b5060010190565b60006001820162001314576200131462001196565b81810381811115620008d757620008d762001196565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417620008d757620008d762001196565b6000826200139457634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e05161010051615deb62001408600039600081816107d4015281816112f70152613355015260006105f90152600081816105c20152611f770152600081816105030152818161164d015261472f01526000818161063501526145880152615deb6000f3fe608060405234801561001057600080fd5b50600436106103fe5760003560e01c806301ffc9a71461040357806302329a291461042b57806306fdde0314610440578063077d3c0314610455578063095ea7b3146104685780630af3e6601461047b5780630c815103146104b25780630f8ad1b4146104c557806310c667bf146104d857806312ddac04146104eb57806314cf86eb146104fe57806318160ddd146105255780631aab9a9f1461052d5780631da033121461053657806320f5728d1461054b57806321bb56d71461055e57806321fac8f11461057157806323b872dd14610584578063265b2cef14610597578063267b2f67146105aa5780632ab4d052146105bd5780632b883c4d146105e4578063313ce567146105f757806331caa82e1461061d578063370de0431461063057806338cb57e814610657578063395093511461065f5780633c637d74146106725780633d74a49d1461069d5780633e840236146106a557806340c10f19146106b857806340dc95c5146106cb5780634400cf7b146107175780634c52830c146107205780634ee2cd7e146107335780635439ad8614610746578063593557361461074e5780635f7c537714610761578063624b98f11461077457806368a37ae8146107945780636aea0d2e1461079c5780636d7b4a8f146107cf5780636fa9e6351461080357806370a0823114610816578063760e997f146108295780637f4ab1dd1461083c57806382074ac21461084f57806384955c881461086f57806388d695b2146108825780638d587317146108955780638e4f11ff146108a85780638e64eac5146108bb57806390fc7e91146108c857806395a8c58d146108db57806395d89b41146108ee57806396305c89146108f65780639711715a14610909578063981b24d0146109115780639dc29fac14610924578063a457c2d714610937578063a6686b201461094a578063a9059cbb14610953578063a9b1f05114610966578063ad061e2514610979578063b187bd261461098c578063b30bfa3d14610999578063b7ed4785146109ac578063b7ef81e1146109bf578063bd7a050e146109c7578063bf120ae5146109da578063c192da51146109ed578063cba4cce414610a00578063ceca46c214610a20578063d2b3173314610a4b578063d4ce141514610a5e578063d7147eec14610a71578063d925ce3f14610a84578063db74fa3614610a97578063db7be70314610ac0578063dbb2536414610ad3578063dd62ed3e14610ae6578063dfb7300e14610af9578063e377d89914610b0c578063e98a0c6414610b2c578063ea612ae814610b3f578063f441a1ad14610b84578063f7308d2c14610b97578063f7ade00814610baa578063fbc6d1cb14610bb2578063fc96f7d814610bc5575b600080fd5b6104166104113660046150c3565b610bf1565b60405190151581526020015b60405180910390f35b61043e6104393660046150fb565b610c28565b005b610448610c97565b604051610422919061513c565b61043e610463366004615193565b610d29565b6104166104763660046151cc565b610edd565b6104a46104893660046151f8565b6001600160a01b031660009081526013602052604090205490565b604051908152602001610422565b6104a46104c03660046151cc565b610ef5565b6104166104d3366004615215565b610f24565b6104166104e63660046151f8565b6112d0565b6104166104f93660046151cc565b611360565b6104a47f000000000000000000000000000000000000000000000000000000000000000081565b6002546104a4565b6104a460185481565b61053e600181565b6040516104229190615273565b61043e610559366004615281565b61137f565b6104a461056c3660046152c2565b6115ef565b6104a461057f3660046151cc565b611983565b610416610592366004615281565b6119cc565b61043e6105a53660046152f4565b611b55565b61043e6105b83660046152f4565b611ca3565b6104a47f000000000000000000000000000000000000000000000000000000000000000081565b61043e6105f23660046152f4565b611d08565b7f000000000000000000000000000000000000000000000000000000000000000061053e565b61043e61062b36600461530d565b611dc4565b6104a47f000000000000000000000000000000000000000000000000000000000000000081565b61053e600281565b61041661066d3660046151cc565b611e54565b6104a461068036600461534f565b600091825260166020908152604080842092845291905290205490565b61053e600481565b61043e6106b3366004615193565b611e76565b61043e6106c63660046151cc565b611f27565b6104a46106d9366004615371565b6001600160a01b0391821660009081526015602081815260408084205484526016825280842094909516835290815283822054825291909152205490565b6104a460195481565b61041661072e3660046152f4565b61201a565b6104a46107413660046151cc565b61202e565b6104a4612077565b6104a461075c3660046151f8565b612086565b6104a461076f3660046153e5565b6120cc565b6107876107823660046152f4565b6120ed565b60405161042291906154be565b61053e600881565b6107af6107aa3660046152f4565b612181565b604080519485526020850193909352918301526060820152608001610422565b6107f67f000000000000000000000000000000000000000000000000000000000000000081565b60405161042291906154d1565b6104a46108113660046151f8565b6121bb565b6104a46108243660046151f8565b6121fe565b61043e61083736600461534f565b612234565b61044861084a3660046154e6565b612378565b61086261085d3660046151cc565b6123ee565b6040516104229190615503565b6104a461087d3660046151f8565b6124d9565b61041661089036600461559c565b612518565b6104a46108a33660046152f4565b61264d565b6104166108b6366004615607565b6126e4565b600a5461053e9060ff1681565b6104a46108d63660046156ea565b6128d7565b6104166108e9366004615193565b6129b3565b610448612a2e565b6104a46109043660046152c2565b612a3d565b6104a4612a9e565b6104a461091f3660046152f4565b612acf565b61043e6109323660046151cc565b612af0565b6104166109453660046151cc565b612b48565b6104a460175481565b6104166109613660046151cc565b612bce565b610416610974366004615736565b612be5565b6104a46109873660046151cc565b612ccd565b601a546104169060ff1681565b6104a46109a73660046151f8565b612d09565b6104166109ba36600461576b565b612d24565b600c546104a4565b61043e6109d536600461530d565b612f01565b61043e6109e836600461585b565b612f72565b6104166109fb3660046151f8565b613029565b6104a4610a0e3660046152f4565b60106020526000908152604090205481565b600e54610a33906001600160a01b031681565b6040516001600160a01b039091168152602001610422565b6104a4610a593660046151f8565b613046565b61053e610a6c366004615281565b61305a565b6104a4610a7f366004615889565b6130de565b6104a4610a9236600461534f565b6131d9565b6104a4610aa53660046151f8565b6001600160a01b031660009081526015602052604090205490565b6104a4610ace3660046151f8565b613290565b610416610ae13660046151f8565b61329b565b6104a4610af4366004615371565b6132b8565b61043e610b073660046151f8565b6132e3565b6104a4610b1a3660046152f4565b60116020526000908152604090205481565b61043e610b3a3660046158ca565b613487565b610b52610b4d3660046151cc565b613506565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610422565b61043e610b923660046151cc565b61355e565b6104a4610ba53660046151cc565b6136c7565b6104a4613708565b61043e610bc03660046151cc565b613726565b610416610bd33660046151f8565b6001600160a01b031660009081526012602052604090205460ff1690565b60006001600160e01b0319821663157094b960e31b1480610c2257506301ffc9a760e01b6001600160e01b03198316145b92915050565b610c333360086129b3565b610c585760405162461bcd60e51b8152600401610c4f906158f6565b60405180910390fd5b601a805460ff191682151590811790915560405133907f0d7fd1e314b29407db3d79c46ecf1fa3d2108961fab8d20584277358cac41e8990600090a350565b606060038054610ca690615937565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290615937565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b8060008160ff1611610d4d5760405162461bcd60e51b8152600401610c4f9061596b565b826001600160a01b038116610d745760405162461bcd60e51b8152600401610c4f9061599d565b610d7f3360016129b3565b610d9b5760405162461bcd60e51b8152600401610c4f906159cc565b610da584846129b3565b610de75760405162461bcd60e51b815260206004820152601360248201527243616e206e6f74207265766f6b6520726f6c6560681b6044820152606401610c4f565b6001831615610e8257600a54600160ff90911611610e555760405162461bcd60e51b815260206004820152602560248201527f4d7573742068617665206174206c65617374206f6e6520636f6e74726163742060448201526430b236b4b760d91b6064820152608401610c4f565b600a805460ff16906000610e6883615a23565b91906101000a81548160ff021916908360ff160217905550505b6001600160a01b038416600081815260096020526040808220805460ff80821689181660ff19909116179055519091903390600080516020615d9683398151915290610ecf908890615273565b60405180910390a450505050565b600033610eeb8185856137d3565b5060019392505050565b600080610f0284846123ee565b9050610f1c81604001514283608001518460200151612a3d565b949350505050565b6000610f2e6138f7565b85610f3888612d09565b11610f785760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642074696d656c6f636b60801b6044820152606401610c4f565b6001600160a01b038216610fc75760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964207265636c61696d546f6b656e546f60501b6044820152606401610c4f565b6001600160a01b0387166000908152600f60205260408120805488908110610ff157610ff1615a40565b9060005260206000209060060201905061100a81613950565b61106a5760405162461bcd60e51b815260206004820152602b60248201527f596f7520617265206e6f7420616c6c6f77656420746f2063616e63656c20746860448201526a69732074696d656c6f636b60a81b6064820152608401610c4f565b858160010154146110c85760405162461bcd60e51b815260206004820152602260248201527f4578706563746564207363686564756c65496420646f6573206e6f74206d61746044820152610c6d60f31b6064820152608401610c4f565b848160020154146111315760405162461bcd60e51b815260206004820152602d60248201527f457870656374656420636f6d6d656e63656d656e7454696d657374616d70206460448201526c0decae640dcdee840dac2e8c6d609b1b6064820152608401610c4f565b838160040154146111905760405162461bcd60e51b815260206004820152602360248201527f457870656374656420746f74616c416d6f756e7420646f6573206e6f74206d616044820152620e8c6d60eb1b6064820152608401610c4f565b600061119c89896136c7565b9050600081116111eb5760405162461bcd60e51b815260206004820152601a602482015279151a5b595b1bd8dac81a185cc81b9bc81d985b1d59481b19599d60321b6044820152606401610c4f565b8154611201906001600160a01b031685836139b6565b600061120d8a8a611983565b9050306001600160a01b038b16600080516020615d768339815191526112338585615a56565b60405190815260200160405180910390a361124f308684613a63565b61125a308b83613a63565b604080516001600160a01b038781168252602082018590529181018390528a918c169033907f6945f4788d8a6b16089d616d1f7bb52372bfdbc43addd3386a7842db4199986a9060600160405180910390a4505060048101546003909101555060016112c66001600b55565b9695505050505050565b6040516301ffc9a760e01b81526000906001600160a01b038316906301ffc9a79061131f907f0000000000000000000000000000000000000000000000000000000000000000906004016154d1565b602060405180830381865afa15801561133c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c229190615a69565b6001600160a01b03919091166000908152601560205260409020541490565b61138a3360026129b3565b6113a65760405162461bcd60e51b8152600401610c4f90615a86565b816001600160a01b0316836001600160a01b0316036114045760405162461bcd60e51b815260206004820152601a60248201527914d95b99195c8818d85b9b9bdd081899481c9958da5c1a595b9d60321b6044820152606401610c4f565b61140d8261329b565b6114655760405162461bcd60e51b8152602060048201526024808201527f526563697069656e74206d75737420626520616e206578697374696e6720686f604482015263363232b960e11b6064820152608401610c4f565b6001600160a01b0382161580159061148557506001600160a01b03831615155b6114a15760405162461bcd60e51b8152600401610c4f9061599d565b600081116114f15760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c4f565b60006114fd8483613ab5565b6020810151815191925083916115139190615a56565b10156115315760405162461bcd60e51b8152600401610c4f90615abb565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc99b2bde514504ed57178d8606991e1733b81e03bda36d7c2f70f6a1bd36d5398560405161158091815260200190565b60405180910390a48051156115d257805160405190815230906001600160a01b03861690600080516020615d768339815191529060200160405180910390a36115d230848360005b6020020151613ce8565b6020810151156115e9576115e984848360016115c8565b50505050565b60006115fc3360026129b3565b8061160d575061160d3360046129b3565b8061161e575061161e3360086129b3565b8061162f575061162f3360016129b3565b61164b5760405162461bcd60e51b8152600401610c4f90615ae7565b7f00000000000000000000000000000000000000000000000000000000000000008411156116d25760405162461bcd60e51b815260206004820152602e60248201527f466972737420746f6b656e2072656c656173652064656c61792074696d65203e60448201526d206d617820616c6c6f7761626c6560901b6064820152608401610c4f565b600185101561171c5760405162461bcd60e51b81526020600482015260166024820152754d7573742068617665203e3d20312072656c6561736560501b6044820152606401610c4f565b6127108311156117865760405162461bcd60e51b815260206004820152602f60248201527f496e697469616c2072656c6561736520706f7274696f6e203e20424950535f5060448201526e5245434953494f4e2028313030252960881b6064820152608401610c4f565b60018511156117e157600082116117dc5760405162461bcd60e51b815260206004820152601a602482015279052656c6561736520706572696f64206d757374206265203e20360341b6044820152606401610c4f565b61186d565b61271083146118685760405162461bcd60e51b815260206004820152604760248201527f496e697469616c2072656c6561736520706f7274696f6e206d757374203d204260448201527f4950535f505245434953494f4e2028313030252920666f722073696e676c652060648201526672656c6561736560c81b608482015260a401610c4f565b600091505b604080516080810182528681526020810186815291810185815260608201858152600c805460018082018355600083905294517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c760049092029182015594517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c886015591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c9850155517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca90930192909255905461194b9190615b0a565b604051909150819033907f9c52cb9bbb9b7fa6ddb26d1e82afc4e62c9ec50c0f3488c10bb8ad22d4edc4c390600090a3949350505050565b60008061199084846123ee565b905080606001518160800151116119ab576000915050610c22565b80606001516119ba8585610ef5565b6119c49190615b0a565b915050610c22565b60006001600160a01b038316158015906119ee57506001600160a01b03841615155b611a0a5760405162461bcd60e51b8152600401610c4f9061599d565b6000611a1685336132b8565b905080831115611a895760405162461bcd60e51b815260206004820152603860248201527f54686520617070726f76656420616c6c6f77616e6365206973206c6f776572206044820152771d1a185b881d1a19481d1c985b9cd9995c88185b5bdd5b9d60421b6064820152608401610c4f565b611a948585856139b6565b6000611aa08685613ab5565b602081015181519192508591611ab69190615a56565b1015611ad45760405162461bcd60e51b8152600401610c4f90615abb565b805115611b2957805160405190815230906001600160a01b03881690600080516020615d768339815191529060200160405180910390a3611b1830868360006115c8565b8051611b29908790339085036137d3565b602081015115611b4757611b4586868360016020020151613e8b565b505b6001925050505b9392505050565b611b603360046129b3565b80611b715750611b713360086129b3565b611b8d5760405162461bcd60e51b8152600401610c4f90615b1d565b80611b978161201a565b611bb35760405162461bcd60e51b8152600401610c4f90615b6f565b604051829033907f50278672b645e6b42608510c984891b0715616d121b4104b19cc396b32d75a6290600090a36000828152601460205260408120805490915b81811015611c72576000838281548110611c0f57611c0f615a40565b6000918252602090912001546001600160a01b03169050611c2f81613029565b15611c3d57611c3d81613ea4565b6001600160a01b031660009081526013602090815260408083208390556015909152812055611c6b81615b9e565b9050611bf3565b506000848152601460205260408120611c8a91614fce565b601860008154611c9990615bb7565b9091555050505050565b611cae3360086129b3565b611cca5760405162461bcd60e51b8152600401610c4f906158f6565b601981905560405181815233907ff93bf0996edfefeecf26f755c5ae3a2887202c04f5f69e886fb2a4597065c9d7906020015b60405180910390a250565b611d133360086129b3565b611d2f5760405162461bcd60e51b8152600401610c4f906158f6565b601854811215611d8d5760405162461bcd60e51b8152602060048201526024808201527f486f6c646572206d61782073686f756c64206265203e3d20686f6c64657220636044820152631bdd5b9d60e21b6064820152608401610c4f565b601781905560405181815233907f5041c8f39039e064db3b46de767d10568d916452981160f4548fdafe3c521d0b90602001611cfd565b611dcf3360046129b3565b80611de05750611de03360086129b3565b611dfc5760405162461bcd60e51b8152600401610c4f90615b1d565b826001600160a01b038116611e235760405162461bcd60e51b8152600401610c4f9061599d565b611e2c8461329b565b611e3b57611e39846121bb565b505b611e458484611360565b6115e9576115e9848484613eb4565b600033610eeb818585611e6783836132b8565b611e719190615a56565b6137d3565b8060008160ff1611611e9a5760405162461bcd60e51b8152600401610c4f9061596b565b826001600160a01b038116611ec15760405162461bcd60e51b8152600401610c4f9061599d565b611ecc3360016129b3565b611ee85760405162461bcd60e51b8152600401610c4f906159cc565b611ef284846140dc565b60011515846001600160a01b0316336001600160a01b0316600080516020615d9683398151915286604051610ecf9190615273565b816001600160a01b038116611f4e5760405162461bcd60e51b8152600401610c4f9061599d565b611f593360026129b3565b611f755760405162461bcd60e51b8152600401610c4f90615a86565b7f000000000000000000000000000000000000000000000000000000000000000082611fa060025490565b611faa9190615a56565b111561200b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74206d696e74206d6f7265207468616e20746865206d617820746f60448201526974616c20737570706c7960b01b6064820152608401610c4f565b61201583836141ce565b505050565b600090815260146020526040902054151590565b6001600160a01b038216600090815260056020526040812081908190612055908590614293565b915091508161206c57612067856121fe565b61206e565b805b95945050505050565b6000612081614389565b905090565b60008061209283612d09565b905060005b818110156120c5576120a984826136c7565b6120b39084615a56565b92506120be81615b9e565b9050612097565b5050919050565b600061206e85858585600001518660200151876040015188606001516128d7565b6060816120f98161201a565b6121155760405162461bcd60e51b8152600401610c4f90615b6f565b6000838152601460209081526040918290208054835181840281018401909452808452909183018282801561217357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612155575b505050505091505b50919050565b600c818154811061219157600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b60006121c83360046129b3565b806121d957506121d93360086129b3565b6121f55760405162461bcd60e51b8152600401610c4f90615b1d565b610c2282614394565b6000306001600160a01b0383160361221857506000919050565b61222182612086565b61222a83613046565b610c229190615a56565b61223f3360086129b3565b61225b5760405162461bcd60e51b8152600401610c4f906158f6565b600082116122ab5760405162461bcd60e51b815260206004820181905260248201527f43616e27742073657420686f6c646572206d617820666f722067726f757020306044820152606401610c4f565b6000828152601060205260409020548112156123255760405162461bcd60e51b815260206004820152603360248201527f67726f7570486f6c6465724d6178206d757374206265206774652063757272656044820152721b9d081a1bdb19195c91dc9bdd5c10dbdd5b9d606a1b6064820152608401610c4f565b6000828152601160205260409081902082905551829033907fb76c7f423e2268cb251130a267f887708bbb798d98e0a48bb31b490382ac0eae9061236c9085815260200190565b60405180910390a35050565b600e54604051637f4ab1dd60e01b81526060916001600160a01b031690637f4ab1dd906123a9908590600401615273565b600060405180830381865afa1580156123c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c229190810190615bd4565b6123f6614fec565b6001600160a01b0383166000908152600f6020526040902080548390811061242057612420615a40565b60009182526020918290206040805160c081018252600690930290910180546001600160a01b0316835260018101548385015260028101548383015260038101546060840152600481015460808401526005810180548351818702810187019094528084529394919360a0860193928301828280156124c857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124aa575b505050505081525050905092915050565b6000806124e583612d09565b905060005b818110156120c5576124fc8482611983565b6125069084615a56565b925061251181615b9e565b90506124ea565b6000838281146125845760405162461bcd60e51b815260206004820152603160248201527f526563697069656e74202620616d6f756e7420617272617973206d75737420626044820152700ca40e8d0ca40e6c2daca40d8cadccee8d607b1b6064820152608401610c4f565b60005b818110156126405760008787838181106125a3576125a3615a40565b90506020020160208101906125b891906151f8565b90506001600160a01b03811661260b5760405162461bcd60e51b815260206004820152601860248201527743616e6e6f742073656e6420746f2030206164647265737360401b6044820152606401610c4f565b61262d8187878581811061262157612621615a40565b90506020020135612bce565b50508061263990615b9e565b9050612587565b5060019695505050505050565b6000816126598161201a565b6126755760405162461bcd60e51b8152600401610c4f90615b6f565b6000838152601460205260408120805490915b818110156126db576126bf8382815481106126a5576126a5615a40565b6000918252602090912001546001600160a01b03166121fe565b6126c99086615a56565b94506126d481615b9e565b9050612688565b50505050919050565b60006126ee6138f7565b6126f93360026129b3565b8061270a575061270a3360046129b3565b8061271b575061271b3360086129b3565b8061272c575061272c3360016129b3565b6127485760405162461bcd60e51b8152600401610c4f90615ae7565b8151600a101561279a5760405162461bcd60e51b815260206004820152601e60248201527f4d61782031302063616e63656c61626c654279206164647265737365657300006044820152606401610c4f565b6019546127a687613290565b6127b09087615a56565b101561280a5760405162461bcd60e51b8152602060048201526024808201527f526573756c74696e672062616c616e6365203c206d696e57616c6c657442616c604482015263616e636560e01b6064820152608401610c4f565b60006128198787878733614524565b835190915015612876576001600160a01b0387166000908152600f6020526040902080548491908390811061285057612850615a40565b9060005260206000209060060201600501908051906020019061287492919061502b565b505b83876001600160a01b0316336001600160a01b03167f8d92942330bb9e8e714a4f66aa3eefe27f66d05b8ae4b6f6889e5a64a16155be898986896040516128c09493929190615c67565b60405180910390a4600191505061206e6001600b55565b6000868811156128e9575060006129a8565b60006128f58989615b0a565b9050612902600187615b0a565b61290c9084615c8c565b6129169086615a56565b811061292557869150506129a8565b8481106129a6576127106129398589615c8c565b6129439190615ca3565b9150826129508683615b0a565b106129a6576000836129628784615b0a565b61296c9190615ca3565b9050612979600188615b0a565b81612984858b615b0a565b61298e9190615c8c565b6129989190615ca3565b6129a29084615a56565b9250505b505b979650505050505050565b60008160008160ff16116129d95760405162461bcd60e51b8152600401610c4f9061596b565b836001600160a01b038116612a005760405162461bcd60e51b8152600401610c4f9061599d565b6001600160a01b03851660009081526009602052604090205460ff808616918616161492505b505092915050565b606060048054610ca690615937565b600061206e858585600c8681548110612a5857612a58615a40565b90600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250506120cc565b6000612aab3360016129b3565b612ac75760405162461bcd60e51b8152600401610c4f906159cc565b61208161488b565b6000806000612adf846006614293565b9150915081611b4e57600254610f1c565b816001600160a01b038116612b175760405162461bcd60e51b8152600401610c4f9061599d565b612b223360026129b3565b612b3e5760405162461bcd60e51b8152600401610c4f90615a86565b61201583836148e5565b60003381612b5682866132b8565b905083811015612bb65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c4f565b612bc382868684036137d3565b506001949350505050565b6000612bdb3384846139b6565b611b4e8383614a18565b6000612bef6138f7565b82612bfa3384611983565b1015612c3c5760405162461bcd60e51b8152602060048201526011602482015270105b5bdd5b9d080f881d5b9b1bd8dad959607a1b6044820152606401610c4f565b612c473385856139b6565b336000908152600f60205260409020805484919084908110612c6b57612c6b615a40565b90600052602060002090600602016003016000828254612c8b9190615a56565b909155505060405183815230903390600080516020615d768339815191529060200160405180910390a3612cc0308585613a63565b506001611b4e6001600b55565b600080612cda84846123ee565b90508060600151816080015111612cf5576000915050610c22565b806060015181608001516119c49190615b0a565b6001600160a01b03166000908152600f602052604090205490565b6000612d313360026129b3565b80612d425750612d423360046129b3565b80612d535750612d533360086129b3565b80612d645750612d643360016129b3565b612d805760405162461bcd60e51b8152600401610c4f90615ae7565b8988148015612d8e57508986145b8015612d9957508984145b612ddf5760405162461bcd60e51b815260206004820152601760248201527609ad2e6dac2e8c6d0cac840c2e4e4c2f240d8cadccee8d604b1b6044820152606401610c4f565b60005b8a811015612eef57612e988c8c83818110612dff57612dff615a40565b9050602002016020810190612e1491906151f8565b8b8b84818110612e2657612e26615a40565b905060200201358a8a85818110612e3f57612e3f615a40565b90506020020135898986818110612e5857612e58615a40565b905060200201358888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e492505050565b612edf5760405162461bcd60e51b815260206004820152601860248201527743616e206e6f742072656c65617365207363686564756c6560401b6044820152606401610c4f565b612ee881615b9e565b9050612de2565b5060019b9a5050505050505050505050565b826001600160a01b038116612f285760405162461bcd60e51b8152600401610c4f9061599d565b612f333360046129b3565b80612f445750612f443360086129b3565b612f605760405162461bcd60e51b8152600401610c4f90615b1d565b612f6c84846001611dc4565b6115e984835b816001600160a01b038116612f995760405162461bcd60e51b8152600401610c4f9061599d565b612fa43360046129b3565b80612fb55750612fb53360086129b3565b612fd15760405162461bcd60e51b8152600401610c4f90615b1d565b6001600160a01b038316600081815260126020526040808220805460ff1916861515908117909155905190929133917f17ec2643977f0865dd45350e9efdcdfead258c9220974e67d1a37ca1447722939190a4505050565b6001600160a01b0316600090815260156020526040902054151590565b6000613051826124d9565b61222a83613290565b600e5460405163cfdb31a960e01b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092169063cfdb31a990608401602060405180830381865afa1580156130ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190615cc5565b60006130eb3360046129b3565b806130fc57506130fc3360086129b3565b6131185760405162461bcd60e51b8152600401610c4f90615b1d565b81806131615760405162461bcd60e51b815260206004820152601860248201527741646472657373657320617272617920697320656d70747960401b6044820152606401610c4f565b61318c8484600081811061317757613177615a40565b905060200201602081019061081191906151f8565b915060015b81811015612a26576131c98585838181106131ae576131ae615a40565b90506020020160208101906131c391906151f8565b8461355e565b6131d281615b9e565b9050613191565b6000826131e58161201a565b6132015760405162461bcd60e51b8152600401610c4f90615b6f565b6000848152601460205260408120805490915b8181101561328657600083828154811061323057613230615a40565b60009182526020808320909101546001600160a01b0316808352601590915260409091205490915087900361327557613268816121fe565b6132729087615a56565b95505b5061327f81615b9e565b9050613214565b5050505092915050565b6000610c22826137b8565b6001600160a01b0316600090815260136020526040902054151590565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6132ee3360016129b3565b61330a5760405162461bcd60e51b8152600401610c4f906159cc565b806001600160a01b0381166133315760405162461bcd60e51b8152600401610c4f9061599d565b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a79061337d907f0000000000000000000000000000000000000000000000000000000000000000906004016154d1565b602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be9190615a69565b6134305760405162461bcd60e51b815260206004820152603d60248201527f4e6577207472616e736665722072756c657320636f6e747261637420646f657360448201527f206e6f7420696d706c656d656e7420495472616e7366657252756c65730000006064820152608401610c4f565b600e80546001600160a01b038481166001600160a01b031983161790925560405190821691831690829033907f8c78349fc44add47ae711ddc6e926b7845597c57473e587420693d8d0547845a90600090a4505050565b6134923360086129b3565b6134ae5760405162461bcd60e51b8152600401610c4f906158f6565b600083815260166020908152604080832085845282529182902083905590518281528391859133917f5845e315015ee03f0d4ab1d198172b4f733609dc3de8b957ae1d86c874030189910160405180910390a4505050565b600f602052816000526040600020818154811061352257600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004909401546001600160a01b039093169550909350919085565b806135688161201a565b6135845760405162461bcd60e51b8152600401610c4f90615b6f565b61358f3360046129b3565b806135a057506135a03360086129b3565b6135bc5760405162461bcd60e51b8152600401610c4f90615b1d565b6001600160a01b0383166000908152601360205260409020541561361b5760405162461bcd60e51b81526020600482015260166024820152754164647265737320616c72656164792065786973747360501b6044820152606401610c4f565b6001600160a01b038316600081815260136020908152604080832086905585835260148252822080546001810182559083528183200180546001600160a01b0319169093179092558080526010909152600080516020615d568339815191528054829061368790615ce2565b9091555060405183906001600160a01b038616907fb2573672e2480c8f624b08c00e6db4240a88cf3c585b508bd75258f69e64cdda90600090a350505050565b6000806136d484846123ee565b905080606001518160800151116136ef576000915050610c22565b6136f98484610ef5565b81608001516119c49190615b0a565b600061371330612086565b61371c30613046565b6120819190615a56565b80158061373a575061373833836132b8565b155b6137a15760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420617070726f76652066726f6d206e6f6e2d7a65726f20746f206044820152716e6f6e2d7a65726f20616c6c6f77616e636560701b6064820152608401610c4f565b6120158282610edd565b80546001019055565b5490565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b0383166138355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4f565b6001600160a01b0382166138965760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6002600b54036139495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c4f565b6002600b55565b6005810154600090815b818110156139ac5783600501818154811061397757613977615a40565b6000918252602090912001546001600160a01b0316330361399c575060019392505050565b6139a581615b9e565b905061395a565b5060009392505050565b60006139c384848461305a565b600e54604051637d8e7d1b60e01b81529192506001600160a01b031690637d8e7d1b906139f4908490600401615273565b602060405180830381865afa158015613a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a359190615a69565b613a3e82612378565b90613a5c5760405162461bcd60e51b8152600401610c4f919061513c565b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612015908490614a7a565b613abd615090565b6000613ac884613290565b90506000613ad5856124d9565b905083613ae28284615a56565b1015613b465760405162461bcd60e51b815260206004820152602d60248201527f496e76616c69643a20756e6c6f636b6564202b2062616c616e6365203c20747260448201526c185b9cd9995c88185b5bdd5b9d609a1b6064820152608401610c4f565b8360005b613b5387612d09565b811015613ccd576001600160a01b0387166000908152600f60205260409020805482908110613b8457613b84615a40565b906000526020600020906006020160040154600f6000896001600160a01b03166001600160a01b031681526020019081526020016000208281548110613bcc57613bcc615a40565b9060005260206000209060060201600301540315613cbd576000613bf08883611983565b905080831115613c5e57613c048184615b0a565b6001600160a01b0389166000908152600f602052604090208054919450829184908110613c3357613c33615a40565b90600052602060002090600602016003016000828254613c539190615a56565b90915550613cbb9050565b6001600160a01b0388166000908152600f60205260409020805484919084908110613c8b57613c8b615a40565b90600052602060002090600602016003016000828254613cab9190615a56565b9091555060009350613ccd915050565b505b613cc681615b9e565b9050613b4a565b50613cd88186615b0a565b8452602084015250909392505050565b6001600160a01b038316613d4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4f565b6001600160a01b038216613dae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4f565b613db9838383614b4c565b6001600160a01b03831660009081526020819052604090205481811015613e315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c4f565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020615d76833981519152910160405180910390a36115e9848484614b94565b600033613e99858285614c42565b612bc3858585613ce8565b613eb18160006001613eb4565b50565b82613ebe8161329b565b613f0a5760405162461bcd60e51b815260206004820152601f60248201527f486f6c6465722773206164647265737320646f6573206e6f74206578697374006044820152606401610c4f565b6000838152601160209081526040808320546001600160a01b038816845260138352818420546015909352908320549092808413929190613f4b83836131d9565b90506000613f59848a6131d9565b60195490915088158015613f6d5750600081115b15613fcc578915613fcc576000613f838c6121fe565b905081811015613fca5760405162461bcd60e51b815260206004820152601260248201527142616c616e636520697320746f6f206c6f7760701b6044820152606401610c4f565b505b816000036140595785156140385760008a81526010602052604090205487136140385760405162461bcd60e51b815260206004820152602a6024820152600080516020615d3683398151915260448201526907320696e2067726f75760b41b6064820152608401610c4f565b60008a8152601060205260408120805490919061405490615ce2565b909155505b6140628b6121fe565b8303614089576000848152601060205260408120805490919061408490615bb7565b909155505b6001600160a01b038b166000818152601560205260408082208d9055518c929133917ff213aa445739b8d5bb514c5e3142fe13baacfa991314172ceaf756996259b8b39190a45050505050505050505050565b6001600160a01b03821660009081526009602052604090205460ff808316918316160361413e5760405162461bcd60e51b815260206004820152601060248201526f416c72656164792068617320726f6c6560801b6044820152606401610c4f565b6001600160a01b03821660009081526009602052604090205460011615801561416957506001811615155b1561419b57600a805460ff1690600061418183615cfa565b91906101000a81548160ff021916908360ff160217905550505b6001600160a01b03919091166000908152600960205260409020805460ff19811660ff9182169190931617919091179055565b6001600160a01b0382166142245760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c4f565b61423060008383614b4c565b80600260008282546142429190615a56565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020615d76833981519152910160405180910390a361428f60008383614b94565b5050565b600080600084116142df5760405162461bcd60e51b815260206004820152601660248201527504552433230536e617073686f743a20696420697320360541b6044820152606401610c4f565b6142e7614389565b8411156143365760405162461bcd60e51b815260206004820152601d60248201527f4552433230536e617073686f743a206e6f6e6578697374656e742069640000006044820152606401610c4f565b60006143428486614cb6565b8454909150810361435a576000809250925050614382565b600184600101828154811061437157614371615a40565b906000526020600020015492509250505b9250929050565b600061208160085490565b6000816001600160a01b0381166143bd5760405162461bcd60e51b8152600401610c4f9061599d565b6143c68361329b565b156144035760405162461bcd60e51b815260206004820152600d60248201526c486f6c6465722065786973747360981b6044820152606401610c4f565b6017546018541261444e5760405162461bcd60e51b81526020600482015260216024820152600080516020615d368339815191526044820152607360f81b6064820152608401610c4f565b60186000815461445d90615ce2565b9091555061446f600d80546001019055565b600d546001600160a01b038416600081815260136020908152604080832085905584835260148252822080546001810182559083528183200180546001600160a01b0319169093179092558080526010909152600080516020615d568339815191528054929450909182906144e390615ce2565b909155506040516001600160a01b0385169084907ffdd9f2f6082336dbf994cf6443419e59a158b248c3fa9c9d01166a729754541190600090a35050919050565b6001600160a01b0385166000908152600f6020526040812054612710116145865760405162461bcd60e51b815260206004820152601660248201527513585e081d1a5b595b1bd8dadcc8195e18d95959195960521b6044820152606401610c4f565b7f00000000000000000000000000000000000000000000000000000000000000008510156145ed5760405162461bcd60e51b8152602060048201526014602482015273416d6f756e74203c206d696e2066756e64696e6760601b6044820152606401610c4f565b6001600160a01b03861661463b5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742066756e642030206164647265737360581b6044820152606401610c4f565b600c54831061467d5760405162461bcd60e51b815260206004820152600e60248201526d109859081cd8da19591d5b19525960921b6044820152606401610c4f565b600c838154811061469057614690615a40565b9060005260206000209060040201600001548510156146f15760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d757374206265203e3d2072656c65617365436f756e7400006044820152606401610c4f565b6146fb3086614a18565b506040518581526001600160a01b038716903090600080516020615d768339815191529060200160405180910390a36147547f000000000000000000000000000000000000000000000000000000000000000042615a56565b600c848154811061476757614767615a40565b906000526020600020906004020160010154856147849190615a56565b11156147d15760405162461bcd60e51b815260206004820152601c60248201527b496e697469616c2072656c65617365206f7574206f662072616e676560201b6044820152606401610c4f565b6147d9614fec565b60208181018581526040808401888152608085018a81526001600160a01b0388811687528c81166000908152600f875293842080546001808201835591865294879020885160069096020180546001600160a01b031916959092169490941781559351928401929092555160028301556060840151600383015551600482015560a08301518051849361487392600585019291019061502b565b505050600161488188612d09565b6129a89190615b0a565b600061489b600880546001019055565b60006148a5614389565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040516148d891815260200190565b60405180910390a1919050565b6001600160a01b0382166149455760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c4f565b61495182600083614b4c565b6001600160a01b038216600090815260208190526040902054818110156149c55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c4f565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020615d76833981519152910160405180910390a361201583600084614b94565b600080614a253384613ab5565b805190915015614a6357805160405190815230903390600080516020615d768339815191529060200160405180910390a3614a6330858360006115c8565b602081015115610eeb57610eeb33858360016115c8565b6000614acf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614d579092919063ffffffff16565b8051909150156120155780806020019051810190614aed9190615a69565b6120155760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c4f565b6001600160a01b038316614b6b57614b6382614d66565b612015614d90565b6001600160a01b038216614b8257614b6383614d66565b614b8b83614d66565b61201582614d66565b614b9d8261329b565b158015614bb257506001600160a01b03821615155b15614bc257614bc082614394565b505b6019548015801590614bdc57506001600160a01b03841615155b156115e9576000614bec856121fe565b9050801580614bfd57506019548110155b613a5c5760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642077616c6c65742062616c616e636560501b6044820152606401610c4f565b6000614c4e84846132b8565b905060001981146115e95781811015614ca95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c4f565b6115e984848484036137d3565b81546000908103614cc957506000610c22565b82546000905b80821015614d13576000614ce38383614da0565b905084614cf08783614dbb565b541115614cff57809150614d0d565b614d0a816001615a56565b92505b50614ccf565b600082118015614d36575083614d3386614d2e600186615b0a565b614dbb565b54145b15614d4f57614d46600183615b0a565b92505050610c22565b509050610c22565b6060610f1c8484600085614dcc565b6001600160a01b0381166000908152600560205260409020613eb190614d8b836121fe565b614e9c565b614d9e6006614d8b60025490565b565b6000614daf6002848418615ca3565b611b4e90848416615a56565b600082815260208120820180610f1c565b606082471015614e2d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c4f565b600080866001600160a01b03168587604051614e499190615d19565b60006040518083038185875af1925050503d8060008114614e86576040519150601f19603f3d011682016040523d82523d6000602084013e614e8b565b606091505b50915091506129a887838387614ee6565b6000614ea6614389565b905080614eb284614f5f565b1015612015578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b60608315614f55578251600003614f4e576001600160a01b0385163b614f4e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c4f565b5081610f1c565b610f1c8383614fa4565b80546000908103614f7257506000919050565b81548290614f8290600190615b0a565b81548110614f9257614f92615a40565b90600052602060002001549050919050565b815115614fb45781518083602001fd5b8060405162461bcd60e51b8152600401610c4f919061513c565b5080546000825590600052602060002090810190613eb191906150ae565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215615080579160200282015b8281111561508057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061504b565b5061508c9291506150ae565b5090565b60405180604001604052806002906020820280368337509192915050565b5b8082111561508c57600081556001016150af565b6000602082840312156150d557600080fd5b81356001600160e01b031981168114611b4e57600080fd5b8015158114613eb157600080fd5b60006020828403121561510d57600080fd5b8135611b4e816150ed565b60005b8381101561513357818101518382015260200161511b565b50506000910152565b602081526000825180602084015261515b816040850160208701615118565b601f01601f19169190910160400192915050565b6001600160a01b0381168114613eb157600080fd5b60ff81168114613eb157600080fd5b600080604083850312156151a657600080fd5b82356151b18161516f565b915060208301356151c181615184565b809150509250929050565b600080604083850312156151df57600080fd5b82356151ea8161516f565b946020939093013593505050565b60006020828403121561520a57600080fd5b8135611b4e8161516f565b60008060008060008060c0878903121561522e57600080fd5b86356152398161516f565b95506020870135945060408701359350606087013592506080870135915060a08701356152658161516f565b809150509295509295509295565b60ff91909116815260200190565b60008060006060848603121561529657600080fd5b83356152a18161516f565b925060208401356152b18161516f565b929592945050506040919091013590565b600080600080608085870312156152d857600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561530657600080fd5b5035919050565b60008060006060848603121561532257600080fd5b833561532d8161516f565b9250602084013591506040840135615344816150ed565b809150509250925092565b6000806040838503121561536257600080fd5b50508035926020909101359150565b6000806040838503121561538457600080fd5b823561538f8161516f565b915060208301356151c18161516f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156153dd576153dd61539f565b604052919050565b60008060008084860360e08112156153fc57600080fd5b8535945060208601359350604086013592506080605f198201121561542057600080fd5b50604051608081016001600160401b03811182821017156154435761544361539f565b8060405250606086013581526080860135602082015260a0860135604082015260c086013560608201528091505092959194509250565b600081518084526020808501945080840160005b838110156154b35781516001600160a01b03168752958201959082019060010161548e565b509495945050505050565b602081526000611b4e602083018461547a565b6001600160e01b031991909116815260200190565b6000602082840312156154f857600080fd5b8135611b4e81615184565b6020815260018060a01b038251166020820152602082015160408201526040820151606082015260608201516080820152608082015160a0820152600060a083015160c080840152610f1c60e084018261547a565b60008083601f84011261556a57600080fd5b5081356001600160401b0381111561558157600080fd5b6020830191508360208260051b850101111561438257600080fd5b600080600080604085870312156155b257600080fd5b84356001600160401b03808211156155c957600080fd5b6155d588838901615558565b909650945060208701359150808211156155ee57600080fd5b506155fb87828801615558565b95989497509550505050565b600080600080600060a0868803121561561f57600080fd5b853561562a8161516f565b94506020868101359450604087013593506060870135925060808701356001600160401b038082111561565c57600080fd5b818901915089601f83011261567057600080fd5b8135818111156156825761568261539f565b8060051b91506156938483016153b5565b818152918301840191848101908c8411156156ad57600080fd5b938501935b838510156156d757843592506156c78361516f565b82825293850193908501906156b2565b8096505050505050509295509295909350565b600080600080600080600060e0888a03121561570557600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060006060848603121561574b57600080fd5b83356157568161516f565b95602085013595506040909401359392505050565b60008060008060008060008060008060a08b8d03121561578a57600080fd5b8a356001600160401b03808211156157a157600080fd5b6157ad8e838f01615558565b909c509a5060208d01359150808211156157c657600080fd5b6157d28e838f01615558565b909a50985060408d01359150808211156157eb57600080fd5b6157f78e838f01615558565b909850965060608d013591508082111561581057600080fd5b61581c8e838f01615558565b909650945060808d013591508082111561583557600080fd5b506158428d828e01615558565b915080935050809150509295989b9194979a5092959850565b6000806040838503121561586e57600080fd5b82356158798161516f565b915060208301356151c1816150ed565b6000806020838503121561589c57600080fd5b82356001600160401b038111156158b257600080fd5b6158be85828601615558565b90969095509350505050565b6000806000606084860312156158df57600080fd5b505081359360208301359350604090920135919050565b60208082526021908201527f446f6573206e6f742068617665207472616e736665722061646d696e20726f6c6040820152606560f81b606082015260800190565b600181811c9082168061594b57607f821691505b60208210810361217b57634e487b7160e01b600052602260045260246000fd5b602080825260189082015277446f6573206e6f7420686176652076616c696420726f6c6560401b604082015260600190565b6020808252601590820152740416464726573732063616e6e6f742062652030783605c1b604082015260600190565b60208082526021908201527f446f6573206e6f74206861766520636f6e74726163742061646d696e20726f6c6040820152606560f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060ff821680615a3657615a36615a0d565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c2257610c22615a0d565b600060208284031215615a7b57600080fd5b8151611b4e816150ed565b6020808252818101527f446f6573206e6f74206861766520726573657276652061646d696e20726f6c65604082015260600190565b602080825260129082015271496e737566666963656e7420746f6b656e7360701b604082015260600190565b6020808252600990820152682737ba1030b236b4b760b91b604082015260600190565b81810381811115610c2257610c22615a0d565b60208082526032908201527f446f6573206e6f7420686176652077616c6c6574732061646d696e206f72207460408201527172616e736665722061646d696e20726f6c6560701b606082015260800190565b602080825260159082015274121bdb19195c88191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060018201615bb057615bb0615a0d565b5060010190565b6000600160ff1b8201615bcc57615bcc615a0d565b506000190190565b600060208284031215615be657600080fd5b81516001600160401b0380821115615bfd57600080fd5b818401915084601f830112615c1157600080fd5b815181811115615c2357615c2361539f565b615c36601f8201601f19166020016153b5565b9150808252856020828501011115615c4d57600080fd5b615c5e816020840160208601615118565b50949350505050565b8481528360208201528260408201526080606082015260006112c6608083018461547a565b8082028115828204841417610c2257610c22615a0d565b600082615cc057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215615cd757600080fd5b8151611b4e81615184565b60006001600160ff1b018201615bb057615bb0615a0d565b600060ff821660ff8103615d1057615d10615a0d565b60010192915050565b60008251615d2b818460208701615118565b919091019291505056fe52656163686564206d6178696d756d206e756d626572206f6620686f6c6465726e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7e9e87d17fbf2950f3379a6331b75b6e997a147bbd3eaedc68c30c62186c68cba26469706673582212200f4b320d4e967be75bf417ad35f0949739e188d46c72c3656719a5e21e6746ae64736f6c63430008110033000000000000000000000000fb23108ebefcb2079a98aa7b2480307f47cb81e70000000000000000000000009e56ab46a47cbc0d0fb49ec18b94e74a68f5b089000000000000000000000000386f942cbc11be2dae9de41cbb44f18b6fef18f4000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000014ad368000000000000000000000000000000000000000000000000000000000000000044e4f544500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d52657075626c6963204e6f746500000000000000000000000000000000000000