0 txs
0 calls
constructor
No constructor.
functions
allIssuedBillIds
viewfunction allIssuedBillIds() view returns (uint256[])
AUTOMATION_ROLE
viewfunction AUTOMATION_ROLE() view returns (bytes32)
billInfo
viewfunction billInfo(uint256) view returns (uint256 payout, uint256 payoutClaimed, uint256 vesting, uint256 vestingTerm, uint256 vestingStartTimestamp, uint256 lastClaimTimestamp, uint256 truePricePaid)
billNft
viewfunction billNft() view returns (address)
billPrice
viewfunction billPrice(bytes _tierProofSignature, address _user) view returns (uint256 _price)
claimablePayout
viewfunction claimablePayout(uint256 _billId) view returns (uint256 claimablePayout_)
currentDebt
viewfunction currentDebt() view returns (uint256)
customTreasury
viewfunction customTreasury() view returns (address)
debtDecay
viewfunction debtDecay() view returns (uint256 decay_)
debtRatio
viewfunction debtRatio() view returns (uint256 debtRatio_)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
feeInPayout
viewfunction feeInPayout() view returns (uint256)
feeInPayoutRecipient
viewfunction feeInPayoutRecipient() view returns (address)
feeInPrincipal
viewfunction feeInPrincipal() view returns (uint256)
feeInPrincipalRecipient
viewfunction feeInPrincipalRecipient() view returns (address)
getBillIds
viewfunction getBillIds(address user) view returns (uint256[])
getBillIdsInRange
viewfunction getBillIdsInRange(address user, uint256 start, uint256 end) view returns (uint256[])
getBillInfo
viewfunction getBillInfo(uint256 billId) view returns (tuple)
getMaxTotalPayout
viewfunction getMaxTotalPayout() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hasTierAccess
viewfunction hasTierAccess(address _user, bytes _tierProofSignature) view returns (bool)
lastBCVUpdateTimestamp
viewfunction lastBCVUpdateTimestamp() view returns (uint256)
lastDecay
viewfunction lastDecay() view returns (uint256)
maxPayout
viewfunction maxPayout() view returns (uint256)
minBCVUpdateInterval
viewfunction minBCVUpdateInterval() view returns (uint256)
OPERATIONS_ROLE
viewfunction OPERATIONS_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
payoutFor
viewfunction payoutFor(uint256 _amount, bytes _tierProofSignature, address _user) view returns (uint256 _payout, uint256 _feeInPrincipalAmount, uint256 _feeInPayoutAmount)
payoutFor
viewfunction payoutFor(uint256 _amount) view returns (uint256 _payout, uint256 _feeInPrincipalAmount, uint256 _feeInPayoutAmount)
payoutToken
viewfunction payoutToken() view returns (address)
payoutTokenInitialSupply
viewfunction payoutTokenInitialSupply() view returns (uint256)
pendingPayout
viewfunction pendingPayout(uint256 _billId) view returns (uint256 pendingPayout_)
pendingVesting
viewfunction pendingVesting(uint256 _billId) view returns (uint256 pendingVesting_)
PERCENTAGE_BASE
viewfunction PERCENTAGE_BASE() view returns (uint256)
principalToken
viewfunction principalToken() view returns (address)
redeemerApproved
viewfunction redeemerApproved(address, address) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
terms
viewfunction terms() view returns (uint256 controlVariable, uint256 vestingTerm, uint256 minimumPrice, uint256 maxPayout, uint256 maxDebt, uint256 maxTotalPayout, uint256 initialDebt)
TIER_PROOF_TYPEHASH
viewfunction TIER_PROOF_TYPEHASH() view returns (bytes32)
tierAccessExtensionData
viewfunction tierAccessExtensionData() view returns (bool active, address pointsLens, uint256 minPoints, address authorizedSigner)
tierBoostedDiscount
viewfunction tierBoostedDiscount(address _user, bytes _tierProofSignature) view returns (uint256 discount)
tierBoostedDiscountExtensionData
viewfunction tierBoostedDiscountExtensionData() view returns (bool active, address pointsLens, address authorizedSigner)
totalDebt
viewfunction totalDebt() view returns (uint256)
totalPayoutGiven
viewfunction totalPayoutGiven() view returns (uint256)
totalPrincipalBilled
viewfunction totalPrincipalBilled() view returns (uint256)
trueBillPrice
viewfunction trueBillPrice() view returns (uint256 price_)
trueBillPrice
viewfunction trueBillPrice(bytes _tierProofSignature, address _user) view returns (uint256 price_)
trueBondPrices
viewfunction trueBondPrices() view returns (tuple[] _trueBondPricePerTier)
userBillIds
viewfunction userBillIds() view returns (uint256[])
VERSION
viewfunction VERSION() view returns (string)
vestedPayoutAtTime
viewfunction vestedPayoutAtTime(uint256 _billId, uint256 _timestamp) view returns (uint256 vestedPayout_)
vestingCurve
viewfunction vestingCurve() view returns (address)
vestingPayout
viewfunction vestingPayout(uint256 _billId) view returns (uint256 vestingPayout_)
vestingPeriod
viewfunction vestingPeriod(uint256 _billId) view returns (uint256 vestingStart_, uint256 vestingEnd_)
batchClaim
nonpayablefunction batchClaim(uint256[] _billIds) returns (uint256 payout)
batchRedeem
nonpayablefunction batchRedeem(uint256[] _billIds) returns (uint256 payout)
claim
nonpayablefunction claim(uint256 _billId) returns (uint256)
deposit
nonpayablefunction deposit(uint256 _amount, uint256 _maxPrice, address _depositor, bytes _tierProofSignature) returns (uint256)
deposit
nonpayablefunction deposit(uint256 _amount, uint256 _maxPrice, address _depositor)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _customTreasury, tuple _billCreationDetails, tuple _billTerms, tuple _billAccounts, address[] _billOperators)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 _billId) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBCV
nonpayablefunction setBCV(uint256 _target)
setBCVUpdateInterval
nonpayablefunction setBCVUpdateInterval(uint256 _newBCVUpdateInterval)
setBondTerms
nonpayablefunction setBondTerms(uint8 _parameter, uint256 _input)
setClaimApproval
nonpayablefunction setClaimApproval(address approvedAccount, bool approved)
setFee
nonpayablefunction setFee(uint256 _feeInPrincipal, uint256 _feeInPayout)
setFeeRecipients
nonpayablefunction setFeeRecipients(address _feeInPrincipalRecipient, address _feeInPayoutRecipient)
setMaxTotalPayout
nonpayablefunction setMaxTotalPayout(uint256 _maxTotalPayout)
setMinPrice
nonpayablefunction setMinPrice(uint256 _target)
setTierAccessExtensionData
nonpayablefunction setTierAccessExtensionData(bool _active, address _pointsLens, address _authorizedSigner, uint256 _minPoints)
setTierBoostedDiscountExtensionData
nonpayablefunction setTierBoostedDiscountExtensionData(bool _active, address _pointsLens, address _authorizedSigner, uint256[] _points, uint256[] _extraDiscount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferStuckToken
nonpayablefunction transferStuckToken(address _token, uint256 _amount)
unpause
nonpayablefunction unpause()
events
BCVUpdateIntervalChanged
event BCVUpdateIntervalChanged(uint256 minBCVUpdateInterval)
BillClaimed
event BillClaimed(uint256 indexed billId, address indexed recipient, uint256 payout, uint256 remaining)
BillCreated
event BillCreated(uint256 deposit, uint256 payout, uint256 expires, uint256 indexed billId)
BillInitialized
event BillInitialized((uint256 controlVariable, uint256 vestingTerm, uint256 minimumPrice, uint256 maxPayout, uint256 maxDebt, uint256 maxTotalPayout, uint256 initialDebt) billTerms, uint256 lastDecay)
BondPriceChanged
event BondPriceChanged(uint256 internalPrice, uint256 debtRatio)
ControlVariableAdjustment
event ControlVariableAdjustment(uint256 initialBCV, uint256 newBCV)
FeeRecipientsChanged
event FeeRecipientsChanged(address oldFeeInPrincipalRecipient, address newFeeInPrincipalRecipient, address oldFeeInPayoutRecipient, address newFeeInPayoutRecipient)
Initialized
event Initialized(uint8 version)
MaxTotalPayoutChanged
event MaxTotalPayoutChanged(uint256 newMaxTotalPayout)
MinBCVUpdateIntervalChanged
event MinBCVUpdateIntervalChanged(uint256 minBCVUpdateInterval)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
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)
SetFee
event SetFee(uint256 principalFee, uint256 payoutFee)
SetTierAccessExtensionData
event SetTierAccessExtensionData(bool _active, address _pointsLens, address _authorizedSigner, uint256 _minPoints)
SetTierBoostedDiscountExtensionData
event SetTierBoostedDiscountExtensionData(bool _active, address _pointsLens, address _authorizedSigner, uint256[] _points, uint256[] _extraDiscount)
TermsSet
event TermsSet(uint8 parameter, uint256 input)
Unpaused
event Unpaused(address account)
UpdateClaimApproval
event UpdateClaimApproval(address indexed owner, address indexed approvedAccount, bool approved)
errors
BondTooLarge
error BondTooLarge()
BondTooSmall
error BondTooSmall()
ControlVariableTooLow
error ControlVariableTooLow()
DebtMustBeZero
error DebtMustBeZero()
DecrementTooLarge
error DecrementTooLarge()
IncrementTooLarge
error IncrementTooLarge()
InsufficientTier
error InsufficientTier()
InvalidAddress
error InvalidAddress()
InvalidBCV
error InvalidBCV()
InvalidBondId
error InvalidBondId()
InvalidExtraDiscount
error InvalidExtraDiscount()
InvalidFee
error InvalidFee()
InvalidMinPoints
error InvalidMinPoints()
InvalidPoints
error InvalidPoints()
InvalidPointsLens
error InvalidPointsLens()
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSValue
error InvalidSValue()
InvalidUpdateInterval
error InvalidUpdateInterval()
LengthMismatch
error LengthMismatch()
MaxCapacityReached
error MaxCapacityReached()
MaxTotalPayoutExceeded
error MaxTotalPayoutExceeded()
NotApproved
error NotApproved()
NothingToClaim
error NothingToClaim()
NoTierAccess
error NoTierAccess()
PayoutTokenAddressMismatch
error PayoutTokenAddressMismatch()
SignatureExpired
error SignatureExpired()
SlippageExceeded
error SlippageExceeded()
TargetMustBeAboveZero
error TargetMustBeAboveZero()
Unauthorized
error Unauthorized()
UnauthorizedSigner
error UnauthorizedSigner()
UpdateIntervalNotElapsed
error UpdateIntervalNotElapsed()
VestingTooShort
error VestingTooShort()
ZeroAddress
error ZeroAddress()
ZeroSignatureLength
error ZeroSignatureLength()
creation bytecode
0x6080806040523461001757615f7390816200001d8239f35b600080fdfe60806040526004361015610013575b600080fd5b60003560e01c806301f275b71461069157806301ffc9a71461068857806305f187c91461067f5780630718f4bc146106765780630d471d3e1461066d57806311b060f714610664578063133b6c281461065b578063135de62c146106525780631dc2b6a6146106495780631e321a0f14610640578063248a9ca31461063757806324c20eec1461062e5780632bab6bde146106255780632f2ff15d1461061c57806333150f821461061357806335088fd31461060a5780633644e5151461060157806336568abe146105f8578063379607f51461041b5780633a52915a146105ef5780633b79af6c146105e65780633f4ba83a146105dd57806344052753146105d45780634768e615146105cb5780634abe20b6146105c25780634efa82b6146105b957806352f61b05146105b057806352f7c988146105a7578063576561d21461059e5780635843a640146105955780635c975abb1461058c5780635ea8cd121461058357806363fd49981461057a578063668448fc1461057157806367da9f8914610568578063715018a61461055f578063759076e51461055657806378a6cc091461054d5780637927ebf81461054457806380beb1991461053b57806381d0526d146105325780638456cb591461052957806387c13943146105205780638c0bf488146105175780638da5cb5b1461050e5780638dbdbe6d146105055780638e3132b7146104fc5780639010d07c146104f357806391914e33146104ea57806391d14854146104e15780639e0bd808146104d8578063a217fddf146104cf578063a2384817146104c6578063a7684a39146104bd578063ab5237ba146104b4578063b2e40387146104ab578063b6fb4f4a146104a2578063b7ac793714610499578063b8c461cd14610490578063bc29278214610490578063bd9c337614610487578063c00fdb9a1461047e578063c38594f014610475578063c6cabb401461046c578063c7fab9c214610463578063ca15c8731461045a578063cb65d22114610451578063cea55f5714610448578063d3aac7741461043f578063d502562514610436578063d547741f1461042d578063d744515f14610424578063db006a751461041b578063dbc162de14610412578063df59d84e14610409578063e0176de814610400578063e392a262146103f7578063e3d18ede146103ee578063e796059a146103e5578063e9eaeab9146103dc578063f2fde38b146103d3578063f5c2ab5b146103ca578063fc7b9c18146103c15763ffa1ad74146103b957600080fd5b61000e612a72565b5061000e612a03565b5061000e6129e3565b5061000e612951565b5061000e6128e6565b5061000e6128ca565b5061000e61285b565b5061000e61283f565b5061000e61281f565b5061000e6127f4565b5061000e6127c9565b5061000e610f07565b5061000e61279d565b5061000e6126a5565b5061000e612665565b5061000e61263a565b5061000e61261e565b5061000e6125cf565b5061000e6125a2565b5061000e612579565b5061000e61245a565b5061000e61243a565b5061000e6123e6565b5061000e6123c6565b5061000e612327565b5061000e6121da565b5061000e6121c0565b5061000e611f57565b5061000e611e87565b5061000e611e5c565b5061000e611dae565b5061000e611d91565b5061000e611d66565b5061000e611d2d565b5061000e611c6e565b5061000e611c26565b5061000e611a93565b5061000e611a56565b5061000e611a2c565b5061000e611a01565b5061000e6119e2565b5061000e61193e565b5061000e611913565b5061000e6118a5565b5061000e61172e565b5061000e611703565b5061000e6116e7565b5061000e611685565b5061000e611665565b5061000e6115da565b5061000e611502565b5061000e611434565b5061000e611410565b5061000e6113f0565b5061000e6113c0565b5061000e6112de565b5061000e6111ee565b5061000e6111c3565b5061000e61119f565b5061000e61107e565b5061000e611064565b5061000e610fcf565b5061000e610fae565b5061000e610f44565b5061000e610e6e565b5061000e610e4f565b5061000e610e24565b5061000e610e04565b5061000e610d40565b5061000e610d20565b5061000e610cf5565b5061000e610cc5565b5061000e610b54565b5061000e610b29565b5061000e610ac0565b5061000e6108d1565b5061000e610861565b5061000e610841565b5061000e610821565b5061000e6107e1565b5061000e610723565b5061000e6106ed565b600091031261000e57565b90815180825260208080930193019160005b8281106106c5575050505090565b8351855293810193928101926001016106b7565b9060206106ea9281815201906106a5565b90565b503461000e57600036600319011261000e5761071f61070b33614f05565b6040519182916020835260208301906106a5565b0390f35b503461000e57602036600319011261000e5760043563ffffffff60e01b811680910361000e57602090635a05180f60e01b8114908115610769575b506040519015158152f35b637965db0b60e01b811491508115610783575b503861075e565b6301ffc9a760e01b1490503861077c565b6001600160a01b0381160361000e57565b604090600319011261000e576004356107bd81610794565b906024356106ea81610794565b9060018060a01b0316600052602052604060002090565b503461000e57602060ff6108156107f7366107a5565b6001600160a01b03909116600090815261017e8552604090206107ca565b54166040519015158152f35b503461000e57600036600319011261000e57602061017354604051908152f35b503461000e57600036600319011261000e57602061017b54604051908152f35b503461000e57600036600319011261000e5760606101635460018060a01b03806101645416906040519260ff81161515845260081c1660208301526040820152f35b93909796959260c0959260e08601998652602086015260408501526060840152608083015260a08201520152565b503461000e57602036600319011261000e5760043560005261017d6020526040600020805461071f60018301549260028101549060038101546004820154906006600584015493015493604051978897886108a3565b50634e487b7160e01b600052604160045260246000fd5b60e081019081106001600160401b0382111761095957604052565b610961610927565b604052565b608081019081106001600160401b0382111761095957604052565b6001600160401b03811161095957604052565b60a081019081106001600160401b0382111761095957604052565b602081019081106001600160401b0382111761095957604052565b604081019081106001600160401b0382111761095957604052565b60c081019081106001600160401b0382111761095957604052565b90601f801991011681019081106001600160401b0382111761095957604052565b60405190610a2e8261093e565b565b60405190606082018281106001600160401b0382111761095957604052565b6020906001600160401b038111610a6c575b601f01601f19160190565b610a74610927565b610a61565b81601f8201121561000e57803590610a9082610a4f565b92610a9e6040519485610a00565b8284526020838301011161000e57816000926020809301838601378301015290565b503461000e57606036600319011261000e576024356001600160401b03811161000e57610b0c610af761071f923690600401610a79565b60443590610b0482610794565b6004356147eb565b604080519384526020840192909252908201529081906060820190565b503461000e57600036600319011261000e57610170546040516001600160a01b039091168152602090f35b503461000e57604036600319011261000e57600435600581101561000e57602435610b7d612b5c565b610b8682613868565b81610bd6576201fa408110610bc45760008051602062005e9e83398151915291610bb08261017555565b610bbf60405192839283613888565b0390a1005b604051631dd59aab60e31b8152600490fd5b610bdf82613868565b60018203610c075760008051602062005e9e83398151915291610c028261017755565b610bb0565b610c1082613868565b60028203610c335760008051602062005e9e83398151915291610c028261017855565b610c3c82613868565b60038203610c5f5760008051602062005e9e83398151915291610c028261017655565b610c6882613868565b60048214610c87575b60008051602062005e9e83398151915291610bb0565b610172548110610cb35760008051602062005e9e83398151915291610cac8261017955565b9150610c71565b604051638c25e01360e01b8152600490fd5b503461000e57602036600319011261000e5760043560005260986020526020600160406000200154604051908152f35b503461000e57600036600319011261000e57602060405160008051602062005ede8339815191528152f35b503461000e57600036600319011261000e57602061017254604051908152f35b503461000e57604036600319011261000e57600435610db1602435610d6481610794565b610d6c612b5c565b610da0600093808552609860205260ff610d8984604088206107ca565b541615610db55760005260ca602052604060002090565b6001600160a01b039091169061451e565b5080f35b8085526098602052610dca83604087206107ca565b805460ff19166001179055336001600160a01b0384168260008051602062005e7e8339815191528880a460005260ca602052604060002090565b503461000e57600036600319011261000e57602061017c54604051908152f35b503461000e57600036600319011261000e5761016b546040516001600160a01b039091168152602090f35b503461000e57600036600319011261000e576020600154604051908152f35b503461000e57604036600319011261000e57602435610e8c81610794565b336001600160a01b03821603610eaa57610ea890600435612ab1565b005b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b503461000e57602036600319011261000e57610f21614410565b610f29613ae9565b6020610f366004356145ce565b600161012e55604051908152f35b503461000e57602036600319011261000e576020610f6442600435614d72565b810191508110610f77575b604051908152f35b610f7f612bfd565b610f6f565b604060031982011261000e57600435906001600160401b03821161000e576107bd91600401610a79565b503461000e576020610f6f610fca610fc536610f84565b615797565b614ba5565b503461000e57600036600319011261000e57610fe9612b5c565b60fc5460ff8116156110285760ff191660fc557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b503461000e576020610f6f61107836610f84565b90614b38565b503461000e57604036600319011261000e5760043561109c81610794565b602435906110a8612b5c565b6040516370a0823160e01b81523060048201526001600160a01b039190911691602082602481865afa91821561115a575b60009261112a575b5080158015611121575b156111095750603454610ea892906001600160a01b03165b90613b48565b603454610ea8939192506001600160a01b0316611103565b508181116110eb565b61114c91925060203d8111611153575b6111448183610a00565b81019061323e565b90386110e1565b503d61113a565b611162613231565b6110d9565b90604060031983011261000e5760043561118081610794565b91602435906001600160401b03821161000e576106ea91600401610a79565b503461000e5760206111b96111b336611167565b90615223565b6040519015158152f35b503461000e57600036600319011261000e57610168546040516001600160a01b039091168152602090f35b503461000e57602036600319011261000e5761071f60408060c081516112138161093e565b600091818380935282602082015282858201528260608201528260808201528260a08201520152600435815261017d602052209060068151926112558461093e565b80548452600181015460208501526002810154838501526003810154606085015260048101546080850152600581015460a0850152015460c0830152519182918291909160c08060e0830194805184526020810151602085015260408101516040850152606081015160608501526080810151608085015260a081015160a08501520151910152565b503461000e57604036600319011261000e5760043560243560018060a01b036034541633148015611380575b611313906138a2565b620f42408083101561136e5781101561136e57817f032dc6a2d839eb179729a55633fdf1c41a1fc4739394154117005db2b354b9b59261017b558161017c55610bbf6040519283928360209093929193604081019481520152565b6040516358d620b360e01b8152600490fd5b5060008051602062005efe833981519152600052609860205261131360ff6113b73360008051602062005ebe8339815191526107ca565b5416905061130a565b503461000e57602036600319011261000e576113dd600435614e97565b5060408051928352602083019190915290f35b503461000e57600036600319011261000e57602061018254604051908152f35b503461000e57600036600319011261000e57602060ff60fc54166040519015158152f35b503461000e57602036600319011261000e576034546001600160a01b0316331480156114c7575b8015611476575b61146b906138a2565b610ea86004356138ff565b5060008051602062005ede833981519152600052609860205261146b60ff6114be337f823c6b7e3d21441ed203c16f7e1f99b02aa08add41feba002c291fcd38f758a56107ca565b54169050611462565b5060008051602062005efe833981519152600052609860205260ff6114fb3360008051602062005ebe8339815191526107ca565b541661145b565b503461000e57602036600319011261000e576034546001600160a01b031633148015611595575b8015611544575b611539906138a2565b610ea860043561395e565b5060008051602062005ede833981519152600052609860205261153960ff61158c337f823c6b7e3d21441ed203c16f7e1f99b02aa08add41feba002c291fcd38f758a56107ca565b54169050611530565b5060008051602062005efe833981519152600052609860205260ff6115c93360008051602062005ebe8339815191526107ca565b5416611529565b8015150361000e57565b503461000e57604036600319011261000e576004356115f881610794565b60243590611605826115d0565b3360005261017e60205261161d8160406000206107ca565b9115159160ff1981541660ff841617905560405191825260018060a01b0316907f953b326c8aba9fa3dcdbb3372dfc3fc310139091d2178226539a6b09e553629b60203392a3005b503461000e57600036600319011261000e57602061018154604051908152f35b503461000e576000806003193601126116e4576116a0612b5c565b603480546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b503461000e57600036600319011261000e576020610f6f614cf5565b503461000e57600036600319011261000e57602060405160008051602062005efe8339815191528152f35b503461000e57602036600319011261000e576004356118056117de604051611755816109af565b60008152602061177461176b61017b5487612cab565b620f4240900490565b61016a54909590611795906001600160a01b03165b6001600160a01b031690565b610169546117c0906117bb9089906117b5906001600160a01b0316611789565b94612ef1565b612c49565b60405163d1b317e560e01b8152958693849283929160048401613b2d565b03915afa918215611868575b600092611840575b50610fca6117ff916156e6565b9061393e565b61071f61182261181b61176b61017c5485612cab565b8093612ef1565b91604051938493846040919493926060820195825260208201520152565b6117ff919250611860610fca9160203d8111611153576111448183610a00565b9291506117f2565b611870613231565b6117ea565b9181601f8401121561000e578235916001600160401b03831161000e576020808501948460051b01011161000e57565b503461000e5761026036600319011261000e576004356118c481610794565b60c036602319011261000e5760e03660e319011261000e576080366101c319011261000e5761024435906001600160401b03821161000e5761190d610ea8923690600401611875565b91613087565b503461000e57602036600319011261000e57602061193342600435614d72565b509050604051908152f35b503461000e576000806003193601126116e4576034546001600160a01b0316331480156119b4575b8015611981575b611976906138a2565b61197e613aa8565b80f35b5060008051602062005ede8339815191528152609860205261197660ff6119ab33604085206107ca565b5416905061196d565b5060008051602062005efe8339815191528152609860205260ff6119db33604084206107ca565b5416611966565b503461000e57600036600319011261000e576020604051620f42408152f35b503461000e57600036600319011261000e57602060405160008051602062005f1e8339815191528152f35b503461000e57600036600319011261000e576034546040516001600160a01b039091168152602090f35b503461000e57606036600319011261000e57610ea8604435611a7781610794565b60405190611a84826109af565b60008252602435600435613d31565b503461000e57608036600319011261000e577fec394947d6e8d7974f43f1a0c9685ce363c9a28dbefce8a9fa16f9e62aa0c56b600435611ad2816115d0565b60243590611adf82610794565b610bbf604435611aee81610794565b60643590611ba96060611b8160018060a01b03806034541633148015611be6575b611b18906138a2565b611b59604051611b2781610966565b89151590818152838c1693846020830152896040830152881695869101526101609060ff801983541691151516179055565b6101608054610100600160a81b03191660089290921b610100600160a81b0316919091179055565b61016184905561016280546001600160a01b0319166001600160a01b03909216919091179055565b611bb1615140565b506040805194151585526001600160a01b03958616602086015294169383019390935260608201929092529081906080820190565b5060008051602062005efe8339815191526000526098602052611b1860ff611c1d3360008051602062005ebe8339815191526107ca565b54169050611b0f565b503461000e57604036600319011261000e5760043560005260ca6020526020611c556024356040600020612f42565b905460405160039290921b1c6001600160a01b03168152f35b503461000e57602036600319011261000e5760043560018060a01b036034541633148015611ced575b611ca0906138a2565b61021c8110611cdb576020817fa36be2d8e0fe1a8b73051c98936d6f86896dd430d81b05ff86c20ea5ea8c85a39261018255604051908152a1005b604051633a05ee7560e11b8152600490fd5b5060008051602062005efe8339815191526000526098602052611ca060ff611d243360008051602062005ebe8339815191526107ca565b54169050611c97565b503461000e57604036600319011261000e57602060ff610815602435611d5281610794565b6004356000526098845260406000206107ca565b503461000e57602036600319011261000e576020611d8642600435614d72565b915050604051908152f35b503461000e57600036600319011261000e57602060405160008152f35b503461000e57602036600319011261000e5760043560018060a01b036034541633148015611e1c575b611de0906138a2565b610172548110610cb3576020817f4c9c68bc926ee1c2d7814929f0e2120214c83e14970e3b625e7fabb0d9d3304f9261017955604051908152a1005b5060008051602062005efe8339815191526000526098602052611de060ff611e533360008051602062005ebe8339815191526107ca565b54169050611dd7565b503461000e57600036600319011261000e5761016a546040516001600160a01b039091168152602090f35b503461000e57600036600319011261000e576080610160546101615460018060a01b0390816101625416916040519360ff81161515855260081c16602084015260408301526060820152f35b6020906001600160401b038111611eec575b60051b0190565b611ef4610927565b611ee5565b81601f8201121561000e57803591611f1083611ed3565b92611f1e6040519485610a00565b808452602092838086019260051b82010192831161000e578301905b828210611f48575050505090565b81358152908301908301611f3a565b503461000e5760a036600319011261000e57600435611f75816115d0565b602435611f8181610794565b60443591611f8e83610794565b6001600160401b039260643584811161000e57611faf903690600401611ef9565b9060843585811161000e57611fc8903690600401611ef9565b60345490956001600160a01b0391821633148015612180575b611fea906138a2565b60405191611ff783610994565b61208686151593848152612064838a1661203c608060209683888701528a16948560408201528b606082015201978d89526101639060ff801983541691151516179055565b6101638054610100600160a81b03191660089290921b610100600160a81b0316919091179055565b61016480546001600160a01b0319166001600160a01b03909216919091179055565b8451918211612173575b600160401b8211612166575b61016580549083815581841061213f575b5050610165600052848101907fd91ca5e44fa96a1732bfaed7fe33fc20ed69a9895cde1f18c7dcabca39d6a78b9060005b84811061212d577f097c84c9410748334efde6c53ba18b6bd7cc97d2df70eea9923801909f71858b8a8a610bbf8e8c8c6121188d5161544b565b61212061550f565b50604051958695866156a1565b835183820155928101926001016120de565b60009081528383822092830192015b82811061215b57506120ad565b81815560010161214e565b61216e610927565b61209c565b61217b610927565b612090565b5060008051602062005efe8339815191526000526098602052611fea60ff6121b73360008051602062005ebe8339815191526107ca565b54169050611fe1565b503461000e576020610f6f6121d436611167565b90615797565b503461000e57606036600319011261000e57600480356121f981610794565b602435906044359061221361220e8484612ef1565b615088565b61016d5490946000949161222f906001600160a01b0316611789565b915b84811061228057868661224381615088565b9160005b82811061225c576040518061071f86826106d9565b8061226a61227b92846149f8565b5161227582876149f8565b5261459e565b612247565b604051632f745c5960e01b81526020908181806122a0868a898401613b2d565b0381885afa91821561231a575b6000926122fd575b50506122cf8160005261016f602052604060002054151590565b6122e3575b506122de9061459e565b612231565b866122f6916122756122de94998b6149f8565b95906122d4565b6123139250803d10611153576111448183610a00565b38806122b5565b612322613231565b6122ad565b503461000e57602036600319011261000e576004356001600160401b03811161000e57612358903690600401611875565b90612361614410565b612369613ae9565b60009081925b80841061238757602083600161012e55604051908152f35b90916123b1906123a161239b8685876145b6565b356145ce565b81018091116123b9575b9361459e565b92919061236f565b6123c1612bfd565b6123ab565b503461000e57600036600319011261000e57602061017954604051908152f35b503461000e57602036600319011261000e5760206000612407600435614e97565b50905042811161241b575b50604051908152f35b4281039150811161242d575b38612412565b612435612bfd565b612427565b503461000e57600036600319011261000e57602061017154604051908152f35b503461000e57612469366107a5565b60345490916001600160a01b0391821633148015612539575b61248b906138a2565b8161016b5416917fa85a84a32daa8188b430215a9aee86785dec4301fb97fe4e2f8a3addeac961f260808261016c541692604051958652808516938460208801526040870152861694856060820152a1156125275761016b80546001600160a01b0319166001600160a01b03909216919091179055156125275761016c80546001600160a01b0319166001600160a01b03909216919091179055005b60405163d92e233d60e01b8152600490fd5b5060008051602062005efe833981519152600052609860205261248b60ff6125703360008051602062005ebe8339815191526107ca565b54169050612482565b503461000e57602036600319011261000e5761071f61070b60043561259d81610794565b614f05565b503461000e57602036600319011261000e5760043560005260ca6020526020604060002054604051908152f35b503461000e57608036600319011261000e576044356125ed81610794565b6064356001600160401b03811161000e57602091612612610f6f923690600401610a79565b90602435600435613d31565b503461000e57600036600319011261000e576020610f6f614c77565b503461000e57600036600319011261000e5761016d546040516001600160a01b039091168152602090f35b503461000e57600036600319011261000e5761017454610175549061071f610176546101775461017854610179549161017a5493604051978897886108a3565b503461000e57604036600319011261000e576004356024356126c681610794565b600090828252609860205260016040832001549283835260ff6126ec33604086206107ca565b5416156126fd579061197e91612ab1565b6127996127566127818661277361271c61271633612d9c565b92612e51565b6127506040519586946127506020870160179076020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81520190565b90612b45565b7001034b99036b4b9b9b4b733903937b6329607d1b815260110190565b03601f198101835282610a00565b60405162461bcd60e51b815291829160048301612a46565b0390fd5b503461000e57604036600319011261000e5760206127bf602435600435614d72565b5050604051908152f35b503461000e57600036600319011261000e57610169546040516001600160a01b039091168152602090f35b503461000e57600036600319011261000e5761016c546040516001600160a01b039091168152602090f35b503461000e57600036600319011261000e57602061017754604051908152f35b503461000e57600036600319011261000e576020610f6f614d15565b503461000e576000806003193601126116e45760405180918261016e80548085526020809501918452848420935b858282106128b4575050506128a092500383610a00565b61071f6040519282849384528301906106a5565b8554845260019586019588955093019201612889565b503461000e57600036600319011261000e576020610f6f614b87565b503461000e57600036600319011261000e57612900614a1a565b604090815190602080830181845282518091528185850193019160005b82811061292a5785850386f35b8351805186528083015186840152870151878601526060909401939281019260010161291d565b503461000e57602036600319011261000e5760043561296f81610794565b612977612b5c565b6001600160a01b0381161561298f57610ea890612bb4565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b503461000e57600036600319011261000e57602061018054604051908152f35b503461000e57600036600319011261000e57602061017f54604051908152f35b60005b838110612a365750506000910152565b8181015183820152602001612a26565b60409160208252612a668151809281602086015260208686019101612a23565b601f01601f1916010190565b503461000e57600036600319011261000e5761071f604051612a93816109ca565b600581526419171a171960d91b602082015260405191829182612a46565b906040612af192600090808252609860205260ff612ad1858585206107ca565b5416612af4575b815260ca602052206001600160a01b0390911690612fba565b50565b8082526098602052612b08848484206107ca565b805460ff19169055336001600160a01b038516827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8580a4612ad8565b90612b5860209282815194859201612a23565b0190565b6034546001600160a01b03163303612b7057565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b603480546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b50634e487b7160e01b600052601160045260246000fd5b90606482029180830460641490151715612c2a57565b610a2e612bfd565b906101f491828102928184041490151715612c2a57565b90670de0b6b3a764000091828102928184041490151715612c2a57565b90620f424091828102928184041490151715612c2a57565b90662386f26fc1000091828102928184041490151715612c2a57565b9081604602916046830403612c2a57565b81810292918115918404141715612c2a57565b9060018201809211612c2a57565b91908201809211612c2a57565b50634e487b7160e01b600052603260045260246000fd5b602090805115612cfe570190565b612b58612cd9565b602190805160011015612cfe570190565b906020918051821015612d2957010190565b612d31612cd9565b010190565b8015612d44575b6000190190565b612d4c612bfd565b612d3d565b15612d5857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190606082018281106001600160401b03821117612e44575b604052602a825260403660208401376030612dd183612cf0565b536078612ddd83612d06565b536029905b60018211612df5576106ea915015612d51565b80600f612e3192166010811015612e37575b6f181899199a1a9b1b9c1cb0b131b232b360811b901a612e278486612d17565b5360041c91612d36565b90612de2565b612e3f612cd9565b612e07565b612e4c610927565b612db7565b60405190612e5e82610966565b6042825260603660208401376030612e7583612cf0565b536078612e8183612d06565b536041905b60018211612e99576106ea915015612d51565b80600f612eca92166010811015612e37576f181899199a1a9b1b9c1cb0b131b232b360811b901a612e278486612d17565b90612e86565b6107cf19810191908211612c2a57565b90620f4240918203918211612c2a57565b91908203918211612c2a57565b6101668054821015612f1a575b60005260206000200190600090565b612f22612cd9565b612f0b565b6101658054821015612f1a5760005260206000200190600090565b8054821015612f1a5760005260206000200190600090565b91612f769183549060031b600019811b9283911b169119161790565b9055565b8054908115612fa45760001991820191612f948383612f42565b909182549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b600181019180600052826020526040600020549283151560001461307e5761300c61301b936000958619808201828111613071575b8354918201918211613064575b808203613021575b505050612f7a565b90600052602052604060002090565b55600190565b61304b6130459161303561305b9487612f42565b90549060031b1c92839187612f42565b90612f5a565b8590600052602052604060002090565b55388080613004565b61306c612bfd565b612ffc565b613079612bfd565b612fef565b50505050600090565b90916000549260ff8460081c1615809481956131aa575b811561318a575b501561312e576130cb92846130c2600160ff196000541617600055565b6131155761324d565b6130d157565b6130e161ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989080602081015b0390a1565b61312961010061ff00196000541617600055565b61324d565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b303b1591508161319c575b50386130a5565b6001915060ff161438613195565b600160ff821610915061309e565b6064356106ea81610794565b610204356106ea81610794565b6024356106ea81610794565b6044356106ea81610794565b6084356106ea81610794565b6101e4356106ea81610794565b6101c4356106ea81610794565b610224356106ea81610794565b9081602091031261000e57516106ea81610794565b506040513d6000823e3d90fd5b9081602091031261000e575190565b916132789161325a613825565b61326261384b565b61326a6131b8565b6132726131c4565b90615ba7565b613281306150ba565b61328a306152ec565b6001600160a01b038181169182156125275761016a80546001600160a01b0319166001600160a01b039092169190911790556132c46131d1565b91816040938185519485809563277d415b60e11b825260209687916004998a915afa9081156137b8575b60009161378b575b501691160361377b5761332f61330d6117896131d1565b61016880546001600160a01b0319166001600160a01b03909216919091179055565b61016854613377908490849061334d906001600160a01b0316611789565b87516318160ddd60e01b815292839182905afa90811561376e575b600091613751575b5061017355565b6133826117896131dd565b15613741576133b76133956117896131dd565b61016980546001600160a01b0319166001600160a01b03909216919091179055565b6133c56117896117896131e9565b61367a576134209150835180610142808201908282106001600160401b0383111761366d575b62005d3c833903906000f08015613660575b6101708054919092166001600160a01b03166001600160a01b0319909116179055565b61342b6117896131f5565b156136525761345d61343b6131f5565b61016c80546001600160a01b0319166001600160a01b03909216919091179055565b613468611789613202565b156136525761349a613478613202565b61016b80546001600160a01b0319166001600160a01b03909216919091179055565b6134a561178961320f565b15613652576134da6134b861178961320f565b61016d80546001600160a01b0319166001600160a01b03909216919091179055565b6134e56117896131b8565b15613652576134f660a43561017b55565b620f42408061017b5410156136435761351160c43561017c55565b61017c54101561363557613523614cf5565b613627576201fa4061010435106136195760e4351561360b57507f08d1f0e12b23bdec7b4bef60f003f59205e3fdd44da8e664fb30d134497e2f449061359b60e43561017455610104356101755561012435610176556101443561017755610164356101785561018435610179556101a43561017a55565b6135a761290461018255565b6135b46101a43561017f55565b6135be4261018055565b5160e43581526101043560208201526101243560408201526101443560608201526101643560808201526101843560a08201526101a43560c08201524260e0820152806101008101613110565b90516334a82cdf60e01b8152fd5b9051631dd59aab60e31b8152fd5b90516312f3dd8960e31b8152fd5b90516358d620b360e01b8152fd5b5090516358d620b360e01b8152fd5b905163d92e233d60e01b8152fd5b613668613231565b6133fd565b613675610927565b6133eb565b506136d28161368a6117896131e9565b61369342612ed0565b865163098fcce760e11b8152670de0b6b3a7640000878201908152610fa060208201526040810192909252426060830152938492918391829160800190565b03915afa8015613734575b613716575b50506137116136ef6131e9565b61017080546001600160a01b0319166001600160a01b03909216919091179055565b613420565b8161372c92903d10611153576111448183610a00565b5038806136e2565b61373c613231565b6136dd565b835163d92e233d60e01b81528390fd5b6137689150843d8611611153576111448183610a00565b38613370565b613776613231565b613368565b83516312bb684960e31b81528390fd5b6137ab9150863d88116137b1575b6137a38183610a00565b81019061321c565b386132f6565b503d613799565b6137c0613231565b6132ee565b156137cc57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b61383f60ff60005460081c1661383a816137c5565b6137c5565b60ff1960fc541660fc55565b61386060ff60005460081c1661383a816137c5565b600161012e55565b6005111561387257565b634e487b7160e01b600052602160045260246000fd5b929190604084019360058210156138725760209181520152565b156138a957565b60405162461bcd60e51b815260206004820152602860248201527f43616c6c6572206973206e6f74206f776e6572206f722068617320726571756960448201526772656420726f6c6560c01b6064820152608490fd5b801561392c5760408160008051602062005e9e8339815191529261017655815190600382526020820152a1565b604051630c6a667360e21b8152600490fd5b8115613948570490565b634e487b7160e01b600052601260045260246000fd5b8015613a965761017480549081831115613a06578261398761397f84612c32565b6103e8900490565b80156139fe575b6139989084612ccc565b106139ec576139d37f29630be17b11fe435d5d3966fc35fcdb28519c59cdbd558b675fb380b8f9a66c935b6139cd4261018155565b61017455565b5460408051928352602083019190915281908101613110565b6040516334506cf160e11b8152600490fd5b50600161398e565b613a17610181546101825490612ccc565b4210613a845782613a2a61397f84612c14565b8015613a7c575b613a3b9084612ef1565b11613a6a576139d37f29630be17b11fe435d5d3966fc35fcdb28519c59cdbd558b675fb380b8f9a66c936139c3565b604051636f5093bf60e11b8152600490fd5b506001613a31565b60405163a90a966f60e01b8152600490fd5b604051637452201f60e01b8152600490fd5b613ab0613ae9565b600160ff1960fc54161760fc557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1565b60ff60fc5416613af557565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6001600160a01b039091168152602081019190915260400190565b613b7d610a2e9392613b6f60405194859263a9059cbb60e01b602085015260248401613b2d565b03601f198101845283610a00565b613b97565b9081602091031261000e57516106ea816115d0565b604051613c14916001600160a01b0316613bb0826109ca565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af13d15613c9c573d91613bf883610a4f565b92613c066040519485610a00565b83523d60008785013e613ca0565b805190828215928315613c84575b50505015613c2d5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b613c949350820181019101613b82565b388281613c22565b6060915b91929015613d025750815115613cb4575090565b3b15613cbd5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015613d155750805190602001fd5b60405162461bcd60e51b81529081906127999060048301612a46565b929192613d3c614410565b613d44613ae9565b613d55613d518486615223565b1590565b6143c6576001600160a01b03841680156143b457331415806143ab575b61439a57613d7e6147be565b613d888484614b38565b80921061438857613d9a8484836147eb565b9491959093613da98585612ef1565b9361017f613dc1613dbb838354612ccc565b61017f55565b54610178541061437657613e1c613e1460046020613dea6117896101685460018060a01b031690565b60405163313ce56760e01b815292839182905afa908115614369575b60009161433a575b506143f1565b612710900490565b88106143285761017754881161431657613e368789612ccc565b613e4d613e47610172928354612ccc565b61017255565b546101795410610cb357613e6d613e678661017154612ccc565b61017155565b61016954613e92908290613e89906001600160a01b0316611789565b30903390614467565b61016954613ea8906001600160a01b0316611789565b94613ee460208261016a98613ec66117898b5460018060a01b031690565b600060405180968195829463095ea7b360e01b845260048401613b2d565b03925af18015614309575b6142da575b5061016854613f0b906001600160a01b0316611789565b6040516370a0823160e01b81523060048201529690602090889060249082905afa9687156142cd575b6000976142a4575b5054613f50906001600160a01b0316611789565b61016954909690613f69906001600160a01b0316611789565b61016c549098906001600160a01b031699883b1561000e57604051630ca6553b60e11b81526001600160a01b039a8b1660048201526024810194909452604484018c905260648401529790981660848201527f2cb17bd1fd2a1fecfefae2de1e6a59194abaa62179652924ccdca01617f0bf16976141a497610fca9761405a9390600090829081838160a4810103925af18015614297575b61427e575b508061424b575b5061016854614024906001600160a01b0316611789565b6040516370a0823160e01b815230600482015290602090829060249082905afa90811561423e575b60009161421f575b50612ef1565b61016d54614070906001600160a01b0316611789565b60405163ee1fe2ad60e01b81526001600160a01b03861660048201523060248201529290602090849060449082906000905af1928315614212575b6000936141c9575b5061419c61417f84956140e67fe58e2397580448f038c428fd00f6fa73f939e2bc4f98fb93a9c4d85182b62d6c966144a9565b50614178610175918254906140f9610a21565b918883526000602084015280604084015260608301524260808301524260a083015260c08201526141358960005261017d602052604060002090565b9060c0600691805184556020810151600185015560408101516002850155606081015160038501556080810151600485015560a081015160058501550151910155565b5442612ccc565b604051938493846040919493926060820195825260208201520152565b0390a2615797565b6141ac614c77565b60408051928352602083019190915290a190610a2e600161012e55565b7fe58e2397580448f038c428fd00f6fa73f939e2bc4f98fb93a9c4d85182b62d6c935061417f61420a61419c9260203d602011611153576111448183610a00565b9450506140b3565b61421a613231565b6140ab565b614238915060203d602011611153576111448183610a00565b38614054565b614246613231565b61404c565b610169546142789190614266906001600160a01b0316611789565b61016b546001600160a01b0316611103565b3861400d565b8061428b61429192610981565b8061069a565b38614006565b61429f613231565b614001565b613f509197506142c56117899160203d602011611153576111448183610a00565b979150613f3c565b6142d5613231565b613f34565b6142fb9060203d602011614302575b6142f38183610a00565b810190613b82565b5038613ef4565b503d6142e9565b614311613231565b613eef565b60405163f2fa52ef60e01b8152600490fd5b604051630ce23d3f60e21b8152600490fd5b61435c915060203d602011614362575b6143548183610a00565b8101906143d8565b38613e0e565b503d61434a565b614371613231565b613e06565b60405163fb2f5aff60e01b8152600490fd5b604051638199f5f360e01b8152600490fd5b6040516282b42960e81b8152600490fd5b50333b15613d72565b60405163e6c4247b60e01b8152600490fd5b60405163daed3a9b60e01b8152600490fd5b9081602091031261000e575160ff8116810361000e5790565b60ff16604d8111614403575b600a0a90565b61440b612bfd565b6143fd565b61012e60028154146144225760029055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152610a2e91613b7d82610994565b600081815261016f80602052604082205415600014614518579060409161016e8481546001861b81101561450b575b600181018084558110156144fe575b828552602085200155549382526020522055600190565b614506612cd9565b6144e7565b614513610927565b6144d8565b50905090565b6001810190826000528160205260406000205415600014614596578261457461455b8354600160401b811015614589575b60018101855584612f42565b819391549060031b600019811b9283911b169119161790565b90555491600052602052604060002055600190565b614591610927565b61454f565b505050600090565b60019060001981146145ae570190565b612b58612bfd565b91908110156145c65760051b0190565b611ef4612cd9565b6145e38160005261017d602052604060002090565b6005810191825480156147ac5761016d54614606906001600160a01b0316611789565b6040516331a9108f60e11b8152600481018490529093602082602481885afa91821561479f575b60009261477f575b506001600160a01b038281169533871415919082614771575b505080614738575b6147265761466384614d60565b97915050861561471457866146ff936146e6926146b27f0a341b92706c414514d09d2e85a3b296c7c31b3851032575f8ce164ad10ff39a97600187016146aa868254612ccc565b905542612ef1565b60028601805490918181106147055750506000905b55429055610168546146e1906001600160a01b0316611789565b613b48565b5460408051878152602081019290925290918291820190565b0390a390565b61470e91612ef1565b906146c7565b6040516312d37ee560e31b8152600490fd5b60405163c19f17a960e01b8152600490fd5b5061476c613d51614765336147608660018060a01b031660005261017e602052604060002090565b6107ca565b5460ff1690565b614656565b90915016331415388061464e565b61479891925060203d81116137b1576137a38183610a00565b9038614635565b6147a7613231565b61462d565b60405163115c819160e21b8152600490fd5b6147c6614d15565b61017f80549182039182116147de575b554261018055565b6147e6612bfd565b6147d6565b9161487f9161485d91602061480661176b61017b5488612cab565b61016a5490969061481f906001600160a01b0316611789565b6101695461483f906117bb908a906117b5906001600160a01b0316611789565b60405163d1b317e560e01b8152968793849283929160048401613b2d565b03915afa9283156148c6575b60009361489c575b506117ff91610fca91615797565b61489961489261176b61017c5484612cab565b8092612ef1565b92565b610fca919350916148bd6117ff9360203d8111611153576111448183610a00565b93915091614871565b6148ce613231565b614869565b60405190610165828154918282526020928383019160005283600020936000905b82821061490a57505050610a2e92500383610a00565b8554845260019586019588955093810193909101906148f4565b60405190610166828154918282526020928383019160005283600020936000905b82821061495b57505050610a2e92500383610a00565b855484526001958601958895509381019390910190614945565b9061497f82611ed3565b60409061498e82519182610a00565b838152809361499f601f1991611ed3565b0191600091825b8481106149b4575050505050565b6020908351606081018181106001600160401b038211176149eb575b855285815282868183015286868301528285010152016149a6565b6149f3610927565b6149d0565b6020918151811015614a0d575b60051b010190565b614a15612cd9565b614a05565b614a226148d3565b90614a2b614924565b825190614a3f614a3a83612cbe565b614975565b93614a48614b87565b614a50610a30565b908152602091600083830152604091600083820152614a6e88612cf0565b52614a7887612cf0565b50614a89613d516101635460ff1690565b8015614b30575b614b295761017b5460005b868110614aab5750505050505050565b80614b1e8a614ada614ad1614acc614ac6614b24978d6149f8565b51614ba5565b612c66565b6117ff87612ee0565b614ae4848b6149f8565b51614aef85896149f8565b5190614af9610a30565b9283528a83015288820152614b17614b1085612cbe565b80936149f8565b528b6149f8565b5061459e565b614a9b565b5050505050565b508415614a90565b610fca614b48916106ea93615797565b620f42409081810290808204831490151715614b7a575b61017b5482039182111561393e57614b75612bfd565b61393e565b614b82612bfd565b614b5f565b6106ea614b48610fca604051614b9c816109af565b600081526156e6565b90614c20614c12614bc9614bc461017454614bbe614c77565b90612cab565b612c7e565b610169546117ff90600490602090614be9906001600160a01b0316611789565b60405163313ce56760e01b815292839182905afa908115614c6a575b600091614c5257506143f1565b670de0b6b3a7640000900490565b9180614c3a575b5061017654808310614c365750565b9150565b614c4b9192614bbe61176b92612ee0565b9038614c27565b61435c915060203d8111614362576143548183610a00565b614c72613231565b614c05565b6106ea614cc3614c85614cf5565b6101685460405163313ce56760e01b8152614bbe91602090829060049082906001600160a01b03165afa908115614c6a57600091614c5257506143f1565b670de0b6b3a764000090818102918183041490151715614ce8575b610173549061393e565b614cf0612bfd565b614cde565b61017f54614d01614d15565b8103908111614d0d5790565b6106ea612bfd565b61017554908115614d5857614d4061018054420392428411614d4b575b614b7561017f549485612cab565b91808311614c365750565b614d53612bfd565b614d32565b61017f549150565b614d6b904290614d72565b9192909190565b614d8d614e2f9193929360005261017d602052604060002090565b91602060405194614d9d8661093e565b8454958681526001860154958382019687526002810154604083015260038101549182606082015260c06006600484015493846080850152600581015460a08501520154910152614df96117896101705460018060a01b031690565b916040519687948593849363098fcce760e11b85528c600486019094939260609260808301968352602083015260408201520152565b03915afa918215614e8a575b600092614e6a575b50614e4f828095612ef1565b9251600092808210614e5f575050565b6106ea929350612ef1565b614e8391925060203d8111611153576111448183610a00565b9038614e43565b614e92613231565b614e3b565b60005261017d602052604060002060405191614eb28361093e565b815483526001820154602084015260028201546040840152614f00600383015480606086015260048401549485608082015260c0600660058701549660a08401978852015491015284612ccc565b915190565b9060018060a01b03918261016d54166040918251916370a0823160e01b83526004958216868401526020918284602481855afa938415615063575b600094615044575b50614f5284615088565b96600095865b868110614f9f5750505050505050614f6f81615088565b9060005b818110614f81575090925050565b80614f8f614f9a92876149f8565b5161227582866149f8565b614f73565b8151632f745c5960e01b8152868180614fbb8589898401613b2d565b0381895afa908115615037575b60009161501a575b508a614fea8260005261016f602052604060002054151590565b614fff575b5050614ffa9061459e565b614f58565b986150129161227582614ffa959c6149f8565b97908a614fef565b6150319150873d8911611153576111448183610a00565b38614fd0565b61503f613231565b614fc8565b61505c919450833d8511611153576111448183610a00565b9238614f48565b61506b613231565b614f40565b60405161507c816109af565b60008152906000368137565b9061509282611ed3565b61509f6040519182610a00565b82815280926150b0601f1991611ed3565b0190602036910137565b61511d9060006150d060ff825460081c166137c5565b8060606040516150df81610966565b8281526020810183905260408101839052015261016080546001600160a81b03191690556101615561016280546001600160a01b0319169055615888565b612af1615140565b9081606091031261000e578051916040602083015192015190565b6101605460ff81161561521d5760081c6001600160a01b031680158080615200575b612527571561518d575b50610161541561517b57600190565b604051637592a8c960e01b8152600490fd5b604051631dfea8ef60e01b81526000600482015290606090829060249082905afa90816151d2575b506151cc5760405163d341b5ad60e01b8152600490fd5b3861516c565b6151f29060603d81116151f9575b6151ea8183610a00565b810190615125565b50506151b5565b503d6151e0565b5061016254615217906001600160a01b0316611789565b15615162565b50600190565b610160549060ff8216156152e4576001600160a01b0360089290921c82169283156152b15750604051631dfea8ef60e01b81529116600482015290606090829060249082905afa9081156152a4575b600091615284575b5061016154111590565b61529c915060603d81116151f9576151ea8183610a00565b50503861527a565b6152ac613231565b615272565b8092935051156152d2576152c9926101625416615b30565b61016154111590565b604051634be6321b60e01b8152600490fd5b505050600190565b60006152fe60ff825460081c166137c5565b615306615070565b61530e615070565b916040519061531c82610994565b808252608060209282848201528260408201528460608201520193845261534961016360ff198154169055565b6101638054610100600160a81b031916905561016480546001600160a01b0319169055818351936001600160401b03851161543e575b600160401b8511615431575b61016580549086815581871061540f575b505061016560005201917fd91ca5e44fa96a1732bfaed7fe33fc20ed69a9895cde1f18c7dcabca39d6a78b915b8481106153fd575050505050906153e36153e8925161544b565b615888565b6153f5620f424061016755565b612af161550f565b835183820155928101926001016153c9565b84528583852091820191015b8181101561539c5784815585935060010161541b565b615439610927565b61538b565b615446610927565b61537f565b8051906001600160401b038211615502575b600160401b82116154f5575b6101668054908381558184106154cd575b50506101666000526020908101907fa5a4c57b7184ec73d55be4993773cb4eef681bc86a28d0285cd66efb50676a979060005b8481106154bb575050505050565b835183820155928101926001016154ad565b6000908152836020822092830192015b8281106154ea575061547a565b8181556001016154dd565b6154fd610927565b615469565b61550a610927565b61545d565b6101635460ff81161561521d5760081c6001600160a01b031680158080615684575b6125275715615621575b506101655480156155d25780610166540361560c5760008061016754905b8383106155695750505050600190565b61557f61557584612efe565b90549060031b1c90565b61559261558b84612c9a565b6064900490565b106155fa576155a361557584612f27565b156155d25782151590816155e4575b506155d2576155cc6155c661557584612f27565b9261459e565b91615559565b6040516310ddfd8960e31b8152600490fd5b90506155f261557584612f27565b1115386155b2565b604051637a98dc1560e01b8152600490fd5b6040516001621398b960e31b03198152600490fd5b604051631dfea8ef60e01b81526000600482015290606090829060249082905afa9081615666575b506156605760405163d341b5ad60e01b8152600490fd5b3861553b565b61567d9060603d81116151f9576151ea8183610a00565b5050615649565b506101645461569b906001600160a01b0316611789565b15615531565b90151581526001600160a01b0391821660208201529116604082015260a0606082018190526106ea9391926156d8918401906106a5565b9160808184039101526106a5565b610163549060ff8216156157905760018060a01b03809260081c1691821561576f575050602460606106ea9260405192838092631dfea8ef60e01b8252600060048301525afa908115615762575b600091615742575b5061580e565b61575a915060603d81116151f9576151ea8183610a00565b50503861573c565b61576a613231565b615734565b908092505115615790576106ea9161578b9161016454166159a9565b61580e565b5050600090565b906101635460ff8116156145965760081c6001600160a01b039081169182156157f2575060609060246106ea946040519485938492631dfea8ef60e01b84521660048301525afa90811561576257600091615742575061580e565b809192505115614596576106ea9261578b926101645416615b30565b6101658054909181805b6158255750505050600090565b6000198181019082821161587b575b8482101561586e575b826020600088815220010154831015615860575061585a90612d36565b80615818565b925050506155759150612efe565b615876612cd9565b61583d565b615883612bfd565b615834565b610a2e9061589d60ff60005460081c166137c5565b600960206040516158ad816109ca565b82815201682a34b2b9283937b7b360b91b81522090600160206040516158d2816109ca565b82815201603160f81b815220906040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85526040840152606083015246608083015260018060a01b031660a082015260a08152615935816109e5565b519020600155565b909160608284031261000e578151926020830151926040810151906001600160401b03821161000e570181601f8201121561000e57805161597d81610a4f565b9261598b6040519485610a00565b8184526020828401011161000e576106ea9160208085019101612a23565b906159be60209182808251830101910161593d565b60418195939594929451036152d257834211615b1e57604093615a59615a6586519283615a18878201928b8460609093929193608081019460008051602062005f1e83398151915282526000602083015260408201520152565b0393615a2c601f1995868101835282610a00565b519020926001549388519384918883019687909160429261190160f01b8352600283015260228201520190565b03908101835282610a00565b51902082820151858301516060909301519192906fa2a8918ca85bafe22016d0b997e4df60600160ff1b038211615b0d578651938452600092831a6020850152604084015260608301528080529060809060015afa15615b00575b6000516001600160a01b03908116918215615aef571603615adf575090565b51636518c33d60e11b8152600490fd5b8351638baa579f60e01b8152600490fd5b615b08613231565b615ac0565b8651636edfc02160e11b8152600490fd5b604051630819bdcd60e01b8152600490fd5b919091615b4760209283808251830101910161593d565b9093919460418251036152d257844211615b1e576040805160008051602062005f1e8339815191528582019081526001600160a01b03909316602084015282820188905260608301969096529490615a5990615a65908360808201615a18565b90615c2b90939293615be0600093615bd260ff865460081c16615bc9816137c5565b61383a816137c5565b615bdb33612bb4565b612bb4565b60008051602062005ede833981519152808452609860205260ff615c0783604087206107ca565b541615615c64575b835260ca602052604083206001600160a01b039091169061451e565b505b818110615c3957505050565b80615c5a615c4b615c5f9385876145b6565b35615c5581610794565b615ca8565b61459e565b615c2d565b8084526098602052615c7982604086206107ca565b805460ff19166001179055336001600160a01b0383168260008051602062005e7e8339815191528780a4615c0f565b612af190604060008051602062005efe833981519152600090808252609860205260ff615cd7858585206107ca565b541615615cf8575b815260ca602052206001600160a01b039091169061451e565b8082526098602052615d0c848484206107ca565b805460ff19166001179055336001600160a01b0385168260008051602062005e7e8339815191528580a4615cdf56fe6080806040523461001657610126908161001c8239f35b600080fdfe6080604052600480361015601257600080fd5b6000803560e01c63131f99ce14602757600080fd5b3460ed57608036600319011260ed57813560243560643560443580821160585750505050602091505b604051908152f35b828195929394950180821160da57831060775750505050602091506050565b82939491920392831160c75782810292818404149015171560b457821560a1575060209250046050565b634e487b7160e01b815260128452602490fd5b634e487b7160e01b815260118452602490fd5b634e487b7160e01b825260118552602482fd5b634e487b7160e01b835260118752602483fd5b80fdfea2646970667358221220410ea4af64d7e14dc8e6b3b435942e3edddca7d37dc4f7ac1da9f0a30c0ad38064736f6c634300081100332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d903c480df86492bc6f2f0240f18a751973dce69801170a49d03fe0c2110fbe4b28d718ed2dde96c35f3f8ce69123ce5b495286c122ab112a4a1cc74feff5a9cd85d36e3b488c35c2a15344b305cb84e2000f26d4f3a7c1e8a516f0e82aee752ae3723f41c074e25ac45636a7cd631386f2e15f8583ade05d0b710b41251f5c7bcccc91b7e41bc01aaf451f13b83907a81779126f7fdc47bb752c71287f00564ba26469706673582212209d49c488b5adefa54a0eb8c2291e99dc79326ef54557740927ffc40e5a9f657e64736f6c63430008110033