[ { "inputs": [ { "internalType": "contract IERC20Metadata", "name": "_token", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address payable", "name": "_paymentReceiver", "type": "address" }, { "internalType": "address", "name": "_vestingCreator", "type": "address" }, { "internalType": "uint256", "name": "_vTokenCost", "type": "uint256" }, { "internalType": "bytes32", "name": "_root", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyClaimed", "type": "error" }, { "inputs": [], "name": "DecimalsError", "type": "error" }, { "inputs": [], "name": "DurationShorterThanCliff", "type": "error" }, { "inputs": [], "name": "InsufficientReleasableTokens", "type": "error" }, { "inputs": [], "name": "InsufficientTokensInContract", "type": "error" }, { "inputs": [], "name": "InvalidAddress", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [], "name": "InvalidDuration", "type": "error" }, { "inputs": [], "name": "InvalidProof", "type": "error" }, { "inputs": [], "name": "InvalidSchedule", "type": "error" }, { "inputs": [], "name": "InvalidSlicePeriod", "type": "error" }, { "inputs": [], "name": "InvalidStart", "type": "error" }, { "inputs": [], "name": "NotRevokable", "type": "error" }, { "inputs": [], "name": "NotSupported", "type": "error" }, { "inputs": [], "name": "PayableInsufficient", "type": "error" }, { "inputs": [], "name": "ScheduleWasRevoked", "type": "error" }, { "inputs": [], "name": "TooManySchedulesForBeneficiary", "type": "error" }, { "inputs": [], "name": "TransferToPaymentReceiverFailed", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "VestingScheduleCapacityReached", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminDelayChangeCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "effectSchedule", "type": "uint48" } ], "name": "DefaultAdminDelayChangeScheduled", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminTransferCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" }, { "indexed": false, "internalType": "uint48", "name": "acceptSchedule", "type": "uint48" } ], "name": "DefaultAdminTransferScheduled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" } ], "name": "MerkleRootUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "paymentReceiver", "type": "address" } ], "name": "PaymentReceiverSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "scheduleId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "start", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "cliff", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "duration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "slicePeriodSeconds", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "revokable", "type": "bool" } ], "name": "ScheduleCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "scheduleId", "type": "bytes32" } ], "name": "ScheduleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "scheduleId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokensReleased", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "vTokenCost", "type": "uint256" } ], "name": "VTokenCostSet", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VESTING_CREATOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "beginDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cancelDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" } ], "name": "changeDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "_start", "type": "uint256" }, { "internalType": "uint256", "name": "_cliff", "type": "uint256" }, { "internalType": "uint256", "name": "_duration", "type": "uint256" }, { "internalType": "uint256", "name": "_slicePeriodSeconds", "type": "uint256" }, { "internalType": "bool", "name": "_revokable", "type": "bool" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "claimSchedule", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vestingScheduleId", "type": "bytes32" } ], "name": "computeReleasableAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "computeVestingScheduleIdForAddressAndIndex", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_beneficiary", "type": "address" }, { "internalType": "uint256", "name": "_start", "type": "uint256" }, { "internalType": "uint256", "name": "_cliff", "type": "uint256" }, { "internalType": "uint256", "name": "_duration", "type": "uint256" }, { "internalType": "uint256", "name": "_slicePeriodSeconds", "type": "uint256" }, { "internalType": "bool", "name": "_revokable", "type": "bool" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "createVestingSchedule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelayIncreaseWait", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vestingScheduleId", "type": "bytes32" } ], "name": "getVestingSchedule", "outputs": [ { "components": [ { "internalType": "uint256", "name": "cliff", "type": "uint256" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "slicePeriodSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "amountTotal", "type": "uint256" }, { "internalType": "uint256", "name": "released", "type": "uint256" }, { "internalType": "enum TokenVesting.Status", "name": "status", "type": "uint8" }, { "internalType": "address", "name": "beneficiary", "type": "address" }, { "internalType": "bool", "name": "revokable", "type": "bool" } ], "internalType": "struct TokenVesting.VestingSchedule", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getVestingScheduleByAddressAndIndex", "outputs": [ { "components": [ { "internalType": "uint256", "name": "cliff", "type": "uint256" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "slicePeriodSeconds", "type": "uint256" }, { "internalType": "uint256", "name": "amountTotal", "type": "uint256" }, { "internalType": "uint256", "name": "released", "type": "uint256" }, { "internalType": "enum TokenVesting.Status", "name": "status", "type": "uint8" }, { "internalType": "address", "name": "beneficiary", "type": "address" }, { "internalType": "bool", "name": "revokable", "type": "bool" } ], "internalType": "struct TokenVesting.VestingSchedule", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVestingSchedulesIds", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getWithdrawableAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "holdersVestingScheduleCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paymentReceiver", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingDefaultAdmin", "outputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingDefaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vestingScheduleId", "type": "bytes32" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "release", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" } ], "name": "releaseAvailableTokensForHolder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vestingScheduleId", "type": "bytes32" } ], "name": "revoke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollbackDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_beneficiary", "type": "address" }, { "internalType": "uint256", "name": "_start", "type": "uint256" }, { "internalType": "uint256", "name": "_cliff", "type": "uint256" }, { "internalType": "uint256", "name": "_duration", "type": "uint256" }, { "internalType": "uint256", "name": "_slicePeriodSeconds", "type": "uint256" }, { "internalType": "bool", "name": "_revokable", "type": "bool" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "scheduleClaimed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_root", "type": "bytes32" } ], "name": "setMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "paused", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_receiver", "type": "address" } ], "name": "setPaymentReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_vTokenCost", "type": "uint256" } ], "name": "setVTokenCost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "underlyingToken", "outputs": [ { "internalType": "contract IERC20Metadata", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vTokenCost", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "vestingSchedulesIds", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b50604051620039d7380380620039d783398101604081905262000034916200041e565b60016000818155815460ff191690915587908790879086903380620000a05760405162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20302064656661756c742061646d696e000060448201526064015b60405180910390fd5b600380546001600160d01b0316600160d01b65ffffffffffff851602179055620000cc600082620001e5565b50506001600160a01b03841660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000119573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013f9190620004dd565b60ff166012146200016357604051631273be1d60e31b815260040160405180910390fd5b60056200017184826200059a565b5060066200018083826200059a565b50620001ad7ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee782620001e5565b505050600c9190915550600e5550600f80546001600160a01b0319166001600160a01b03929092169190911790555062000666915050565b8162000289576000620002006004546001600160a01b031690565b6001600160a01b0316146200026d5760405162461bcd60e51b815260206004820152602c60248201527f416363657373436f6e74726f6c3a2064656661756c742061646d696e20616c7260448201526b1958591e4819dc985b9d195960a21b606482015260840162000097565b600480546001600160a01b0319166001600160a01b0383161790555b62000295828262000299565b5050565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16620002955760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002f93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b03811681146200035357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200037e57600080fd5b81516001600160401b03808211156200039b576200039b62000356565b604051601f8301601f19908116603f01168101908282118183101715620003c657620003c662000356565b8160405283815260209250866020858801011115620003e457600080fd5b600091505b83821015620004085785820183015181830184015290820190620003e9565b6000602085830101528094505050505092915050565b600080600080600080600060e0888a0312156200043a57600080fd5b875162000447816200033d565b60208901519097506001600160401b03808211156200046557600080fd5b620004738b838c016200036c565b975060408a01519150808211156200048a57600080fd5b50620004998a828b016200036c565b9550506060880151620004ac816200033d565b6080890151909450620004bf816200033d565b8093505060a0880151915060c0880151905092959891949750929550565b600060208284031215620004f057600080fd5b815160ff811681146200050257600080fd5b9392505050565b600181811c908216806200051e57607f821691505b6020821081036200053f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000595576000816000526020600020601f850160051c81016020861015620005705750805b601f850160051c820191505b8181101562000591578281556001016200057c565b5050505b505050565b81516001600160401b03811115620005b657620005b662000356565b620005ce81620005c7845462000509565b8462000545565b602080601f831160018114620006065760008415620005ed5750858301515b600019600386901b1c1916600185901b17855562000591565b600085815260208120601f198616915b82811015620006375788860151825594840194600190910190840162000616565b5085821015620006565787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051613340620006976000396000818161049c01528181610c64015281816111d10152611b5801526133406000f3fe6080604052600436106102e45760003560e01c80637cb6475911610190578063b67383ad116100dc578063d547741f11610095578063e9a7fb541161006f578063e9a7fb54146108f1578063ea1bb3d514610925578063f51321d714610945578063fd8aa0851461096557600080fd5b8063d547741f14610899578063d602b9fd146108b9578063dd62ed3e146108ce57600080fd5b8063b67383ad146107d4578063b75c7dc6146107f4578063cb37f3b214610814578063cc8463c814610834578063cefc142914610849578063cf6eefb71461085e57600080fd5b806391d1485411610149578063a1eda53c11610123578063a1eda53c14610775578063a217fddf146107a9578063a5205a0f146107be578063a9059cbb1461038b57600080fd5b806391d148541461071357806395d89b41146107335780639ef346b41461074857600080fd5b80637cb647591461066b57806384ef8ffc1461068b5780638815e862146106a95780638af104da146106c95780638da5cb5b146106e957806390be10cc146106fe57600080fd5b80632495a5991161024f5780635c975abb11610208578063649a5ec7116101e2578063649a5ec7146105d557806365ebf99a146105f557806366afd8ef1461061557806370a082311461063557600080fd5b80635c975abb1461058a57806362d5081d146105a2578063634e93da146105b557600080fd5b80632495a5991461048a5780632e1a7d4d146104d65780632f2ff15d146104f6578063313ce5671461051657806336568abe1461053d5780634b866a2d1461055d57600080fd5b80631128fed4116102a15780631128fed4146103c057806316c38b3c146103e057806317e289e91461040057806318160ddd1461042057806323b872dd1461043f578063248a9ca31461045a57600080fd5b806301ffc9a7146102e9578063022d63fb1461031e57806305d6cc591461034757806306fdde0314610369578063095ea7b31461038b5780630aa6220b146103ab575b600080fd5b3480156102f557600080fd5b50610309610304366004612c96565b610987565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50620697805b60405165ffffffffffff9091168152602001610315565b34801561035357600080fd5b50610367610362366004612cd5565b6109b2565b005b34801561037557600080fd5b5061037e610a7e565b6040516103159190612d16565b34801561039757600080fd5b506103096103a6366004612d49565b610b0c565b3480156103b757600080fd5b50610367610b27565b3480156103cc57600080fd5b506103096103db366004612d93565b610b3a565b3480156103ec57600080fd5b506103676103fb366004612dfc565b610bac565b34801561040c57600080fd5b5061036761041b366004612d93565b610bd1565b34801561042c57600080fd5b506008545b604051908152602001610315565b34801561044b57600080fd5b506103096103a6366004612e19565b34801561046657600080fd5b50610431610475366004612e5a565b60009081526002602052604090206001015490565b34801561049657600080fd5b506104be7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610315565b3480156104e257600080fd5b506103676104f1366004612e5a565b610c1c565b34801561050257600080fd5b50610367610511366004612e73565b610c96565b34801561052257600080fd5b5061052b601281565b60405160ff9091168152602001610315565b34801561054957600080fd5b50610367610558366004612e73565b610d11565b34801561056957600080fd5b50610431610578366004612cd5565b600a6020526000908152604090205481565b34801561059657600080fd5b5060015460ff16610309565b6103676105b0366004612ea3565b610dfb565b3480156105c157600080fd5b506103676105d0366004612cd5565b610fa8565b3480156105e157600080fd5b506103676105f0366004612f55565b610fbc565b34801561060157600080fd5b50610367610610366004612cd5565b610fd0565b34801561062157600080fd5b50610367610630366004612f7d565b611058565b34801561064157600080fd5b50610431610650366004612cd5565b6001600160a01b03166000908152600b602052604090205490565b34801561067757600080fd5b50610367610686366004612e5a565b6110ed565b34801561069757600080fd5b506004546001600160a01b03166104be565b3480156106b557600080fd5b506104316106c4366004612e5a565b61112c565b3480156106d557600080fd5b506104316106e4366004612d49565b61114d565b3480156106f557600080fd5b506104be611194565b34801561070a57600080fd5b506104316111ad565b34801561071f57600080fd5b5061030961072e366004612e73565b611246565b34801561073f57600080fd5b5061037e611271565b34801561075457600080fd5b50610768610763366004612e5a565b61127e565b6040516103159190612fb5565b34801561078157600080fd5b5061078a61134a565b6040805165ffffffffffff938416815292909116602083015201610315565b3480156107b557600080fd5b50610431600081565b3480156107ca57600080fd5b50610431600e5481565b3480156107e057600080fd5b506103676107ef366004612e5a565b61139e565b34801561080057600080fd5b5061036761080f366004612e5a565b611406565b34801561082057600080fd5b50600f546104be906001600160a01b031681565b34801561084057600080fd5b506103306115e9565b34801561085557600080fd5b50610367611648565b34801561086a57600080fd5b506108736116c6565b604080516001600160a01b03909316835265ffffffffffff909116602083015201610315565b3480156108a557600080fd5b506103676108b4366004612e73565b6116e7565b3480156108c557600080fd5b50610367611764565b3480156108da57600080fd5b506104316108e936600461304a565b600092915050565b3480156108fd57600080fd5b506104317ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee781565b34801561093157600080fd5b50610431610940366004612e5a565b611777565b34801561095157600080fd5b50610768610960366004612d49565b611810565b34801561097157600080fd5b5061097a61182c565b6040516103159190613078565b60006001600160e01b031982166318a4c3c360e11b14806109ac57506109ac82611884565b92915050565b6109ba6118b9565b336001600160a01b038216148015906109ec57506109d6611194565b6001600160a01b0316336001600160a01b031614155b15610a09576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166000908152600a6020526040812054905b81811015610a6f576000610a38848361114d565b600081815260096020526040812091925090610a5390611912565b90508015610a6557610a6582826119ef565b5050600101610a24565b5050610a7b6001600055565b50565b60058054610a8b906130bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab7906130bc565b8015610b045780601f10610ad957610100808354040283529160200191610b04565b820191906000526020600020905b815481529060010190602001808311610ae757829003601f168201915b505050505081565b6000604051630280e1e560e61b815260040160405180910390fd5b6000610b3281611bcd565b610a7b611bd7565b60008088888888888888604051602001610b5a97969594939291906130f0565b60408051601f198184030181528282528051602091820120908301520160408051808303601f1901815291815281516020928301206000908152600d90925290205460ff169998505050505050505050565b6000610bb781611bcd565b8115610bc957610bc5611be4565b5050565b610bc5611c38565b610bd9611c71565b7ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee7610c0381611bcd565b610c1288888888888888611cb7565b5050505050505050565b610c246118b9565b6000610c2f81611bcd565b610c376111ad565b821115610c57576040516314a83c1960e01b815260040160405180910390fd5b610c8b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633846120a3565b50610a7b6001600055565b81610d075760405162461bcd60e51b815260206004820152603660248201527f416363657373436f6e74726f6c3a2063616e2774206469726563746c79206772604482015275616e742064656661756c742061646d696e20726f6c6560501b60648201526084015b60405180910390fd5b610bc582826120fa565b81158015610d2c57506004546001600160a01b038281169116145b15610df157600080610d3c6116c6565b90925090506001600160a01b038216158015610d5f575065ffffffffffff811615155b8015610d7257504265ffffffffffff8216105b610ddc5760405162461bcd60e51b815260206004820152603560248201527f416363657373436f6e74726f6c3a206f6e6c792063616e2072656e6f756e636560448201527420696e2074776f2064656c6179656420737465707360581b6064820152608401610cfe565b50506003805465ffffffffffff60a01b191690555b610bc5828261211f565b610e03611c71565b610e0b6118b9565b600033878787878787604051602001610e2a97969594939291906130f0565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050610e6d8989600c5484612199565b610e8a576040516309bde33960e01b815260040160405180910390fd5b6000818152600d602052604090205460ff1615610eba57604051630c8d9eab60e31b815260040160405180910390fd5b670de0b6b3a764000082600e54610ed19190613143565b610edb919061315a565b3414610efa5760405163a8d2a67960e01b815260040160405180910390fd5b600f546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610f47576040519150601f19603f3d011682016040523d82523d6000602084013e610f4c565b606091505b5050905080610f6e5760405163b609acc960e01b815260040160405180910390fd5b6000828152600d60205260409020805460ff19166001179055610f9c610f913390565b898989898989611cb7565b5050610c126001600055565b6000610fb381611bcd565b610bc5826121d3565b6000610fc781611bcd565b610bc582612246565b6000610fdb81611bcd565b6001600160a01b0382166110025760405163e6c4247b60e01b815260040160405180910390fd5b600f80546001600160a01b0319166001600160a01b0384169081179091556040519081527fccbdeb71dc680b2f0fd85f93e7ef0f70eda32a12b918c9715be07bb646360e59906020015b60405180910390a15050565b6110606118b9565b60008281526009602052604081206002015483910361109257604051631b742d9d60e31b815260040160405180910390fd5b600260008281526009602052604090206006015460ff1660028111156110ba576110ba612f9f565b036110d857604051632957a17760e01b815260040160405180910390fd5b6110e283836119ef565b50610bc56001600055565b60006110f881611bcd565b600c82905560405182907f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea94190600090a25050565b6007818154811061113c57600080fd5b600091825260209091200154905081565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b60006111a86004546001600160a01b031690565b905090565b6008546040516370a0823160e01b8152306004820152600091906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c919061317c565b6111a89190613195565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60068054610a8b906130bc565b611286612c39565b60096000838152602001908152602001600020604051806101200160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16600281111561130557611305612f9f565b600281111561131657611316612f9f565b81526006919091015461010081046001600160a01b03166020830152600160a81b900460ff16151560409091015292915050565b600454600090600160d01b900465ffffffffffff16801515801561137657504265ffffffffffff821610155b61138257600080611396565b600454600160a01b900465ffffffffffff16815b915091509091565b60006113a981611bcd565b662386f26fc100008211156113d15760405163162908e360e11b815260040160405180910390fd5b600e8290556040518281527f24bff375ede260cfaf30e7c295df97c39dc90f9e1bc761ab3d31a1be31f8ffa49060200161104c565b600061141181611bcd565b60008281526009602052604081206002015483910361144357604051631b742d9d60e31b815260040160405180910390fd5b600260008281526009602052604090206006015460ff16600281111561146b5761146b612f9f565b0361148957604051632957a17760e01b815260040160405180910390fd5b60008381526009602052604090206006810154600160a81b900460ff166114c357604051633c34e69d60e01b815260040160405180910390fd5b60006114ce82611912565b11156114e6576114e6846114e183611912565b6119ef565b6000816005015482600401546114fc9190613195565b90508060085461150c9190613195565b600855600682015461010090046001600160a01b03166000908152600b602052604090205461153c908290613195565b6006830180546001600160a01b03610100909104166000908152600b602052604080822093909355815460ff1916600217909155905186917f3672cfd57034e1b586da46ec42eea7bc449af89ac0ff5a795c3c00a0d1ae64c991a2600682015460405182815260009161010090046001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050505050565b600454600090600160d01b900465ffffffffffff16801515801561161457504265ffffffffffff8216105b61162f57600354600160d01b900465ffffffffffff16611642565b600454600160a01b900465ffffffffffff165b91505090565b60006116526116c6565b509050336001600160a01b038216146116be5760405162461bcd60e51b815260206004820152602860248201527f416363657373436f6e74726f6c3a2070656e64696e672061646d696e206d75736044820152671d081858d8d95c1d60c21b6064820152608401610cfe565b610a7b6122af565b6003546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161175a5760405162461bcd60e51b815260206004820152603760248201527f416363657373436f6e74726f6c3a2063616e2774206469726563746c7920726560448201527f766f6b652064656661756c742061646d696e20726f6c650000000000000000006064820152608401610cfe565b610bc5828261237a565b600061176f81611bcd565b610a7b61239f565b600081815260096020526040812060020154829082036117aa57604051631b742d9d60e31b815260040160405180910390fd5b600260008281526009602052604090206006015460ff1660028111156117d2576117d2612f9f565b036117f057604051632957a17760e01b815260040160405180910390fd5b600083815260096020526040902061180790611912565b91505b50919050565b611818612c39565b611825610763848461114d565b9392505050565b6060600780548060200260200160405190810160405280929190818152602001828054801561187a57602002820191906000526020600020905b815481526020019060010190808311611866575b5050505050905090565b60006001600160e01b03198216637965db0b60e01b14806109ac57506301ffc9a760e01b6001600160e01b03198316146109ac565b60026000540361190b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cfe565b6002600055565b8054600090429081108061193e57506002600684015460ff16600281111561193c5761193c612f9f565b145b1561194c5750600092915050565b8260020154836001015461196091906131a8565b811061197a57826005015483600401546118079190613195565b600083600101548261198c9190613195565b600385015490915060006119a0828461315a565b905060006119ae8383613143565b9050600087600201548289600401546119c79190613143565b6119d1919061315a565b90508760050154816119e39190613195565b98975050505050505050565b6000828152600960205260408120600681015490916101009091046001600160a01b0316331490611a1e611194565b6001600160a01b0316336001600160a01b031614905081158015611a40575080155b15611a5d576040516282b42960e81b815260040160405180910390fd5b611a6683611912565b841115611a865760405163110c741b60e31b815260040160405180910390fd5b838360050154611a9691906131a8565b6005840155600854611aa9908590613195565b600855600683015461010090046001600160a01b03166000908152600b6020526040902054611ad9908590613195565b6006840180546001600160a01b036101009182900481166000908152600b60205260409081902094909455915492519204169086907f62eb4bd96d9a7a66875a9f46f9f9d8bf6cfed3fe0578671b752301427d2a4f6690611b3d9088815260200190565b60405180910390a36006830154611b86906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691610100900416866120a3565b600683015460405185815260009161010090046001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016115da565b610a7b81336123aa565b611be2600080612403565b565b611bec611c71565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611c406124c3565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c1b565b60015460ff1615611be25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cfe565b80611cc06111ad565b1015611cdf576040516314a83c1960e01b815260040160405180910390fd5b611ced42630114db006131a8565b861115611d0d57604051630e0d5b9360e21b815260040160405180910390fd5b62093a80841080611d215750635dfc0f0084115b15611d3f57604051637616640160e01b815260040160405180910390fd5b801580611d4f5750600160c81b81115b15611d6d5760405163162908e360e11b815260040160405180910390fd5b821580611d7a5750603c83115b15611d985760405163c36476e960e01b815260040160405180910390fd5b84841015611db95760405163625a1c5760e11b815260040160405180910390fd5b6001600160a01b0387166000908152600a6020526040902054606411611df2576040516338cf51e560e01b815260040160405180910390fd5b6007546101f411611e16576040516348c78d3f60e11b815260040160405180910390fd5b6001600160a01b0387166000908152600a602052604081208054611e4a918a919084611e41836131bb565b9190505561114d565b90506040518061012001604052808789611e6491906131a8565b81526020018881526020018681526020018581526020018381526020016000815260200160016002811115611e9b57611e9b612f9f565b8152602001896001600160a01b0316815260200184151581525060096000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690836002811115611f2e57611f2e612f9f565b021790555060e082015160069091018054610100938401511515600160a81b0260ff60a81b196001600160a01b0390941690940292909216610100600160b01b031990921691909117919091179055600854611f8b9083906131a8565b60085560078054600181019091557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190556001600160a01b0388166000908152600b6020526040902054611fe29083906131a8565b6001600160a01b0389166000818152600b60209081526040918290209390935580518581529283018a90528201889052606082018790526080820186905284151560a08301529082907f6a4b2f118c5372782b73db45bdf54f9241247604d5414fef92818ca34ad7d4629060c00160405180910390a36040518281526001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120f590849061250c565b505050565b60008281526002602052604090206001015461211581611bcd565b6120f583836125e1565b6001600160a01b038116331461218f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cfe565b610bc5828261268b565b600083156121cb578360051b8501855b803580851160051b948552602094851852604060002093018181106121a95750505b501492915050565b60006121dd6115e9565b6121e6426126c6565b6121f091906131d4565b90506121fc8282612731565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000612251826127b0565b61225a426126c6565b61226491906131d4565b90506122708282612403565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910161104c565b6000806122ba6116c6565b915091506122cf8165ffffffffffff16151590565b80156122e257504265ffffffffffff8216105b61233f5760405162461bcd60e51b815260206004820152602860248201527f416363657373436f6e74726f6c3a207472616e736665722064656c6179206e6f6044820152671d081c185cdcd95960c21b6064820152608401610cfe565b61235b60006123566004546001600160a01b031690565b61268b565b6123666000836125e1565b5050600380546001600160d01b0319169055565b60008281526002602052604090206001015461239581611bcd565b6120f5838361268b565b611be2600080612731565b6123b48282611246565b610bc5576123c1816127f8565b6123cc83602061280a565b6040516020016123dd9291906131fa565b60408051601f198184030181529082905262461bcd60e51b8252610cfe91600401612d16565b600454600160d01b900465ffffffffffff168015612486574265ffffffffffff8216101561245c57600454600380546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055612486565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b50600480546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b60015460ff16611be25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cfe565b6000612561826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129a69092919063ffffffff16565b9050805160001480612582575080806020019051810190612582919061326f565b6120f55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610cfe565b816126815760006125fa6004546001600160a01b031690565b6001600160a01b0316146126655760405162461bcd60e51b815260206004820152602c60248201527f416363657373436f6e74726f6c3a2064656661756c742061646d696e20616c7260448201526b1958591e4819dc985b9d195960a21b6064820152608401610cfe565b600480546001600160a01b0319166001600160a01b0383161790555b610bc582826129bd565b811580156126a657506004546001600160a01b038281169116145b156126bc57600480546001600160a01b03191690555b610bc58282612a43565b600065ffffffffffff82111561272d5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610cfe565b5090565b600061273b6116c6565b6003805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061277d90508165ffffffffffff16151590565b156120f5576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b6000806127bb6115e9565b90508065ffffffffffff168365ffffffffffff16116127e3576127de838261328c565b611807565b61180765ffffffffffff841662069780612aaa565b60606109ac6001600160a01b03831660145b60606000612819836002613143565b6128249060026131a8565b67ffffffffffffffff81111561283c5761283c6132ab565b6040519080825280601f01601f191660200182016040528015612866576020820181803683370190505b509050600360fc1b81600081518110612881576128816132c1565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106128b0576128b06132c1565b60200101906001600160f81b031916908160001a90535060006128d4846002613143565b6128df9060016131a8565b90505b6001811115612957576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612913576129136132c1565b1a60f81b828281518110612929576129296132c1565b60200101906001600160f81b031916908160001a90535060049490941c93612950816132d7565b90506128e2565b5083156118255760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cfe565b60606129b58484600085612ac0565b949350505050565b6129c78282611246565b610bc55760008281526002602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129ff3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a4d8282611246565b15610bc55760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818310612ab95781611825565b5090919050565b606082471015612b215760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610cfe565b600080866001600160a01b03168587604051612b3d91906132ee565b60006040518083038185875af1925050503d8060008114612b7a576040519150601f19603f3d011682016040523d82523d6000602084013e612b7f565b606091505b5091509150612b9087838387612b9b565b979650505050505050565b60608315612c0a578251600003612c03576001600160a01b0385163b612c035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cfe565b50816129b5565b6129b58383815115612c1f5781518083602001fd5b8060405162461bcd60e51b8152600401610cfe9190612d16565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006002811115612c8257612c82612f9f565b815260006020820181905260409091015290565b600060208284031215612ca857600080fd5b81356001600160e01b03198116811461182557600080fd5b6001600160a01b0381168114610a7b57600080fd5b600060208284031215612ce757600080fd5b813561182581612cc0565b60005b83811015612d0d578181015183820152602001612cf5565b50506000910152565b6020815260008251806020840152612d35816040850160208701612cf2565b601f01601f19169190910160400192915050565b60008060408385031215612d5c57600080fd5b8235612d6781612cc0565b946020939093013593505050565b8015158114610a7b57600080fd5b8035612d8e81612d75565b919050565b600080600080600080600060e0888a031215612dae57600080fd5b8735612db981612cc0565b96506020880135955060408801359450606088013593506080880135925060a0880135612de581612d75565b8092505060c0880135905092959891949750929550565b600060208284031215612e0e57600080fd5b813561182581612d75565b600080600060608486031215612e2e57600080fd5b8335612e3981612cc0565b92506020840135612e4981612cc0565b929592945050506040919091013590565b600060208284031215612e6c57600080fd5b5035919050565b60008060408385031215612e8657600080fd5b823591506020830135612e9881612cc0565b809150509250929050565b60008060008060008060008060e0898b031215612ebf57600080fd5b883567ffffffffffffffff80821115612ed757600080fd5b818b0191508b601f830112612eeb57600080fd5b813581811115612efa57600080fd5b8c60208260051b8501011115612f0f57600080fd5b60209283019a509850508901359550604089013594506060890135935060808901359250612f3f60a08a01612d83565b915060c089013590509295985092959890939650565b600060208284031215612f6757600080fd5b813565ffffffffffff8116811461182557600080fd5b60008060408385031215612f9057600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c08301516003811061301757634e487b7160e01b600052602160045260246000fd5b8060c08401525060e083015161303860e08401826001600160a01b03169052565b50610100928301511515919092015290565b6000806040838503121561305d57600080fd5b823561306881612cc0565b91506020830135612e9881612cc0565b6020808252825182820181905260009190848201906040850190845b818110156130b057835183529284019291840191600101613094565b50909695505050505050565b600181811c908216806130d057607f821691505b60208210810361180a57634e487b7160e01b600052602260045260246000fd5b6001600160a01b039790971687526020870195909552604086019390935260608501919091526080840152151560a083015260c082015260e00190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109ac576109ac61312d565b60008261317757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561318e57600080fd5b5051919050565b818103818111156109ac576109ac61312d565b808201808211156109ac576109ac61312d565b6000600182016131cd576131cd61312d565b5060010190565b65ffffffffffff8181168382160190808211156131f3576131f361312d565b5092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613232816017850160208801612cf2565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613263816028840160208801612cf2565b01602801949350505050565b60006020828403121561328157600080fd5b815161182581612d75565b65ffffffffffff8281168282160390808211156131f3576131f361312d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816132e6576132e661312d565b506000190190565b60008251613300818460208701612cf2565b919091019291505056fea2646970667358221220b050c8ac42feced321a0330dc2977c33825758f2b1428dd0870ed7d6cdd06a3c64736f6c63430008170033000000000000000000000000cb1592591996765ec0efc1f92599a19767ee5ffa00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000d9c6ee1547fd6d48f8872dd866473893bbe8a1ab000000000000000000000000d9c6ee1547fd6d48f8872dd866473893bbe8a1ab0000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142494f2056657374696e6720546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047642494f00000000000000000000000000000000000000000000000000000000
0xa2646970667358221220b050c8ac42feced321a0330dc2977c33825758f2b1428dd0870ed7d6cdd06a3c64736f6c63430008170033000000000000000000000000cb1592591996765ec0efc1f92599a19767ee5ffa00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000d9c6ee1547fd6d48f8872dd866473893bbe8a1ab000000000000000000000000d9c6ee1547fd6d48f8872dd866473893bbe8a1ab0000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142494f2056657374696e6720546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047642494f00000000000000000000000000000000000000000000000000000000