12 txs
13 calls
constructor
constructor(address adminAddress)
functions
adminWithdrawAddress
viewfunction adminWithdrawAddress() view returns (address)
beneficiaries
viewfunction beneficiaries(uint256, address) view returns (uint256 amount, bool exists)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getBeneficiary
viewfunction getBeneficiary(uint256 saleTypeId, address beneficiaryAddress) view returns (tuple)
getClaimableTokens
viewfunction getClaimableTokens(uint256 saleTypeId, address beneficiaryAddress) view returns (uint256)
getCurrentTimestamp
viewfunction getCurrentTimestamp() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSaleType
viewfunction getSaleType(uint256 saleTypeId) view returns (tuple)
getSaleTypesCount
viewfunction getSaleTypesCount() view returns (uint256)
getTokensClaimed
viewfunction getTokensClaimed(uint256 saleTypeId, address beneficiary) view returns (uint256)
getTokensToBeClaimedInTotal
viewfunction getTokensToBeClaimedInTotal(uint256 saleTypeId, address _addressToClaimFor) view returns (uint256 tokensLeftToClaim)
getTokenToClaim
viewfunction getTokenToClaim() view returns (address)
getTokenToClaimDecimals
viewfunction getTokenToClaimDecimals() view returns (uint256)
getVestingScheduleWithCliff
viewfunction getVestingScheduleWithCliff(uint256 saleTypeId, uint256 vestingAllocation, uint64 timestamp) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isContractEnabled
viewfunction isContractEnabled() view returns (bool)
saleTypes
viewfunction saleTypes(uint256) view returns (bool exists, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
saleTypesCount
viewfunction saleTypesCount() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokensClaimed
viewfunction tokensClaimed(uint256, address) view returns (uint256)
tokenToClaimAddress
viewfunction tokenToClaimAddress() view returns (address)
tokenToClaimDecimals
viewfunction tokenToClaimDecimals() view returns (uint256)
totalTokensDeposited
viewfunction totalTokensDeposited() view returns (uint256)
addOrUpdateBeneficiaries
nonpayablefunction addOrUpdateBeneficiaries(uint256 saleTypeId, address[] addresses, uint256[] amounts)
addSaleType
nonpayablefunction addSaleType(uint256 id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
adminSetTokenToClaim
nonpayablefunction adminSetTokenToClaim(address _tokenToClaimAddress, uint256 _tokenToClaimDecimals)
adminWithdrawETH
nonpayablefunction adminWithdrawETH()
adminWithdrawToken
nonpayablefunction adminWithdrawToken(address token)
claimTokens
nonpayablefunction claimTokens(uint256 saleTypeId) returns (bool)
claimTokensOnBehalfOf
nonpayablefunction claimTokensOnBehalfOf(uint256 saleTypeId, address beneficiaryAddress) returns (bool)
claimTokensToNewAddress
nonpayablefunction claimTokensToNewAddress(uint256 saleTypeId, address claimToAddress) returns (bool)
depositTokens
nonpayablefunction depositTokens(uint256 amount)
enableContract
nonpayablefunction enableContract(bool _isContractEnabled)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAdminWithdrawAddress
nonpayablefunction setAdminWithdrawAddress(address _adminWithdrawAddress)
updateSaleType
nonpayablefunction updateSaleType(uint256 id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
events
AdminWithdrawAddressUpdated
event AdminWithdrawAddressUpdated(address newAdminWithdrawAddress)
BeneficiaryAdded
event BeneficiaryAdded(uint256 indexed saleTypeId, address indexed beneficiary, uint256 amount)
BeneficiaryUpdated
event BeneficiaryUpdated(uint256 indexed saleTypeId, address indexed beneficiary, uint256 amount)
EnableContractEvent
event EnableContractEvent(bool isEnabled)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SaleTypeAdded
event SaleTypeAdded(uint256 indexed id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
SaleTypeUpdated
event SaleTypeUpdated(uint256 indexed id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
TokenRecovered
event TokenRecovered(address beneficiary, address token, uint256 amount)
TokensClaimedEvent
event TokensClaimedEvent(uint256 indexed saleTypeId, address indexed beneficiary, uint256 amount)
TokensClaimedToEvent
event TokensClaimedToEvent(uint256 indexed saleTypeId, address indexed sender, address claimToAddress, uint256 amount)
TokensDeposited
event TokensDeposited(address indexed admin, uint256 amount)
TokenToClaimUpdated
event TokenToClaimUpdated(address tokenAddress, uint256 tokenDecimals)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
FailedToWithdrawEth
error FailedToWithdrawEth(address beneficiary, uint256 amount)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405260006006556000600960146101000a81548160ff0219169083151502179055503480156200003157600080fd5b50604051620049793803806200497983398181016040528101906200005791906200029b565b60018081905550620000736000801b82620000bc60201b60201c565b5080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002cd565b6000620000d08383620001bf60201b60201c565b620001b457600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001506200022960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050620001b9565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002638262000236565b9050919050565b620002758162000256565b81146200028157600080fd5b50565b60008151905062000295816200026a565b92915050565b600060208284031215620002b457620002b362000231565b5b6000620002c48482850162000284565b91505092915050565b61469c80620002dd6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80638c39c36611610130578063b5c77ec9116100b8578063ed84fc911161007c578063ed84fc91146106da578063f02a9df8146106e4578063fb11a71314610714578063fdae9f0914610744578063fee9d13b1461077a57610232565b8063b5c77ec914610626578063cf8912c514610642578063d547741f14610672578063dd49756e1461068e578063e6f2a650146106aa57610232565b8063a188510e116100ff578063a188510e14610592578063a217fddf146105b0578063a30fc30f146105ce578063a9c6b961146105ea578063b13a30701461060857610232565b80638c39c366146104f6578063919ca0361461051457806391d14854146105445780639d602d2d1461057457610232565b806336568abe116101be578063542472d111610182578063542472d1146104525780636c9230db1461046e57806378cb8e1f1461048c5780637c96b703146104a85780638bcdf9e6146104c657610232565b806336568abe1461038a57806346e04a2f146103a65780634b2da173146103d65780634c81a9fc146103f25780634d8b30fd1461042257610232565b8063193aa35711610205578063193aa357146102d15780631ddb52c314610302578063248a9ca314610320578063264d5b7e146103505780632f2ff15d1461036e57610232565b806301ffc9a714610237578063054bb184146102675780630559225e1461028357806306cc759b146102a1575b600080fd5b610251600480360381019061024c9190612faf565b610796565b60405161025e9190612ff7565b60405180910390f35b610281600480360381019061027c91906130a6565b610810565b005b61028b610912565b60405161029891906130f5565b60405180910390f35b6102bb60048036038101906102b69190613110565b610918565b6040516102c8919061319d565b60405180910390f35b6102eb60048036038101906102e69190613110565b6109a8565b6040516102f99291906131b8565b60405180910390f35b61030a6109e6565b60405161031791906130f5565b60405180910390f35b61033a60048036038101906103359190613217565b6109ec565b6040516103479190613253565b60405180910390f35b610358610a0b565b60405161036591906130f5565b60405180910390f35b6103886004803603810190610383919061326e565b610a15565b005b6103a4600480360381019061039f919061326e565b610a37565b005b6103c060048036038101906103bb91906132ae565b610ab2565b6040516103cd9190612ff7565b60405180910390f35b6103f060048036038101906103eb919061344d565b610b24565b005b61040c60048036038101906104079190613110565b610ce6565b60405161041991906130f5565b60405180910390f35b61043c6004803603810190610437919061354b565b610d41565b60405161044991906130f5565b60405180910390f35b61046c6004803603810190610467919061359e565b610d57565b005b610476610de0565b60405161048391906130f5565b60405180910390f35b6104a660048036038101906104a19190613681565b610de8565b005b6104b0611107565b6040516104bd91906130f5565b60405180910390f35b6104e060048036038101906104db9190613110565b611111565b6040516104ed91906130f5565b60405180910390f35b6104fe611125565b60405161050b9190613725565b60405180910390f35b61052e60048036038101906105299190613110565b61114b565b60405161053b9190612ff7565b60405180910390f35b61055e6004803603810190610559919061326e565b6111be565b60405161056b9190612ff7565b60405180910390f35b61057c611228565b6040516105899190612ff7565b60405180910390f35b61059a61123b565b6040516105a791906130f5565b60405180910390f35b6105b8611241565b6040516105c59190613253565b60405180910390f35b6105e860048036038101906105e3919061344d565b611248565b005b6105f2611422565b6040516105ff9190613725565b60405180910390f35b61061061144c565b60405161061d9190613725565b60405180910390f35b610640600480360381019061063b9190613740565b611472565b005b61065c60048036038101906106579190613110565b6114d4565b60405161066991906130f5565b60405180910390f35b61068c6004803603810190610687919061326e565b6114f9565b005b6106a860048036038101906106a391906132ae565b61151b565b005b6106c460048036038101906106bf9190613110565b611635565b6040516106d19190612ff7565b60405180910390f35b6106e26116a8565b005b6106fe60048036038101906106f99190613110565b611821565b60405161070b91906130f5565b60405180910390f35b61072e600480360381019061072991906132ae565b611aa0565b60405161073b9190613888565b60405180910390f35b61075e600480360381019061075991906132ae565b611bbd565b60405161077197969594939291906138f4565b60405180910390f35b610794600480360381019061078f919061359e565b611ca1565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610809575061080882611deb565b5b9050919050565b6000801b61081d81611e55565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361088c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610883906139dc565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003819055507f7936868a59d2e797a4315aa6b7d24381f9ee279564ac96af399f7f1c33651e7d83836040516109059291906139fc565b60405180910390a1505050565b60035481565b610920612ee6565b6007600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050905092915050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16905082565b60045481565b6000806000838152602001908152602001600020600101549050919050565b6000600354905090565b610a1e826109ec565b610a2781611e55565b610a318383611e69565b50505050565b610a3f611f5a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aad8282611f62565b505050565b6000610abc612054565b600960149054906101000a900460ff16610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290613a71565b60405180910390fd5b610b15823361209a565b9050610b1f6124a8565b919050565b6000801b610b3181611e55565b6000600560008a81526020019081526020016000206005015403610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8190613add565b60405180910390fd5b6127108410610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613b6f565b60405180910390fd5b6040518060e00160405280600115158152602001888152602001871515815260200186815260200185815260200184815260200183815250600560008a815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001019081610c4e9190613d9b565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060155905050877ffdfecf9ae321b9aba7611994888e27a99228920c2db6d6e7bee09b3d3fa93f56888888888888604051610cd496959493929190613e6d565b60405180910390a25050505050505050565b60006008600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610d4e8484846124b1565b90509392505050565b6000801b610d6481611e55565b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6efade7a037a29140c298b17665cd06da1460e2d5727571a89d088e5b87f70b182604051610dd49190613725565b60405180910390a15050565b600042905090565b6000801b610df581611e55565b828290508585905014610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613f47565b60405180910390fd5b6005600087815260200190815260200160002060000160009054906101000a900460ff16610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790613add565b60405180910390fd5b60005b858590508110156110fe576000868683818110610ec357610ec2613f67565b5b9050602002016020810190610ed8919061359e565b90506000858584818110610eef57610eee613f67565b5b905060200201359050600760008a815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff161561100a5780600760008b815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff16897fcc48c5aaae5f382143bcf9fbd224a5ffe7ee3fcbb98015117c924f7e018b213e83604051610ffd91906130f5565b60405180910390a36110ef565b604051806040016040528082815260200160011515815250600760008b815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050508173ffffffffffffffffffffffffffffffffffffffff16897f92fd1cf6fed7907a564ec000f260e731976d372859510555d34963d2d42578a7836040516110e691906130f5565b60405180910390a35b50508080600101915050610ea3565b50505050505050565b6000600654905090565b600061111d8383612517565b905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611155612054565b600960149054906101000a900460ff166111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613a71565b60405180910390fd5b6111ae83836125d5565b90506111b86124a8565b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960149054906101000a900460ff1681565b60065481565b6000801b81565b6000801b61125581611e55565b6000600560008a815260200190815260200160002060050154146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590613fe2565b60405180910390fd5b61271084106112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613b6f565b60405180910390fd5b6040518060e00160405280600115158152602001888152602001871515815260200186815260200185815260200184815260200183815250600560008a815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010190816113729190613d9b565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060155905050600660008154809291906113d190614031565b9190505550877fb7c35b1cc53acea76fc33f33e1c3fbd5cddcbdfec595acf7458d3922c10d0fab88888888888860405161141096959493929190613e6d565b60405180910390a25050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b61147f81611e55565b81600960146101000a81548160ff0219169083151502179055507f8e762f75d020ca8ed45518b3a0deb599205a806f65be7ebdd946c46a0fb4a488826040516114c89190612ff7565b60405180910390a15050565b6008602052816000526040600020602052806000526040600020600091509150505481565b611502826109ec565b61150b81611e55565b6115158383611f62565b50505050565b6000801b61152881611e55565b611530612054565b60008211611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a906140c5565b60405180910390fd5b6115c2333084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a5a909392919063ffffffff16565b81600460008282546115d491906140e5565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e8360405161162191906130f5565b60405180910390a26116316124a8565b5050565b600061163f612054565b600960149054906101000a900460ff1661168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590613a71565b60405180910390fd5b611698838361209a565b90506116a26124a8565b92915050565b6000801b6116b581611e55565b6116bd612054565b60004790506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161170a9061414a565b60006040518083038185875af1925050503d8060008114611747576040519150601f19603f3d011682016040523d82523d6000602084013e61174c565b606091505b50509050806117b657600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040517f0cd900370000000000000000000000000000000000000000000000000000000081526004016117ad9291906139fc565b60405180910390fd5b7f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008460405161180c9392919061415f565b60405180910390a1505061181e6124a8565b50565b600080600560008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1615151515815260200160018201805461186d90613bbe565b80601f016020809104026020016040519081016040528092919081815260200182805461189990613bbe565b80156118e65780601f106118bb576101008083540402835291602001916118e6565b820191906000526020600020905b8154815290600101906020018083116118c957829003601f168201915b505050505081526020016002820160009054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050905080602001516119cc57600092505050611a9a565b60008160000151905060006008600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612710856080015184611a3f9190614196565b611a499190614207565b90506000611a63898386611a5d9190614238565b426124b1565b905060008183611a7391906140e5565b9050838111611a83576000611a90565b8381611a8f9190614238565b5b9750505050505050505b92915050565b611aa8612f02565b600560008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff16151515158152602001600182018054611af190613bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1d90613bbe565b8015611b6a5780601f10611b3f57610100808354040283529160200191611b6a565b820191906000526020600020905b815481529060010190602001808311611b4d57829003601f168201915b505050505081526020016002820160009054906101000a900460ff161515151581526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050919050565b60056020528060005260406000206000915090508060000160009054906101000a900460ff1690806001018054611bf390613bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90613bbe565b8015611c6c5780601f10611c4157610100808354040283529160200191611c6c565b820191906000526020600020905b815481529060010190602001808311611c4f57829003601f168201915b5050505050908060020160009054906101000a900460ff16908060030154908060040154908060050154908060060154905087565b6000801b611cae81611e55565b611cb6612054565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cf19190613725565b602060405180830381865afa158015611d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d329190614281565b9050611d81600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828573ffffffffffffffffffffffffffffffffffffffff16612adc9092919063ffffffff16565b7f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483604051611dd69392919061415f565b60405180910390a150611de76124a8565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611e6681611e61611f5a565b612b5b565b50565b6000611e7583836111be565b611f4f57600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611eec611f5a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611f54565b600090505b92915050565b600033905090565b6000611f6e83836111be565b1561204957600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611fe6611f5a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001905061204e565b600090505b92915050565b600260015403612090576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600080600560008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff161515151581526020016001820180546120e690613bbe565b80601f016020809104026020016040519081016040528092919081815260200182805461211290613bbe565b801561215f5780601f106121345761010080835404028352916020019161215f565b820191906000526020600020905b81548152906001019060200180831161214257829003601f168201915b505050505081526020016002820160009054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905080604001516121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906142fa565b60405180910390fd5b8060600151421015612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90614366565b60405180910390fd5b60006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff16151515158152505090508060200151612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f7906143d2565b60405180910390fd5b6000816000015111612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e90614464565b60405180910390fd5b60006123538686611821565b905060008111612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906144f6565b60405180910390fd5b806008600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f891906140e5565b9250508190555061244c8582600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612adc9092919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff16867f3ad65878af9999d3d2c820bcabf89a752247c6e3124fc769b962e484b24c1b748360405161249391906130f5565b60405180910390a36001935050505092915050565b60018081905550565b6000600560008581526020019081526020016000206005015460056000868152602001908152602001600020600301546124eb91906140e5565b8267ffffffffffffffff161061250b57612506848484612bac565b61250e565b60005b90509392505050565b6000806007600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506008600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816125cc9190614238565b91505092915050565b600080600560008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff1615151515815260200160018201805461262190613bbe565b80601f016020809104026020016040519081016040528092919081815260200182805461264d90613bbe565b801561269a5780601f1061266f5761010080835404028352916020019161269a565b820191906000526020600020905b81548152906001019060200180831161267d57829003601f168201915b505050505081526020016002820160009054906101000a900460ff1615151515815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090506000339050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390614588565b60405180910390fd5b81604001516127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906142fa565b60405180910390fd5b81606001514210156127e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127de90614366565b60405180910390fd5b60006007600087815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050905080602001516128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a6906143d2565b60405180910390fd5b60008160000151116128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614464565b60405180910390fd5b60006129028784611821565b905060008111612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293e906144f6565b60405180910390fd5b806008600089815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129a791906140e5565b925050819055506129fb8682600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612adc9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff16877f7d4af254cc4079a2a3038801e12d0ce12c5f78ad82828a893af34b1d9ed196f08884604051612a449291906139fc565b60405180910390a3600194505050505092915050565b612ad6848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612a8f9392919061415f565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c98565b50505050565b612b56838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612b0f9291906139fc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c98565b505050565b612b6582826111be565b612ba85780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612b9f9291906145a8565b60405180910390fd5b5050565b60008060056000868152602001908152602001600020600601546005600087815260200190815260200160002060030154612be791906140e5565b905060056000868152602001908152602001600020600301548367ffffffffffffffff161015612c1b576000915050612c91565b808367ffffffffffffffff1610612c355783915050612c91565b600560008681526020019081526020016000206006015460056000878152602001908152602001600020600301548467ffffffffffffffff16612c789190614238565b85612c839190614196565b612c8d9190614207565b9150505b9392505050565b6000612cc3828473ffffffffffffffffffffffffffffffffffffffff16612d2f90919063ffffffff16565b90506000815114158015612ce8575080806020019051810190612ce691906145e6565b155b15612d2a57826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612d219190613725565b60405180910390fd5b505050565b6060612d3d83836000612d45565b905092915050565b606081471015612d8c57306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401612d839190613725565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051612db5919061464f565b60006040518083038185875af1925050503d8060008114612df2576040519150601f19603f3d011682016040523d82523d6000602084013e612df7565b606091505b5091509150612e07868383612e12565b925050509392505050565b606082612e2757612e2282612ea1565b612e99565b60008251148015612e4f575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15612e9157836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612e889190613725565b60405180910390fd5b819050612e9a565b5b9392505050565b600081511115612eb45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280600081526020016000151581525090565b6040518060e0016040528060001515815260200160608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f8c81612f57565b8114612f9757600080fd5b50565b600081359050612fa981612f83565b92915050565b600060208284031215612fc557612fc4612f4d565b5b6000612fd384828501612f9a565b91505092915050565b60008115159050919050565b612ff181612fdc565b82525050565b600060208201905061300c6000830184612fe8565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061303d82613012565b9050919050565b61304d81613032565b811461305857600080fd5b50565b60008135905061306a81613044565b92915050565b6000819050919050565b61308381613070565b811461308e57600080fd5b50565b6000813590506130a08161307a565b92915050565b600080604083850312156130bd576130bc612f4d565b5b60006130cb8582860161305b565b92505060206130dc85828601613091565b9150509250929050565b6130ef81613070565b82525050565b600060208201905061310a60008301846130e6565b92915050565b6000806040838503121561312757613126612f4d565b5b600061313585828601613091565b92505060206131468582860161305b565b9150509250929050565b61315981613070565b82525050565b61316881612fdc565b82525050565b6040820160008201516131846000850182613150565b506020820151613197602085018261315f565b50505050565b60006040820190506131b2600083018461316e565b92915050565b60006040820190506131cd60008301856130e6565b6131da6020830184612fe8565b9392505050565b6000819050919050565b6131f4816131e1565b81146131ff57600080fd5b50565b600081359050613211816131eb565b92915050565b60006020828403121561322d5761322c612f4d565b5b600061323b84828501613202565b91505092915050565b61324d816131e1565b82525050565b60006020820190506132686000830184613244565b92915050565b6000806040838503121561328557613284612f4d565b5b600061329385828601613202565b92505060206132a48582860161305b565b9150509250929050565b6000602082840312156132c4576132c3612f4d565b5b60006132d284828501613091565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332e826132e5565b810181811067ffffffffffffffff8211171561334d5761334c6132f6565b5b80604052505050565b6000613360612f43565b905061336c8282613325565b919050565b600067ffffffffffffffff82111561338c5761338b6132f6565b5b613395826132e5565b9050602081019050919050565b82818337600083830152505050565b60006133c46133bf84613371565b613356565b9050828152602081018484840111156133e0576133df6132e0565b5b6133eb8482856133a2565b509392505050565b600082601f830112613408576134076132db565b5b81356134188482602086016133b1565b91505092915050565b61342a81612fdc565b811461343557600080fd5b50565b60008135905061344781613421565b92915050565b600080600080600080600060e0888a03121561346c5761346b612f4d565b5b600061347a8a828b01613091565b975050602088013567ffffffffffffffff81111561349b5761349a612f52565b5b6134a78a828b016133f3565b96505060406134b88a828b01613438565b95505060606134c98a828b01613091565b94505060806134da8a828b01613091565b93505060a06134eb8a828b01613091565b92505060c06134fc8a828b01613091565b91505092959891949750929550565b600067ffffffffffffffff82169050919050565b6135288161350b565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b60008060006060848603121561356457613563612f4d565b5b600061357286828701613091565b935050602061358386828701613091565b925050604061359486828701613536565b9150509250925092565b6000602082840312156135b4576135b3612f4d565b5b60006135c28482850161305b565b91505092915050565b600080fd5b600080fd5b60008083601f8401126135eb576135ea6132db565b5b8235905067ffffffffffffffff811115613608576136076135cb565b5b602083019150836020820283011115613624576136236135d0565b5b9250929050565b60008083601f840112613641576136406132db565b5b8235905067ffffffffffffffff81111561365e5761365d6135cb565b5b60208301915083602082028301111561367a576136796135d0565b5b9250929050565b60008060008060006060868803121561369d5761369c612f4d565b5b60006136ab88828901613091565b955050602086013567ffffffffffffffff8111156136cc576136cb612f52565b5b6136d8888289016135d5565b9450945050604086013567ffffffffffffffff8111156136fb576136fa612f52565b5b6137078882890161362b565b92509250509295509295909350565b61371f81613032565b82525050565b600060208201905061373a6000830184613716565b92915050565b60006020828403121561375657613755612f4d565b5b600061376484828501613438565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137a757808201518184015260208101905061378c565b60008484015250505050565b60006137be8261376d565b6137c88185613778565b93506137d8818560208601613789565b6137e1816132e5565b840191505092915050565b600060e083016000830151613804600086018261315f565b506020830151848203602086015261381c82826137b3565b9150506040830151613831604086018261315f565b5060608301516138446060860182613150565b5060808301516138576080860182613150565b5060a083015161386a60a0860182613150565b5060c083015161387d60c0860182613150565b508091505092915050565b600060208201905081810360008301526138a281846137ec565b905092915050565b600082825260208201905092915050565b60006138c68261376d565b6138d081856138aa565b93506138e0818560208601613789565b6138e9816132e5565b840191505092915050565b600060e082019050613909600083018a612fe8565b818103602083015261391b81896138bb565b905061392a6040830188612fe8565b61393760608301876130e6565b61394460808301866130e6565b61395160a08301856130e6565b61395e60c08301846130e6565b98975050505050505050565b7f546f6b656e20746f207265636569766520616464726573732063616e6e6f742060008201527f6265207a65726f00000000000000000000000000000000000000000000000000602082015250565b60006139c66027836138aa565b91506139d18261396a565b604082019050919050565b600060208201905081810360008301526139f5816139b9565b9050919050565b6000604082019050613a116000830185613716565b613a1e60208301846130e6565b9392505050565b7f436f6e747261637420686173206265656e2064697361626c6564000000000000600082015250565b6000613a5b601a836138aa565b9150613a6682613a25565b602082019050919050565b60006020820190508181036000830152613a8a81613a4e565b9050919050565b7f53616c65207479706520646f6573206e6f742065786973740000000000000000600082015250565b6000613ac76018836138aa565b9150613ad282613a91565b602082019050919050565b60006020820190508181036000830152613af681613aba565b9050919050565b7f52656c65617365206174205447452063616e6e6f74206265206d6f726520746860008201527f616e203130302500000000000000000000000000000000000000000000000000602082015250565b6000613b596027836138aa565b9150613b6482613afd565b604082019050919050565b60006020820190508181036000830152613b8881613b4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bd657607f821691505b602082108103613be957613be8613b8f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c14565b613c5b8683613c14565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c98613c93613c8e84613070565b613c73565b613070565b9050919050565b6000819050919050565b613cb283613c7d565b613cc6613cbe82613c9f565b848454613c21565b825550505050565b600090565b613cdb613cce565b613ce6818484613ca9565b505050565b5b81811015613d0a57613cff600082613cd3565b600181019050613cec565b5050565b601f821115613d4f57613d2081613bef565b613d2984613c04565b81016020851015613d38578190505b613d4c613d4485613c04565b830182613ceb565b50505b505050565b600082821c905092915050565b6000613d7260001984600802613d54565b1980831691505092915050565b6000613d8b8383613d61565b9150826002028217905092915050565b613da48261376d565b67ffffffffffffffff811115613dbd57613dbc6132f6565b5b613dc78254613bbe565b613dd2828285613d0e565b600060209050601f831160018114613e055760008415613df3578287015190505b613dfd8582613d7f565b865550613e65565b601f198416613e1386613bef565b60005b82811015613e3b57848901518255600182019150602085019450602081019050613e16565b86831015613e585784890151613e54601f891682613d61565b8355505b6001600288020188555050505b505050505050565b600060c0820190508181036000830152613e8781896138bb565b9050613e966020830188612fe8565b613ea360408301876130e6565b613eb060608301866130e6565b613ebd60808301856130e6565b613eca60a08301846130e6565b979650505050505050565b7f41646472657373657320616e6420616d6f756e7473206c656e677468206d697360008201527f6d61746368000000000000000000000000000000000000000000000000000000602082015250565b6000613f316025836138aa565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53616c65207479706520616c7265616479206578697374730000000000000000600082015250565b6000613fcc6018836138aa565b9150613fd782613f96565b602082019050919050565b60006020820190508181036000830152613ffb81613fbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403c82613070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361406e5761406d614002565b5b600182019050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b60006140af6020836138aa565b91506140ba82614079565b602082019050919050565b600060208201905081810360008301526140de816140a2565b9050919050565b60006140f082613070565b91506140fb83613070565b925082820190508082111561411357614112614002565b5b92915050565b600081905092915050565b50565b6000614134600083614119565b915061413f82614124565b600082019050919050565b600061415582614127565b9150819050919050565b60006060820190506141746000830186613716565b6141816020830185613716565b61418e60408301846130e6565b949350505050565b60006141a182613070565b91506141ac83613070565b92508282026141ba81613070565b915082820484148315176141d1576141d0614002565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061421282613070565b915061421d83613070565b92508261422d5761422c6141d8565b5b828204905092915050565b600061424382613070565b915061424e83613070565b925082820390508181111561426657614265614002565b5b92915050565b60008151905061427b8161307a565b92915050565b60006020828403121561429757614296612f4d565b5b60006142a58482850161426c565b91505092915050565b7f53616c652074797065206d75737420626520656e61626c656400000000000000600082015250565b60006142e46019836138aa565b91506142ef826142ae565b602082019050919050565b60006020820190508181036000830152614313816142d7565b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b60006143506018836138aa565b915061435b8261431a565b602082019050919050565b6000602082019050818103600083015261437f81614343565b9050919050565b7f42656e656669636961727920646f6573206e6f74206578697374000000000000600082015250565b60006143bc601a836138aa565b91506143c782614386565b602082019050919050565b600060208201905081810360008301526143eb816143af565b9050919050565b7f42656e656669636961727920616d6f756e74206d75737420626520677265617460008201527f6572207468616e207a65726f0000000000000000000000000000000000000000602082015250565b600061444e602c836138aa565b9150614459826143f2565b604082019050919050565b6000602082019050818103600083015261447d81614441565b9050919050565b7f636c61696d546f6b656e733a20416d6f756e7420746f20636c61696d2069732060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b60006144e06024836138aa565b91506144eb82614484565b604082019050919050565b6000602082019050818103600083015261450f816144d3565b9050919050565b7f636c61696d546f416464726573732063616e6e6f74206265207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145726025836138aa565b915061457d82614516565b604082019050919050565b600060208201905081810360008301526145a181614565565b9050919050565b60006040820190506145bd6000830185613716565b6145ca6020830184613244565b9392505050565b6000815190506145e081613421565b92915050565b6000602082840312156145fc576145fb612f4d565b5b600061460a848285016145d1565b91505092915050565b600081519050919050565b600061462982614613565b6146338185614119565b9350614643818560208601613789565b80840191505092915050565b600061465b828461461e565b91508190509291505056fea2646970667358221220dbe498786dd7afb1b16a9a22bd895bf4a73127702c6355d5dbccdf864917a50f64736f6c6343000818003300000000000000000000000067d097d161e5097ba4deba31f0106109778c8778