-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBullaFrendLendV2.json
More file actions
1 lines (1 loc) · 243 KB
/
Copy pathBullaFrendLendV2.json
File metadata and controls
1 lines (1 loc) · 243 KB
1
{"abi":[{"type":"constructor","inputs":[{"name":"bullaClaim","type":"address","internalType":"address"},{"name":"_owner","type":"address","internalType":"address"},{"name":"_protocolFeeBPS","type":"uint16","internalType":"uint16"},{"name":"_processingFeeBPS","type":"uint16","internalType":"uint16"}],"stateMutability":"nonpayable"},{"type":"function","name":"_bullaClaim","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBullaClaimV2"}],"stateMutability":"view"},{"type":"function","name":"acceptLoan","inputs":[{"name":"offerId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"acceptLoanWithReceiver","inputs":[{"name":"offerId","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"addToCallbackWhitelist","inputs":[{"name":"callbackContract","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addToFeeTokenWhitelist","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"callbackWhitelist","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getLoan","inputs":[{"name":"claimId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Loan","components":[{"name":"claimAmount","type":"uint256","internalType":"uint256"},{"name":"paidAmount","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum Status"},{"name":"binding","type":"uint8","internalType":"enum ClaimBinding"},{"name":"debtor","type":"address","internalType":"address"},{"name":"creditor","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"},{"name":"controller","type":"address","internalType":"address"},{"name":"dueBy","type":"uint256","internalType":"uint256"},{"name":"acceptedAt","type":"uint256","internalType":"uint256"},{"name":"interestConfig","type":"tuple","internalType":"struct InterestConfig","components":[{"name":"interestRateBps","type":"uint16","internalType":"uint16"},{"name":"numberOfPeriodsPerYear","type":"uint16","internalType":"uint16"}]},{"name":"interestComputationState","type":"tuple","internalType":"struct InterestComputationState","components":[{"name":"accruedInterest","type":"uint256","internalType":"uint256"},{"name":"latestPeriodNumber","type":"uint256","internalType":"uint256"},{"name":"protocolFeeBps","type":"uint16","internalType":"uint16"},{"name":"totalGrossInterestPaid","type":"uint256","internalType":"uint256"}]}]}],"stateMutability":"view"},{"type":"function","name":"getLoanOffer","inputs":[{"name":"offerId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct LoanOffer","components":[{"name":"params","type":"tuple","internalType":"struct LoanRequestParams","components":[{"name":"termLength","type":"uint256","internalType":"uint256"},{"name":"interestConfig","type":"tuple","internalType":"struct InterestConfig","components":[{"name":"interestRateBps","type":"uint16","internalType":"uint16"},{"name":"numberOfPeriodsPerYear","type":"uint16","internalType":"uint16"}]},{"name":"loanAmount","type":"uint256","internalType":"uint256"},{"name":"creditor","type":"address","internalType":"address"},{"name":"debtor","type":"address","internalType":"address"},{"name":"description","type":"string","internalType":"string"},{"name":"token","type":"address","internalType":"address"},{"name":"impairmentGracePeriod","type":"uint256","internalType":"uint256"},{"name":"expiresAt","type":"uint256","internalType":"uint256"},{"name":"callbackContract","type":"address","internalType":"address"},{"name":"callbackSelector","type":"bytes4","internalType":"bytes4"}]},{"name":"requestedByCreditor","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getLoanOfferMetadata","inputs":[{"name":"offerId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ClaimMetadata","components":[{"name":"tokenURI","type":"string","internalType":"string"},{"name":"attachmentURI","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getTotalAmountDue","inputs":[{"name":"claimId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"remainingPrincipal","type":"uint256","internalType":"uint256"},{"name":"grossInterest","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"impairLoan","inputs":[{"name":"claimId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isCallbackWhitelisted","inputs":[{"name":"callbackContract","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"loanOfferCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"markLoanAsPaid","inputs":[{"name":"claimId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"offerLoan","inputs":[{"name":"offer","type":"tuple","internalType":"struct LoanRequestParams","components":[{"name":"termLength","type":"uint256","internalType":"uint256"},{"name":"interestConfig","type":"tuple","internalType":"struct InterestConfig","components":[{"name":"interestRateBps","type":"uint16","internalType":"uint16"},{"name":"numberOfPeriodsPerYear","type":"uint16","internalType":"uint16"}]},{"name":"loanAmount","type":"uint256","internalType":"uint256"},{"name":"creditor","type":"address","internalType":"address"},{"name":"debtor","type":"address","internalType":"address"},{"name":"description","type":"string","internalType":"string"},{"name":"token","type":"address","internalType":"address"},{"name":"impairmentGracePeriod","type":"uint256","internalType":"uint256"},{"name":"expiresAt","type":"uint256","internalType":"uint256"},{"name":"callbackContract","type":"address","internalType":"address"},{"name":"callbackSelector","type":"bytes4","internalType":"bytes4"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"offerLoanWithMetadata","inputs":[{"name":"offer","type":"tuple","internalType":"struct LoanRequestParams","components":[{"name":"termLength","type":"uint256","internalType":"uint256"},{"name":"interestConfig","type":"tuple","internalType":"struct InterestConfig","components":[{"name":"interestRateBps","type":"uint16","internalType":"uint16"},{"name":"numberOfPeriodsPerYear","type":"uint16","internalType":"uint16"}]},{"name":"loanAmount","type":"uint256","internalType":"uint256"},{"name":"creditor","type":"address","internalType":"address"},{"name":"debtor","type":"address","internalType":"address"},{"name":"description","type":"string","internalType":"string"},{"name":"token","type":"address","internalType":"address"},{"name":"impairmentGracePeriod","type":"uint256","internalType":"uint256"},{"name":"expiresAt","type":"uint256","internalType":"uint256"},{"name":"callbackContract","type":"address","internalType":"address"},{"name":"callbackSelector","type":"bytes4","internalType":"bytes4"}]},{"name":"metadata","type":"tuple","internalType":"struct ClaimMetadata","components":[{"name":"tokenURI","type":"string","internalType":"string"},{"name":"attachmentURI","type":"string","internalType":"string"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"payLoan","inputs":[{"name":"claimId","type":"uint256","internalType":"uint256"},{"name":"paymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"processingFeeBPS","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"protocolFeeBPS","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"protocolFeeTokenWhitelist","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"protocolFeesByToken","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rejectLoanOffer","inputs":[{"name":"offerId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeFromCallbackWhitelist","inputs":[{"name":"callbackContract","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeFromFeeTokenWhitelist","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPaidLoanCallback","inputs":[{"name":"loanId","type":"uint256","internalType":"uint256"},{"name":"callbackContract","type":"address","internalType":"address"},{"name":"callbackSelector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProcessingFee","inputs":[{"name":"_processingFeeBPS","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFee","inputs":[{"name":"_protocolFeeBPS","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistedProtocolFeeTokens","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"withdrawAllFees","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CallbackRemovedFromWhitelist","inputs":[{"name":"callbackContract","type":"address","indexed":true,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"CallbackWhitelisted","inputs":[{"name":"callbackContract","type":"address","indexed":true,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"FeeWithdrawn","inputs":[{"name":"admin","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LoanOfferAccepted","inputs":[{"name":"offerId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"claimId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"processingFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"metadata","type":"tuple","indexed":false,"internalType":"struct ClaimMetadata","components":[{"name":"tokenURI","type":"string","internalType":"string"},{"name":"attachmentURI","type":"string","internalType":"string"}]}],"anonymous":false},{"type":"event","name":"LoanOfferRejected","inputs":[{"name":"offerId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"rejectedBy","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"LoanOffered","inputs":[{"name":"offerId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"offeredBy","type":"address","indexed":true,"internalType":"address"},{"name":"loanOffer","type":"tuple","indexed":false,"internalType":"struct LoanRequestParams","components":[{"name":"termLength","type":"uint256","internalType":"uint256"},{"name":"interestConfig","type":"tuple","internalType":"struct InterestConfig","components":[{"name":"interestRateBps","type":"uint16","internalType":"uint16"},{"name":"numberOfPeriodsPerYear","type":"uint16","internalType":"uint16"}]},{"name":"loanAmount","type":"uint256","internalType":"uint256"},{"name":"creditor","type":"address","internalType":"address"},{"name":"debtor","type":"address","internalType":"address"},{"name":"description","type":"string","internalType":"string"},{"name":"token","type":"address","internalType":"address"},{"name":"impairmentGracePeriod","type":"uint256","internalType":"uint256"},{"name":"expiresAt","type":"uint256","internalType":"uint256"},{"name":"callbackContract","type":"address","internalType":"address"},{"name":"callbackSelector","type":"bytes4","internalType":"bytes4"}]},{"name":"metadata","type":"tuple","indexed":false,"internalType":"struct ClaimMetadata","components":[{"name":"tokenURI","type":"string","internalType":"string"},{"name":"attachmentURI","type":"string","internalType":"string"}]}],"anonymous":false},{"type":"event","name":"LoanPayment","inputs":[{"name":"claimId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"grossInterestPaid","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"principalPaid","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProcessingFeeUpdated","inputs":[{"name":"oldFee","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newFee","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"oldFee","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newFee","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"TokenAddedToFeesWhitelist","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenRemovedFromFeesWhitelist","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CallbackFailed","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"CallbackNotWhitelisted","inputs":[]},{"type":"error","name":"IncorrectFee","inputs":[]},{"type":"error","name":"InvalidGracePeriod","inputs":[]},{"type":"error","name":"InvalidProtocolFee","inputs":[]},{"type":"error","name":"InvalidTermLength","inputs":[]},{"type":"error","name":"LoanOfferExpired","inputs":[]},{"type":"error","name":"LoanOfferNotFound","inputs":[]},{"type":"error","name":"NativeTokenNotSupported","inputs":[]},{"type":"error","name":"NotController","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"NotCreditor","inputs":[]},{"type":"error","name":"NotCreditorOrDebtor","inputs":[]},{"type":"error","name":"NotDebtor","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60a060405234801561000f575f5ffd5b506040516161e33803806161e383398101604081905261002e916101af565b6001600160a01b038085166080528390811661006357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006c81610134565b5061271061ffff8316111561009457604051631752ff0760e31b815260040160405180910390fd5b61271061ffff821611156100bb57604051631752ff0760e31b815260040160405180910390fd5b6002805461ffff838116620100000263ffffffff1990921690851617179055604080516060810182525f818301818152825282516020818101909452908152918101919091528051600a9081906101129082610298565b50602082015160018201906101279082610298565b5090505050505050610352565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610199575f5ffd5b919050565b805161ffff81168114610199575f5ffd5b5f5f5f5f608085870312156101c2575f5ffd5b6101cb85610183565b93506101d960208601610183565b92506101e76040860161019e565b91506101f56060860161019e565b905092959194509250565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061022857607f821691505b60208210810361024657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029357805f5260205f20601f840160051c810160208510156102715750805b601f840160051c820191505b81811015610290575f815560010161027d565b50505b505050565b81516001600160401b038111156102b1576102b1610200565b6102c5816102bf8454610214565b8461024c565b6020601f8211600181146102f7575f83156102e05750848201515b5f19600385901b1c1916600184901b178455610290565b5f84815260208120601f198516915b828110156103265787850151825560209485019460019092019101610306565b508482101561034357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608051615dca6104195f395f818161042901528181610a0101528181610ab101528181610b9201528181610c4101528181610d2a01528181610f21015281816117db0152818161189f01528181611b4801528181611bd301528181611eb301528181611f770152818161216b015281816123100152818161255101528181612726015281816127f201528181612c1f01528181612cbb01528181612dc40152818161375c01528181613883015281816139ac01528181613fa301526140660152615dca5ff3fe6080604052600436106102cc575f3560e01c8063715018a61161017b578063af236af4116100d1578063e4467f3511610087578063f2fde38b11610062578063f2fde38b146108ad578063f851a44014610675578063fce5f608146108cc575f5ffd5b8063e4467f3514610850578063e985e9c51461086f578063ea7d616b1461088e575f5ffd5b8063b9108c03116100b7578063b9108c03146107f2578063d4251f9e14610805578063db4e089914610824575f5ffd5b8063af236af4146107bf578063b88d4fde146107d3575f5ffd5b806396daa32211610131578063a5cc6a7f1161010c578063a5cc6a7f14610709578063a64d6beb14610737578063adfbe22f146107ac575f5ffd5b806396daa3221461069e578063a15c24f3146106cb578063a22cb465146106ea575f5ffd5b80638804614611610161578063880461461461063757806389306e61146106565780638da5cb5b14610675575f5ffd5b8063715018a6146106045780638245999514610618575f5ffd5b806339737e071161023057806352331cf8116101e6578063631f1a3c116101c1578063631f1a3c1461059a5780636352211e146105c657806370a08231146105e5575f5ffd5b806352331cf81461053d5780636208d89c1461055c578063623fb7ce1461057b575f5ffd5b80634be18e94116102165780634be18e94146104d3578063504006ca146104f2578063520eb0761461051e575f5ffd5b806339737e071461048957806342842e0e146104b4575f5ffd5b80631bc7cd3d116102855780632b538af51161026b5780632b538af5146104185780632d1982ff1461044b578063307a80881461046a575f5ffd5b80631bc7cd3d146103c557806323b872dd146103f9575f5ffd5b8063081812fc116102b5578063081812fc1461033d578063095ea7b314610381578063150a6422146103a2575f5ffd5b806301ffc9a7146102d057806304dbf91314610304575b5f5ffd5b3480156102db575f5ffd5b506102ef6102ea366004614af4565b6108ec565b60405190151581526020015b60405180910390f35b34801561030f575f5ffd5b506102ef61031e366004614b3b565b600660209081525f928352604080842090915290825290205460ff1681565b348015610348575f5ffd5b5061035c610357366004614b72565b6109d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fb565b34801561038c575f5ffd5b506103a061039b366004614b89565b610a80565b005b3480156103ad575f5ffd5b506103b760015481565b6040519081526020016102fb565b3480156103d0575f5ffd5b506103e46103df366004614b72565b610bef565b604080519283526020830191909152016102fb565b348015610404575f5ffd5b506103a0610413366004614bb3565b610c10565b348015610423575f5ffd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610456575f5ffd5b506103b7610465366004614c08565b610d89565b348015610475575f5ffd5b506103a0610484366004614b3b565b610da3565b348015610494575f5ffd5b506103b76104a3366004614c68565b60046020525f908152604090205481565b3480156104bf575f5ffd5b506103a06104ce366004614bb3565b610e99565b3480156104de575f5ffd5b5061035c6104ed366004614b72565b610eb3565b3480156104fd575f5ffd5b5061051161050c366004614b72565b610ee8565b6040516102fb9190614cd4565b348015610529575f5ffd5b506103a0610538366004614b3b565b611242565b348015610548575f5ffd5b506103a0610557366004614e35565b6112ed565b348015610567575f5ffd5b506103a0610576366004614b72565b6113b4565b348015610586575f5ffd5b506103a0610595366004614b72565b6117aa565b3480156105a5575f5ffd5b506105b96105b4366004614b72565b611910565b6040516102fb9190614e9c565b3480156105d1575f5ffd5b5061035c6105e0366004614b72565b611b17565b3480156105f0575f5ffd5b506103b76105ff366004614c68565b611b8c565b34801561060f575f5ffd5b506103a0611c3e565b348015610623575f5ffd5b506103a0610632366004614c68565b611c51565b348015610642575f5ffd5b506103a0610651366004614b72565b611e82565b348015610661575f5ffd5b506103a0610670366004614fd2565b611fbb565b348015610680575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661035c565b3480156106a9575f5ffd5b506002546106b89061ffff1681565b60405161ffff90911681526020016102fb565b3480156106d6575f5ffd5b506103b76106e5366004614ff2565b6123ce565b3480156106f5575f5ffd5b506103a0610704366004615031565b612504565b348015610714575f5ffd5b506102ef610723366004614c68565b60056020525f908152604090205460ff1681565b348015610742575f5ffd5b506102ef610751366004614b3b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205460ff1692915050565b6103b76107ba366004614b72565b612592565b3480156107ca575f5ffd5b506103a061259e565b3480156107de575f5ffd5b506103a06107ed36600461516c565b6126f5565b6103b76108003660046151e7565b612864565b348015610810575f5ffd5b506103a061081f366004614c68565b612870565b34801561082f575f5ffd5b5061084361083e366004614b72565b61298f565b6040516102fb9190615240565b34801561085b575f5ffd5b506103a061086a366004614e35565b612b1b565b34801561087a575f5ffd5b506102ef610889366004615252565b612bd0565b348015610899575f5ffd5b506103a06108a836600461527e565b612c8a565b3480156108b8575f5ffd5b506103a06108c7366004614c68565b612df3565b3480156108d7575f5ffd5b506002546106b89062010000900461ffff1681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fb51e2f0400000000000000000000000000000000000000000000000000000000148061097e57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109ca57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f081812fc000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063081812fc906024015b602060405180830381865afa158015610a5c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ca91906152c8565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3091906152ff565b9050610b40816101000151612e58565b6040517f52ec852900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906352ec8529906064015f604051808303815f87803b158015610bd3575f5ffd5b505af1158015610be5573d5f5f3e3d5ffd5b505050505b505050565b5f5f5f610bfb84610ee8565b9050610c0681612ea9565b9250925050915091565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610c9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc091906152ff565b9050610cd0816101000151612e58565b6040517faf9fe4de00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063af9fe4de906084015b5f604051808303815f87803b158015610d6c575f5ffd5b505af1158015610d7e573d5f5f3e3d5ffd5b505050505b50505050565b5f610d9c83610d97846153de565b612ecd565b9392505050565b610dab6131d0565b73ffffffffffffffffffffffffffffffffffffffff82161580610dee57507fffffffff000000000000000000000000000000000000000000000000000000008116155b610e955773ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519092917f177c467a5dec0610cb3afa435a1f7efa9cd39bf81ff2273f06ae7668a00e310b91a35b5050565b610bea83838360405180602001604052805f8152506126f5565b60038181548110610ec2575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610ef06148c6565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018390525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa091906152ff565b9050610fb0816101000151612e58565b5f8381526008602090815260408083208151608080820184528254825283518085018552600184015461ffff8082168352620100009091048116828801528387019190915284519182018552600284015482526003840154958201959095526004830154909416848401526005820154606080860191909152928101939093526006015460ff1615159082015290826101200151600581111561105557611055614c83565b148061107757506001826101200151600581111561107557611075614c83565b145b8061109857506005826101200151600581111561109657611096614c83565b145b1561113c5773__$4bbbaa6d90f42a60403c514cce5191a63a$__63ff7f44438360200151845f01516110ca9190615479565b835f0151846020015185604001516040518563ffffffff1660e01b81526004016110f7949392919061548c565b608060405180830381865af4158015611112573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113691906154e1565b60408201525b604051806101800160405280835f0151815260200183602001518152602001836101200151600581111561117257611172614c83565b8152602001836101400151600281111561118e5761118e614c83565b81526020018360a0015173ffffffffffffffffffffffffffffffffffffffff1681526020018360c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018360e0015173ffffffffffffffffffffffffffffffffffffffff16815260200183610100015173ffffffffffffffffffffffffffffffffffffffff16815260200183604001518152602001825f0151815260200182602001518152602001826040015181525092505050919050565b61124a6131d0565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519092917f36112db5f88f36037ce600104320a87f5636f34183686bbc76a66ec5588fccc991a35050565b6112f56131d0565b61271061ffff82161115611335576040517fba97f83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805461ffff838116620100008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff85161790945560408051949093049091168084526020840191909152917f94d513c10ff5e8f0454d36f41da1d81583ca73420fcfff120599b4b73cdf1e6d91015b60405180910390a15050565b5f81815260076020908152604080832081516101a08101835281548184019081528351808501909452600183015461ffff8082168652620100009091041694840194909452606081019290925260028101546080830152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a084015260048201541660c083015260058101805492939192849291849160e0850191906114569061554d565b80601f01602080910402602001604051908101604052809291908181526020018280546114829061554d565b80156114cd5780601f106114a4576101008083540402835291602001916114cd565b820191905f5260205f20905b8154815290600101906020018083116114b057829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff908116602080840191909152600784015460408401526008840154606080850191909152600990940154808316608085015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090930192909252928452600a949094015460ff1615159290930191909152825190910151919250166115be576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516060015173ffffffffffffffffffffffffffffffffffffffff163314801590611604575080516080015173ffffffffffffffffffffffffffffffffffffffff163314155b1561163b576040517f5d6db4c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055600281018290556003810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560048201805490911690559081816116c460058301826149cf565b506006810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555f6007820181905560088201819055600991820180547fffffffffffffffff000000000000000000000000000000000000000000000000169055600a9390930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905584835260205250604081209061176b82826149cf565b611778600183015f6149cf565b5050604051339083907f5c6eae33ff1cd222fb8964d3a9cb61f3c59d868bb587b0ad1f131fb6d99328ad905f90a35050565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015611836573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a91906152ff565b905061186a816101000151612e58565b6040517f3081ed8a000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633081ed8a906044015b5f604051808303815f87803b1580156118f6575f5ffd5b505af1158015611908573d5f5f3e3d5ffd5b505050505050565b611918614a06565b6001548210611953576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602090815260409182902082516101a08101845281548185019081528451808601909552600183015461ffff8082168752620100009091041693850193909352606081019390935260028101546080840152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a085015260048201541660c0840152600581018054919284929091849160e0850191906119f59061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a219061554d565b8015611a6c5780601f10611a4357610100808354040283529160200191611a6c565b820191905f5260205f20905b815481529060010190602001808311611a4f57829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526007840154604084015260088401546060840152600990930154908116608083015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090910152908252600a929092015460ff16151591015292915050565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401610a41565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ca9190615598565b611c466131d0565b611c4f5f613222565b565b611c596131d0565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526005602052604090205460ff1615611e3f5773ffffffffffffffffffffffffffffffffffffffff81165f90815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015611e3d578173ffffffffffffffffffffffffffffffffffffffff1660038281548110611d0557611d056155af565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603611e355760038054611d3b90600190615479565b81548110611d4b57611d4b6155af565b5f918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611d8357611d836155af565b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003805480611dd957611dd96155dc565b5f8281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611e3d565b600101611cd1565b505b60405173ffffffffffffffffffffffffffffffffffffffff8216907fceeec53cbb10af8d416c74d15b37f2c8761d65af488132f6de71b01176ad2334905f90a250565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015611f0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3291906152ff565b9050611f42816101000151612e58565b6040517f2a982aeb000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632a982aeb906044016118df565b5f611fc583610ee8565b90505f5f611fd283612ea9565b915091505f611fe18583613296565b90505f611ff7611ff18388615479565b85613296565b90506040518060800160405280838761016001515f01516120189190615479565b81526020018661016001516020015181526020018661016001516040015161ffff16815260200183876101600151606001516120549190615609565b90525f8881526008602090815260409182902083516002820155908301516003820155908201516004820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff9092169190911790556060909101516005909101556120c58183615609565b5f888152600860205260408120600601549197509060ff16806120e6575082155b61210b57612106838761014001515f0151886101600151604001516132a5565b61210d565b5f5b90505f61211a8285615479565b90505f6121278483615609565b90505f84156121ec576040517e8c1075000000000000000000000000000000000000000000000000000000008152336004820152602481018c9052604481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690628c1075906064016020604051808303815f875af11580156121c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e9919061561c565b90505b89156122965783156122365760c089015173ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604081208054869290612230908490615609565b90915550505b60c089015161225d9073ffffffffffffffffffffffffffffffffffffffff1633308d6132ca565b8115612296576122968960a00151838b60c0015173ffffffffffffffffffffffffffffffffffffffff166133859092919063ffffffff16565b60408051878152602081018790529081018590528b907f06283ce23ea8ff00b2f5df7b85dc1a077d69a207b3b48ecdaf73bf2189dd2e0f9060600160405180910390a280156123c1576040517fd6700bef000000000000000000000000000000000000000000000000000000008152600481018c90525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d6700bef906024016040805180830381865afa158015612369573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238d9190615637565b805190915073ffffffffffffffffffffffffffffffffffffffff16156123bf576123bf815f015182602001518e61343a565b505b5050505050505050505050565b5f6109ca82600a6040518060400160405290815f820180546123ef9061554d565b80601f016020809104026020016040519081016040528092919081815260200182805461241b9061554d565b80156124665780601f1061243d57610100808354040283529160200191612466565b820191905f5260205f20905b81548152906001019060200180831161244957829003601f168201915b5050505050815260200160018201805461247f9061554d565b80601f01602080910402602001604051908101604052809291908181526020018280546124ab9061554d565b80156124f65780601f106124cd576101008083540402835291602001916124f6565b820191905f5260205f20905b8154815290600101906020018083116124d957829003601f168201915b505050505081525050612ecd565b6040517fa22cb46500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301527f0000000000000000000000000000000000000000000000000000000000000000169063a22cb465906044015f604051808303815f87803b1580156118f6575f5ffd5b5f6109ca33835f613551565b6125a66131d0565b5f5b6003548110156126f2575f600382815481106125c6576125c66155af565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600490915260409091205490915080156126e85773ffffffffffffffffffffffffffffffffffffffff82165f908152600460205260408120556126646126465f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff84169083613385565b8173ffffffffffffffffffffffffffffffffffffffff166126995f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167eed5939179dc194223f0edd1517ecee2210b22da7f82c8e4b1795e93b9f06aa836040516126df91815260200190565b60405180910390a35b50506001016125a8565b50565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018390525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015612781573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a591906152ff565b90506127b5816101000151612e58565b6040517ffcf391e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fcf391e09061282f9033908990899089908990600401615678565b5f604051808303815f87803b158015612846575f5ffd5b505af1158015612858573d5f5f3e3d5ffd5b505050505b5050505050565b5f610d9c338484613551565b6128786131d0565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526005602052604090205460ff1661294c5773ffffffffffffffffffffffffffffffffffffffff81165f81815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60405173ffffffffffffffffffffffffffffffffffffffff8216907f8ac7e85f445e8ee1c850abbfcd9da63ccb7b527c076290946108a7c280247096905f90a250565b604080518082019091526060808252602082015260015482106129de576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260096020526040908190208151808301909252805482908290612a049061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a309061554d565b8015612a7b5780601f10612a5257610100808354040283529160200191612a7b565b820191905f5260205f20905b815481529060010190602001808311612a5e57829003601f168201915b50505050508152602001600182018054612a949061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac09061554d565b8015612b0b5780601f10612ae257610100808354040283529160200191612b0b565b820191905f5260205f20905b815481529060010190602001808311612aee57829003601f168201915b5050505050815250509050919050565b612b236131d0565b61271061ffff82161115612b63576040517fba97f83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805461ffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000083168117909355604080519190921680825260208201939093527f26bc4a9b6ef30ec448ec7094c0f1002b0c6b8363d6a56be88ce399f1ac3d92f991016113a8565b6040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063e985e9c590604401602060405180830381865afa158015612c66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c919061561c565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015612d16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d3a91906152ff565b9050612d4a816101000151612e58565b6040517fe9c1d0c00000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff84811660448301527fffffffff00000000000000000000000000000000000000000000000000000000841660648301527f0000000000000000000000000000000000000000000000000000000000000000169063e9c1d0c090608401610d55565b612dfb6131d0565b73ffffffffffffffffffffffffffffffffffffffff8116612e4f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6126f281613222565b73ffffffffffffffffffffffffffffffffffffffff811630146126f2576040517f66719b7a000000000000000000000000000000000000000000000000000000008152336004820152602401612e46565b5f5f8260200151835f0151612ebe9190615479565b61016090930151519293915050565b5f80612edf60a0850160808601614c68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050612f1984826143a8565b600180545f9182612f29836156ef565b919050559050604051806040016040528086612f4490615766565b81528315156020918201525f83815260078252604090819020835180518255808401518051600184018054929096015161ffff90811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931691161717909355908201516002820155606082015160038201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155608084015160048401805491909316911617905560a08201519091908290600582019061302b9082615883565b5060c082015160068201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e08084015160078401556101008401516008840155610120840151600990930180546101409095015190911c74010000000000000000000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909416929091169190911791909117905560209190910151600a90910180549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905583515115158061313b57505f846020015151115b15613177575f8181526009602052604090208451859190819061315e9082615883565b50602082015160018201906131739082615883565b5050505b3373ffffffffffffffffffffffffffffffffffffffff16817fa94a87c6a478ee9e74c583560db13c9b623c84cf97e82551f872fcd1a4800ffc87876040516131c0929190615a76565b60405180910390a3949350505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611c4f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401612e46565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828218828410028218610d9c565b5f6132c28461ffff84166132b98587615bc6565b61ffff166146b7565b949350505050565b5f6040517f23b872dd00000000000000000000000000000000000000000000000000000000815284600482015283602482015282604482015260205f6064835f8a5af13d15601f3d1160015f51141617169150508061285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401612e46565b5f6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815283600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401612e46565b5f828260405160240161344f91815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f5f8573ffffffffffffffffffffffffffffffffffffffff16836040516134d59190615be0565b5f604051808303815f865af19150503d805f811461350e576040519150601f19603f3d011682016040523d82523d5f602084013e613513565b606091505b50915091508161190857806040517f30b9b6dd000000000000000000000000000000000000000000000000000000008152600401612e469190615bf6565b5f82815260076020908152604080832081516101a08101835281548184019081528351808501909452600183015461ffff8082168652620100009091041694840194909452606081019290925260028101546080830152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a084015260048201541660c0830152600581018054859484929091849160e08501916135f19061554d565b80601f016020809104026020016040519081016040528092919081815260200182805461361d9061554d565b80156136685780601f1061363f57610100808354040283529160200191613668565b820191905f5260205f20905b81548152906001019060200180831161364b57829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff908116602080840191909152600784015460408401526008840154606080850191909152600990940154808316608085015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090930192909252928452600a949094015460ff161515929093019190915282519091015191925016613759576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301a2cae86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e791906152c8565b8251608001516040517fbabcc53900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063babcc53990602401602060405180830381865afa158015613857573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061387b919061561c565b806139a257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301a2cae86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390e91906152c8565b8251606001516040517fbabcc53900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063babcc53990602401602060405180830381865afa15801561397e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a2919061561c565b90505f81613a3c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638204c6276040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a379190615598565b613a3e565b5f5b9050803414613a79576040517fcd3cb2bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251610100015115801590613a9357508251610100015142115b15613aca576040517f076802fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015115613b305782516080015173ffffffffffffffffffffffffffffffffffffffff888116911614613b2b576040517f2e15fb7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613bd5565b82516060015173ffffffffffffffffffffffffffffffffffffffff888116911614613b87576040517fe16e54be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851615613bd5576040517f2e15fb7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff8616613bfc57835160800151613bfe565b855b90505f60095f8981526020019081526020015f206040518060400160405290815f82018054613c2c9061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054613c589061554d565b8015613ca35780601f10613c7a57610100808354040283529160200191613ca3565b820191905f5260205f20905b815481529060010190602001808311613c8657829003601f168201915b50505050508152602001600182018054613cbc9061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054613ce89061554d565b8015613d335780601f10613d0a57610100808354040283529160200191613d33565b820191905f5260205f20905b815481529060010190602001808311613d1657829003601f168201915b505050919092525050505f8981526007602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055600281018290556003810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560048201805490911690559192508181613dc860058301826149cf565b506006810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555f6007820181905560088201819055600991820180547fffffffffffffffff000000000000000000000000000000000000000000000000169055600a9390930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558a8352602052506040812090613e6f82826149cf565b613e7c600183015f6149cf565b50505f604051806101000160405280875f01516060015173ffffffffffffffffffffffffffffffffffffffff168152602001875f01516080015173ffffffffffffffffffffffffffffffffffffffff168152602001875f0151604001518152602001875f015160a001518152602001875f015160c0015173ffffffffffffffffffffffffffffffffffffffff168152602001600280811115613f2057613f20614c83565b8152875151602090910190613f359042615609565b8152875160e001516020909101528251519091505f90151580613f5c57505f836020015151115b15614023578651608001516040517e4b382900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691624b3829918891613fdb9187908990600401615cc3565b60206040518083038185885af1158015613ff7573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061401c9190615598565b90506140e1565b8651608001516040517f1461f12600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691631461f12691889161409d918790600401615d0d565b60206040518083038185885af11580156140b9573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140de9190615598565b90505b6040518060800160405280428152602001885f015160200151815260200160405180608001604052805f81526020015f8152602001896141275760025461ffff16614129565b5f5b61ffff90811682525f60209283018190529284528a15159382019390935284825260088152604080832085518155858301518051600183018054928601519188167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009093169290921762010000918816820217909155868301518051600280850191909155948101516003840155808401516004840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016918916919091179055606090810151600584015590960151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558b5101519054919361424593919204166127106146b7565b90505f81895f01516040015161425b9190615479565b905081156142a257885160c0015173ffffffffffffffffffffffffffffffffffffffff165f908152600460205260408120805484929061429c908490615609565b90915550505b88516060810151604082015160c0909201516142d99273ffffffffffffffffffffffffffffffffffffffff909116919030906132ca565b801561430657885160c001516143069073ffffffffffffffffffffffffffffffffffffffff168783613385565b8851610120015173ffffffffffffffffffffffffffffffffffffffff16156143435788516101208101516101409091015161434391908e86614767565b8573ffffffffffffffffffffffffffffffffffffffff16838d7f2a82588a72d442d0ca15bc61c1abab1812c42c9eab1d127cb645dd934fa9136e8a868a60405161438f93929190615d3b565b60405180910390a450909b9a5050505050505050505050565b801580156143f157506143c160c0830160a08401614c68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15614428576040517f5d6db4c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81355f03614462576040517fd88194e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f614474610100840160e08501614c68565b73ffffffffffffffffffffffffffffffffffffffff16036144c1576040517fb10b947e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b64ffffffffff6101008301351115614505576040517fd7c43e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82610120013511801561451d575081610120013542115b15614554576040517f076802fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61456761016084016101408501614c68565b73ffffffffffffffffffffffffffffffffffffffff161461463c5760065f61459761016085016101408601614c68565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f908120906145d161018085016101608601614af4565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040015f205460ff1661463c576040517f8e792a0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9d6c6ae700000000000000000000000000000000000000000000000000000000815273__$4bbbaa6d90f42a60403c514cce5191a63a$__90639d6c6ae79061468f906020860190600401615d59565b5f6040518083038186803b1580156146a5575f5ffd5b505af4158015611908573d5f5f3e3d5ffd5b5f5f5f6146c4868661487a565b91509150815f036146e8578381816146de576146de615d67565b0492505050610d9c565b8184116146ff576146ff60038515026011186148b5565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b6040805160248101849052604480820184905282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000871617905290515f90819073ffffffffffffffffffffffffffffffffffffffff8816906147fe908590615be0565b5f604051808303815f865af19150503d805f8114614837576040519150601f19603f3d011682016040523d82523d5f602084013e61483c565b606091505b509150915081610be557806040517f30b9b6dd000000000000000000000000000000000000000000000000000000008152600401612e469190615bf6565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f60058111156148f0576148f0614c83565b81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f815260200161499a60405180604001604052805f61ffff1681526020015f61ffff1681525090565b81526020016149ca60405180608001604052805f81526020015f81526020015f61ffff1681526020015f81525090565b905290565b5080546149db9061554d565b5f825580601f106149ea575050565b601f0160209004905f5260205f20908101906126f29190614a25565b6040518060400160405280614a19614a3d565b81525f60209091015290565b5b80821115614a39575f8155600101614a26565b5090565b6040518061016001604052805f8152602001614a7260405180604001604052805f61ffff1681526020015f61ffff1681525090565b81525f60208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e0820181905261010082018190526101209091015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146126f2575f5ffd5b8035614aef81614ab7565b919050565b5f60208284031215614b04575f5ffd5b8135610d9c81614ab7565b73ffffffffffffffffffffffffffffffffffffffff811681146126f2575f5ffd5b8035614aef81614b0f565b5f5f60408385031215614b4c575f5ffd5b8235614b5781614b0f565b91506020830135614b6781614ab7565b809150509250929050565b5f60208284031215614b82575f5ffd5b5035919050565b5f5f60408385031215614b9a575f5ffd5b8235614ba581614b0f565b946020939093013593505050565b5f5f5f60608486031215614bc5575f5ffd5b8335614bd081614b0f565b92506020840135614be081614b0f565b929592945050506040919091013590565b5f6101808284031215614c02575f5ffd5b50919050565b5f5f60408385031215614c19575f5ffd5b823567ffffffffffffffff811115614c2f575f5ffd5b614c3b85828601614bf1565b925050602083013567ffffffffffffffff811115614c57575f5ffd5b830160408186031215614b67575f5ffd5b5f60208284031215614c78575f5ffd5b8135610d9c81614b0f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60068110614cc057614cc0614c83565b9052565b60038110614cc057614cc0614c83565b5f6102008201905082518252602083015160208301526040830151614cfc6040840182614cb0565b506060830151614d0f6060840182614cc4565b506080830151614d37608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a0830151614d5f60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c0830151614d8760c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151614daf60e084018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100830151610100830152610120830151610120830152610140830151614ded610140840182805161ffff908116835260209182015116910152565b506101609290920151805161018083015260208101516101a0830152604081015161ffff166101c0830152606001516101e09091015290565b61ffff811681146126f2575f5ffd5b5f60208284031215614e45575f5ffd5b8135610d9c81614e26565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f825160406020840152805160608401526020810151614ed46080850182805161ffff908116835260209182015116910152565b50604081015160c0840152606081015173ffffffffffffffffffffffffffffffffffffffff90811660e085015260808201511661010084015260a0810151610180610120850152614f296101e0850182614e50565b905060c0820151614f5361014086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e082015161016085015261010082015161018085015261012082015173ffffffffffffffffffffffffffffffffffffffff166101a0850152610140909101517fffffffff00000000000000000000000000000000000000000000000000000000166101c08401526020840151801515604085015290949350505050565b5f5f60408385031215614fe3575f5ffd5b50508035926020909101359150565b5f60208284031215615002575f5ffd5b813567ffffffffffffffff811115615018575f5ffd5b6132c284828501614bf1565b80151581146126f2575f5ffd5b5f5f60408385031215615042575f5ffd5b823561504d81614b0f565b91506020830135614b6781615024565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610160810167ffffffffffffffff811182821017156150ae576150ae61505d565b60405290565b6040805190810167ffffffffffffffff811182821017156150ae576150ae61505d565b5f5f67ffffffffffffffff8411156150f1576150f161505d565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561513e5761513e61505d565b604052838152905080828401851015615155575f5ffd5b838360208301375f60208583010152509392505050565b5f5f5f5f6080858703121561517f575f5ffd5b843561518a81614b0f565b9350602085013561519a81614b0f565b925060408501359150606085013567ffffffffffffffff8111156151bc575f5ffd5b8501601f810187136151cc575f5ffd5b6151db878235602084016150d7565b91505092959194509250565b5f5f604083850312156151f8575f5ffd5b823591506020830135614b6781614b0f565b5f81516040845261521e6040850182614e50565b9050602083015184820360208601526152378282614e50565b95945050505050565b602081525f610d9c602083018461520a565b5f5f60408385031215615263575f5ffd5b823561526e81614b0f565b91506020830135614b6781614b0f565b5f5f5f60608486031215615290575f5ffd5b8335925060208401356152a281614b0f565b915060408401356152b281614ab7565b809150509250925092565b8051614aef81614b0f565b5f602082840312156152d8575f5ffd5b8151610d9c81614b0f565b805160068110614aef575f5ffd5b805160038110614aef575f5ffd5b5f610160828403128015615311575f5ffd5b5061531a61508a565b82518152602080840151908201526040808401519082015260608084015190820152615348608084016152bd565b608082015261535960a084016152bd565b60a082015261536a60c084016152bd565b60c082015261537b60e084016152bd565b60e082015261538d61010084016152bd565b6101008201526153a061012084016152e3565b6101208201526153b361014084016152f1565b6101408201529392505050565b5f82601f8301126153cf575f5ffd5b610d9c838335602085016150d7565b5f604082360312156153ee575f5ffd5b6153f66150b4565b823567ffffffffffffffff81111561540c575f5ffd5b615418368286016153c0565b825250602083013567ffffffffffffffff811115615434575f5ffd5b615440368286016153c0565b60208301525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156109ca576109ca61544c565b8481526020808201859052835161ffff908116604084015290840151166060820152610100810182516080830152602083015160a0830152604083015161ffff1660c0830152606083015160e0830152615237565b5f60808284031280156154f2575f5ffd5b506040516080810167ffffffffffffffff811182821017156155165761551661505d565b6040908152835182526020808501519083015283015161553581614e26565b60408201526060928301519281019290925250919050565b600181811c9082168061556157607f821691505b602082108103614c02577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f602082840312156155a8575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b808201808211156109ca576109ca61544c565b5f6020828403121561562c575f5ffd5b8151610d9c81615024565b5f6040828403128015615648575f5ffd5b506156516150b4565b825161565c81614b0f565b8152602083015161566c81614ab7565b60208201529392505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f6156e460a0830184614e50565b979650505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361571f5761571f61544c565b5060010190565b5f60408284031215615736575f5ffd5b61573e6150b4565b9050813561574b81614e26565b8152602082013561575b81614e26565b602082015292915050565b5f6101808236031215615777575f5ffd5b61577f61508a565b823581526157903660208501615726565b6020820152606083013560408201526157ab60808401614b30565b60608201526157bc60a08401614b30565b608082015260c083013567ffffffffffffffff8111156157da575f5ffd5b6157e6368286016153c0565b60a0830152506157f860e08401614b30565b60c08201526101008381013560e0830152610120840135908201526158206101408401614b30565b6101208201526158336101608401614ae4565b61014082015292915050565b601f821115610bea57805f5260205f20601f840160051c810160208510156158645750805b601f840160051c820191505b8181101561285d575f8155600101615870565b815167ffffffffffffffff81111561589d5761589d61505d565b6158b1816158ab845461554d565b8461583f565b6020601f821160018114615902575f83156158cc5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b17845561285d565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561594f578785015182556020948501946001909201910161592f565b508482101561598b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80356159a581614e26565b61ffff16825260208101356159b981614e26565b61ffff81166020840152505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159fb575f5ffd5b830160208101925035905067ffffffffffffffff811115615a1a575f5ffd5b803603821315615a28575f5ffd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408082528335908201525f615a92606083016020860161599a565b606084013560a0830152615aa860808501614b30565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152615acf60a08501614b30565b73ffffffffffffffffffffffffffffffffffffffff1660e0830152615af760c08501856159c8565b610180610100850152615b0f6101c085018284615a2f565b915050615b1e60e08601614b30565b73ffffffffffffffffffffffffffffffffffffffff81166101208501525061010085013561014084810191909152610120860135610160850152615b63908601614b30565b73ffffffffffffffffffffffffffffffffffffffff16610180840152615b8c6101608601614ae4565b7fffffffff00000000000000000000000000000000000000000000000000000000166101a08401528281036020840152615237818561520a565b61ffff81811683821601908111156109ca576109ca61544c565b5f82518060208501845e5f920191825250919050565b602081525f610d9c6020830184614e50565b73ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff6020820151166020830152604081015160408301525f60608201516101006060850152615c68610100850182614e50565b90506080830151615c91608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a0830151615ca460a0860182614cc4565b5060c083015160c085015260e083015160e08501528091505092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f615cf16060830185615c08565b8281036040840152615d03818561520a565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6132c26040830184615c08565b838152826020820152606060408201525f615237606083018461520a565b604081016109ca828461599a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea26469706673582212200f787fe5d4af9f528c0f529a3ef5eafd75f5d73d155af4d7f282e811d5e125ee64736f6c634300081e0033","sourceMap":"1318:25577:88:-:0;;;2523:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;446:46:85;;;;;2682:6:88;;1273:26:15;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:15;;1350:1;1322:31;;;975:51:165;948:18;;1322:31:15;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;544:6:106::2;2708:25:88;::::0;::::2;;2704:58;;;2742:20;;-1:-1:-1::0;;;2742:20:88::2;;;;;;;;;;;2704:58;544:6:106;2776:27:88;::::0;::::2;;2772:60;;;2812:20;;-1:-1:-1::0;;;2812:20:88::2;;;;;;;;;;;2772:60;2842:14;:32:::0;;::::2;2884:36:::0;;::::2;::::0;::::2;-1:-1:-1::0;;2884:36:88;;;2842:32;;::::2;2884:36:::0;::::2;::::0;;2947:48:::2;::::0;;;;;;;2842:14:::2;2947:48:::0;;::::2;::::0;;;;;;;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;;;2930:65;;:14:::2;::::0;;;:65:::2;::::0;:14;:65:::2;:::i;:::-;-1:-1:-1::0;2930:65:88::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;;;;;2523:479:::0;;;;1318:25577;;2912:187:15;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:15;;;-1:-1:-1;;;;;;3020:17:15;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:177:165:-;93:13;;-1:-1:-1;;;;;135:31:165;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:163::-;274:13;;327:6;316:18;;306:29;;296:57;;349:1;346;339:12;364:460;459:6;467;475;483;536:3;524:9;515:7;511:23;507:33;504:53;;;553:1;550;543:12;504:53;576:40;606:9;576:40;:::i;:::-;566:50;;635:49;680:2;669:9;665:18;635:49;:::i;:::-;625:59;;703:48;747:2;736:9;732:18;703:48;:::i;:::-;693:58;;770:48;814:2;803:9;799:18;770:48;:::i;:::-;760:58;;364:460;;;;;;;:::o;1037:127::-;1098:10;1093:3;1089:20;1086:1;1079:31;1129:4;1126:1;1119:15;1153:4;1150:1;1143:15;1169:380;1248:1;1244:12;;;;1291;;;1312:61;;1366:4;1358:6;1354:17;1344:27;;1312:61;1419:2;1411:6;1408:14;1388:18;1385:38;1382:161;;1465:10;1460:3;1456:20;1453:1;1446:31;1500:4;1497:1;1490:15;1528:4;1525:1;1518:15;1382:161;;1169:380;;;:::o;1680:518::-;1782:2;1777:3;1774:11;1771:421;;;1818:5;1815:1;1808:16;1862:4;1859:1;1849:18;1932:2;1920:10;1916:19;1913:1;1909:27;1903:4;1899:38;1968:4;1956:10;1953:20;1950:47;;;-1:-1:-1;1991:4:165;1950:47;2046:2;2041:3;2037:12;2034:1;2030:20;2024:4;2020:31;2010:41;;2101:81;2119:2;2112:5;2109:13;2101:81;;;2178:1;2164:16;;2145:1;2134:13;2101:81;;;2105:3;;1771:421;1680:518;;;:::o;2374:1299::-;2494:10;;-1:-1:-1;;;;;2516:30:165;;2513:56;;;2549:18;;:::i;:::-;2578:97;2668:6;2628:38;2660:4;2654:11;2628:38;:::i;:::-;2622:4;2578:97;:::i;:::-;2724:4;2755:2;2744:14;;2772:1;2767:649;;;;3460:1;3477:6;3474:89;;;-1:-1:-1;3529:19:165;;;3523:26;3474:89;-1:-1:-1;;2331:1:165;2327:11;;;2323:24;2319:29;2309:40;2355:1;2351:11;;;2306:57;3576:81;;2737:930;;2767:649;1627:1;1620:14;;;1664:4;1651:18;;-1:-1:-1;;2803:20:165;;;2921:222;2935:7;2932:1;2929:14;2921:222;;;3017:19;;;3011:26;2996:42;;3124:4;3109:20;;;;3077:1;3065:14;;;;2951:12;2921:222;;;2925:3;3171:6;3162:7;3159:19;3156:201;;;3232:19;;;3226:26;-1:-1:-1;;3315:1:165;3311:14;;;3327:3;3307:24;3303:37;3299:42;3284:58;3269:74;;3156:201;-1:-1:-1;;;;3403:1:165;3387:14;;;3383:22;3370:36;;-1:-1:-1;2374:1299:165:o;:::-;1318:25577:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{"src/libraries/CompoundInterestLib.sol":{"CompoundInterestLib":[{"start":5304,"length":20},{"start":19069,"length":20}]}}},"deployedBytecode":{"object":"0x6080604052600436106102cc575f3560e01c8063715018a61161017b578063af236af4116100d1578063e4467f3511610087578063f2fde38b11610062578063f2fde38b146108ad578063f851a44014610675578063fce5f608146108cc575f5ffd5b8063e4467f3514610850578063e985e9c51461086f578063ea7d616b1461088e575f5ffd5b8063b9108c03116100b7578063b9108c03146107f2578063d4251f9e14610805578063db4e089914610824575f5ffd5b8063af236af4146107bf578063b88d4fde146107d3575f5ffd5b806396daa32211610131578063a5cc6a7f1161010c578063a5cc6a7f14610709578063a64d6beb14610737578063adfbe22f146107ac575f5ffd5b806396daa3221461069e578063a15c24f3146106cb578063a22cb465146106ea575f5ffd5b80638804614611610161578063880461461461063757806389306e61146106565780638da5cb5b14610675575f5ffd5b8063715018a6146106045780638245999514610618575f5ffd5b806339737e071161023057806352331cf8116101e6578063631f1a3c116101c1578063631f1a3c1461059a5780636352211e146105c657806370a08231146105e5575f5ffd5b806352331cf81461053d5780636208d89c1461055c578063623fb7ce1461057b575f5ffd5b80634be18e94116102165780634be18e94146104d3578063504006ca146104f2578063520eb0761461051e575f5ffd5b806339737e071461048957806342842e0e146104b4575f5ffd5b80631bc7cd3d116102855780632b538af51161026b5780632b538af5146104185780632d1982ff1461044b578063307a80881461046a575f5ffd5b80631bc7cd3d146103c557806323b872dd146103f9575f5ffd5b8063081812fc116102b5578063081812fc1461033d578063095ea7b314610381578063150a6422146103a2575f5ffd5b806301ffc9a7146102d057806304dbf91314610304575b5f5ffd5b3480156102db575f5ffd5b506102ef6102ea366004614af4565b6108ec565b60405190151581526020015b60405180910390f35b34801561030f575f5ffd5b506102ef61031e366004614b3b565b600660209081525f928352604080842090915290825290205460ff1681565b348015610348575f5ffd5b5061035c610357366004614b72565b6109d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fb565b34801561038c575f5ffd5b506103a061039b366004614b89565b610a80565b005b3480156103ad575f5ffd5b506103b760015481565b6040519081526020016102fb565b3480156103d0575f5ffd5b506103e46103df366004614b72565b610bef565b604080519283526020830191909152016102fb565b348015610404575f5ffd5b506103a0610413366004614bb3565b610c10565b348015610423575f5ffd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610456575f5ffd5b506103b7610465366004614c08565b610d89565b348015610475575f5ffd5b506103a0610484366004614b3b565b610da3565b348015610494575f5ffd5b506103b76104a3366004614c68565b60046020525f908152604090205481565b3480156104bf575f5ffd5b506103a06104ce366004614bb3565b610e99565b3480156104de575f5ffd5b5061035c6104ed366004614b72565b610eb3565b3480156104fd575f5ffd5b5061051161050c366004614b72565b610ee8565b6040516102fb9190614cd4565b348015610529575f5ffd5b506103a0610538366004614b3b565b611242565b348015610548575f5ffd5b506103a0610557366004614e35565b6112ed565b348015610567575f5ffd5b506103a0610576366004614b72565b6113b4565b348015610586575f5ffd5b506103a0610595366004614b72565b6117aa565b3480156105a5575f5ffd5b506105b96105b4366004614b72565b611910565b6040516102fb9190614e9c565b3480156105d1575f5ffd5b5061035c6105e0366004614b72565b611b17565b3480156105f0575f5ffd5b506103b76105ff366004614c68565b611b8c565b34801561060f575f5ffd5b506103a0611c3e565b348015610623575f5ffd5b506103a0610632366004614c68565b611c51565b348015610642575f5ffd5b506103a0610651366004614b72565b611e82565b348015610661575f5ffd5b506103a0610670366004614fd2565b611fbb565b348015610680575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661035c565b3480156106a9575f5ffd5b506002546106b89061ffff1681565b60405161ffff90911681526020016102fb565b3480156106d6575f5ffd5b506103b76106e5366004614ff2565b6123ce565b3480156106f5575f5ffd5b506103a0610704366004615031565b612504565b348015610714575f5ffd5b506102ef610723366004614c68565b60056020525f908152604090205460ff1681565b348015610742575f5ffd5b506102ef610751366004614b3b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205460ff1692915050565b6103b76107ba366004614b72565b612592565b3480156107ca575f5ffd5b506103a061259e565b3480156107de575f5ffd5b506103a06107ed36600461516c565b6126f5565b6103b76108003660046151e7565b612864565b348015610810575f5ffd5b506103a061081f366004614c68565b612870565b34801561082f575f5ffd5b5061084361083e366004614b72565b61298f565b6040516102fb9190615240565b34801561085b575f5ffd5b506103a061086a366004614e35565b612b1b565b34801561087a575f5ffd5b506102ef610889366004615252565b612bd0565b348015610899575f5ffd5b506103a06108a836600461527e565b612c8a565b3480156108b8575f5ffd5b506103a06108c7366004614c68565b612df3565b3480156108d7575f5ffd5b506002546106b89062010000900461ffff1681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fb51e2f0400000000000000000000000000000000000000000000000000000000148061097e57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109ca57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f081812fc000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063081812fc906024015b602060405180830381865afa158015610a5c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ca91906152c8565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3091906152ff565b9050610b40816101000151612e58565b6040517f52ec852900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906352ec8529906064015f604051808303815f87803b158015610bd3575f5ffd5b505af1158015610be5573d5f5f3e3d5ffd5b505050505b505050565b5f5f5f610bfb84610ee8565b9050610c0681612ea9565b9250925050915091565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610c9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc091906152ff565b9050610cd0816101000151612e58565b6040517faf9fe4de00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063af9fe4de906084015b5f604051808303815f87803b158015610d6c575f5ffd5b505af1158015610d7e573d5f5f3e3d5ffd5b505050505b50505050565b5f610d9c83610d97846153de565b612ecd565b9392505050565b610dab6131d0565b73ffffffffffffffffffffffffffffffffffffffff82161580610dee57507fffffffff000000000000000000000000000000000000000000000000000000008116155b610e955773ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519092917f177c467a5dec0610cb3afa435a1f7efa9cd39bf81ff2273f06ae7668a00e310b91a35b5050565b610bea83838360405180602001604052805f8152506126f5565b60038181548110610ec2575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610ef06148c6565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018390525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa091906152ff565b9050610fb0816101000151612e58565b5f8381526008602090815260408083208151608080820184528254825283518085018552600184015461ffff8082168352620100009091048116828801528387019190915284519182018552600284015482526003840154958201959095526004830154909416848401526005820154606080860191909152928101939093526006015460ff1615159082015290826101200151600581111561105557611055614c83565b148061107757506001826101200151600581111561107557611075614c83565b145b8061109857506005826101200151600581111561109657611096614c83565b145b1561113c5773__$4bbbaa6d90f42a60403c514cce5191a63a$__63ff7f44438360200151845f01516110ca9190615479565b835f0151846020015185604001516040518563ffffffff1660e01b81526004016110f7949392919061548c565b608060405180830381865af4158015611112573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113691906154e1565b60408201525b604051806101800160405280835f0151815260200183602001518152602001836101200151600581111561117257611172614c83565b8152602001836101400151600281111561118e5761118e614c83565b81526020018360a0015173ffffffffffffffffffffffffffffffffffffffff1681526020018360c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018360e0015173ffffffffffffffffffffffffffffffffffffffff16815260200183610100015173ffffffffffffffffffffffffffffffffffffffff16815260200183604001518152602001825f0151815260200182602001518152602001826040015181525092505050919050565b61124a6131d0565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519092917f36112db5f88f36037ce600104320a87f5636f34183686bbc76a66ec5588fccc991a35050565b6112f56131d0565b61271061ffff82161115611335576040517fba97f83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805461ffff838116620100008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff85161790945560408051949093049091168084526020840191909152917f94d513c10ff5e8f0454d36f41da1d81583ca73420fcfff120599b4b73cdf1e6d91015b60405180910390a15050565b5f81815260076020908152604080832081516101a08101835281548184019081528351808501909452600183015461ffff8082168652620100009091041694840194909452606081019290925260028101546080830152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a084015260048201541660c083015260058101805492939192849291849160e0850191906114569061554d565b80601f01602080910402602001604051908101604052809291908181526020018280546114829061554d565b80156114cd5780601f106114a4576101008083540402835291602001916114cd565b820191905f5260205f20905b8154815290600101906020018083116114b057829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff908116602080840191909152600784015460408401526008840154606080850191909152600990940154808316608085015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090930192909252928452600a949094015460ff1615159290930191909152825190910151919250166115be576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516060015173ffffffffffffffffffffffffffffffffffffffff163314801590611604575080516080015173ffffffffffffffffffffffffffffffffffffffff163314155b1561163b576040517f5d6db4c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055600281018290556003810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560048201805490911690559081816116c460058301826149cf565b506006810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555f6007820181905560088201819055600991820180547fffffffffffffffff000000000000000000000000000000000000000000000000169055600a9390930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905584835260205250604081209061176b82826149cf565b611778600183015f6149cf565b5050604051339083907f5c6eae33ff1cd222fb8964d3a9cb61f3c59d868bb587b0ad1f131fb6d99328ad905f90a35050565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015611836573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a91906152ff565b905061186a816101000151612e58565b6040517f3081ed8a000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633081ed8a906044015b5f604051808303815f87803b1580156118f6575f5ffd5b505af1158015611908573d5f5f3e3d5ffd5b505050505050565b611918614a06565b6001548210611953576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602090815260409182902082516101a08101845281548185019081528451808601909552600183015461ffff8082168752620100009091041693850193909352606081019390935260028101546080840152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a085015260048201541660c0840152600581018054919284929091849160e0850191906119f59061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a219061554d565b8015611a6c5780601f10611a4357610100808354040283529160200191611a6c565b820191905f5260205f20905b815481529060010190602001808311611a4f57829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526007840154604084015260088401546060840152600990930154908116608083015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090910152908252600a929092015460ff16151591015292915050565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401610a41565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ca9190615598565b611c466131d0565b611c4f5f613222565b565b611c596131d0565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526005602052604090205460ff1615611e3f5773ffffffffffffffffffffffffffffffffffffffff81165f90815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015611e3d578173ffffffffffffffffffffffffffffffffffffffff1660038281548110611d0557611d056155af565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603611e355760038054611d3b90600190615479565b81548110611d4b57611d4b6155af565b5f918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611d8357611d836155af565b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003805480611dd957611dd96155dc565b5f8281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611e3d565b600101611cd1565b505b60405173ffffffffffffffffffffffffffffffffffffffff8216907fceeec53cbb10af8d416c74d15b37f2c8761d65af488132f6de71b01176ad2334905f90a250565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015611f0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3291906152ff565b9050611f42816101000151612e58565b6040517f2a982aeb000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632a982aeb906044016118df565b5f611fc583610ee8565b90505f5f611fd283612ea9565b915091505f611fe18583613296565b90505f611ff7611ff18388615479565b85613296565b90506040518060800160405280838761016001515f01516120189190615479565b81526020018661016001516020015181526020018661016001516040015161ffff16815260200183876101600151606001516120549190615609565b90525f8881526008602090815260409182902083516002820155908301516003820155908201516004820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff9092169190911790556060909101516005909101556120c58183615609565b5f888152600860205260408120600601549197509060ff16806120e6575082155b61210b57612106838761014001515f0151886101600151604001516132a5565b61210d565b5f5b90505f61211a8285615479565b90505f6121278483615609565b90505f84156121ec576040517e8c1075000000000000000000000000000000000000000000000000000000008152336004820152602481018c9052604481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690628c1075906064016020604051808303815f875af11580156121c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e9919061561c565b90505b89156122965783156122365760c089015173ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604081208054869290612230908490615609565b90915550505b60c089015161225d9073ffffffffffffffffffffffffffffffffffffffff1633308d6132ca565b8115612296576122968960a00151838b60c0015173ffffffffffffffffffffffffffffffffffffffff166133859092919063ffffffff16565b60408051878152602081018790529081018590528b907f06283ce23ea8ff00b2f5df7b85dc1a077d69a207b3b48ecdaf73bf2189dd2e0f9060600160405180910390a280156123c1576040517fd6700bef000000000000000000000000000000000000000000000000000000008152600481018c90525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d6700bef906024016040805180830381865afa158015612369573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238d9190615637565b805190915073ffffffffffffffffffffffffffffffffffffffff16156123bf576123bf815f015182602001518e61343a565b505b5050505050505050505050565b5f6109ca82600a6040518060400160405290815f820180546123ef9061554d565b80601f016020809104026020016040519081016040528092919081815260200182805461241b9061554d565b80156124665780601f1061243d57610100808354040283529160200191612466565b820191905f5260205f20905b81548152906001019060200180831161244957829003601f168201915b5050505050815260200160018201805461247f9061554d565b80601f01602080910402602001604051908101604052809291908181526020018280546124ab9061554d565b80156124f65780601f106124cd576101008083540402835291602001916124f6565b820191905f5260205f20905b8154815290600101906020018083116124d957829003601f168201915b505050505081525050612ecd565b6040517fa22cb46500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301527f0000000000000000000000000000000000000000000000000000000000000000169063a22cb465906044015f604051808303815f87803b1580156118f6575f5ffd5b5f6109ca33835f613551565b6125a66131d0565b5f5b6003548110156126f2575f600382815481106125c6576125c66155af565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600490915260409091205490915080156126e85773ffffffffffffffffffffffffffffffffffffffff82165f908152600460205260408120556126646126465f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff84169083613385565b8173ffffffffffffffffffffffffffffffffffffffff166126995f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167eed5939179dc194223f0edd1517ecee2210b22da7f82c8e4b1795e93b9f06aa836040516126df91815260200190565b60405180910390a35b50506001016125a8565b50565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018390525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015612781573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a591906152ff565b90506127b5816101000151612e58565b6040517ffcf391e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fcf391e09061282f9033908990899089908990600401615678565b5f604051808303815f87803b158015612846575f5ffd5b505af1158015612858573d5f5f3e3d5ffd5b505050505b5050505050565b5f610d9c338484613551565b6128786131d0565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526005602052604090205460ff1661294c5773ffffffffffffffffffffffffffffffffffffffff81165f81815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60405173ffffffffffffffffffffffffffffffffffffffff8216907f8ac7e85f445e8ee1c850abbfcd9da63ccb7b527c076290946108a7c280247096905f90a250565b604080518082019091526060808252602082015260015482106129de576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260096020526040908190208151808301909252805482908290612a049061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a309061554d565b8015612a7b5780601f10612a5257610100808354040283529160200191612a7b565b820191905f5260205f20905b815481529060010190602001808311612a5e57829003601f168201915b50505050508152602001600182018054612a949061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac09061554d565b8015612b0b5780601f10612ae257610100808354040283529160200191612b0b565b820191905f5260205f20905b815481529060010190602001808311612aee57829003601f168201915b5050505050815250509050919050565b612b236131d0565b61271061ffff82161115612b63576040517fba97f83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805461ffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000083168117909355604080519190921680825260208201939093527f26bc4a9b6ef30ec448ec7094c0f1002b0c6b8363d6a56be88ce399f1ac3d92f991016113a8565b6040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063e985e9c590604401602060405180830381865afa158015612c66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c919061561c565b6040517f5aef2447000000000000000000000000000000000000000000000000000000008152600481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635aef24479060240161016060405180830381865afa158015612d16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d3a91906152ff565b9050612d4a816101000151612e58565b6040517fe9c1d0c00000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff84811660448301527fffffffff00000000000000000000000000000000000000000000000000000000841660648301527f0000000000000000000000000000000000000000000000000000000000000000169063e9c1d0c090608401610d55565b612dfb6131d0565b73ffffffffffffffffffffffffffffffffffffffff8116612e4f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6126f281613222565b73ffffffffffffffffffffffffffffffffffffffff811630146126f2576040517f66719b7a000000000000000000000000000000000000000000000000000000008152336004820152602401612e46565b5f5f8260200151835f0151612ebe9190615479565b61016090930151519293915050565b5f80612edf60a0850160808601614c68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050612f1984826143a8565b600180545f9182612f29836156ef565b919050559050604051806040016040528086612f4490615766565b81528315156020918201525f83815260078252604090819020835180518255808401518051600184018054929096015161ffff90811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931691161717909355908201516002820155606082015160038201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155608084015160048401805491909316911617905560a08201519091908290600582019061302b9082615883565b5060c082015160068201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e08084015160078401556101008401516008840155610120840151600990930180546101409095015190911c74010000000000000000000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909416929091169190911791909117905560209190910151600a90910180549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905583515115158061313b57505f846020015151115b15613177575f8181526009602052604090208451859190819061315e9082615883565b50602082015160018201906131739082615883565b5050505b3373ffffffffffffffffffffffffffffffffffffffff16817fa94a87c6a478ee9e74c583560db13c9b623c84cf97e82551f872fcd1a4800ffc87876040516131c0929190615a76565b60405180910390a3949350505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611c4f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401612e46565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828218828410028218610d9c565b5f6132c28461ffff84166132b98587615bc6565b61ffff166146b7565b949350505050565b5f6040517f23b872dd00000000000000000000000000000000000000000000000000000000815284600482015283602482015282604482015260205f6064835f8a5af13d15601f3d1160015f51141617169150508061285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401612e46565b5f6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815283600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401612e46565b5f828260405160240161344f91815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f5f8573ffffffffffffffffffffffffffffffffffffffff16836040516134d59190615be0565b5f604051808303815f865af19150503d805f811461350e576040519150601f19603f3d011682016040523d82523d5f602084013e613513565b606091505b50915091508161190857806040517f30b9b6dd000000000000000000000000000000000000000000000000000000008152600401612e469190615bf6565b5f82815260076020908152604080832081516101a08101835281548184019081528351808501909452600183015461ffff8082168652620100009091041694840194909452606081019290925260028101546080830152600381015473ffffffffffffffffffffffffffffffffffffffff90811660a084015260048201541660c0830152600581018054859484929091849160e08501916135f19061554d565b80601f016020809104026020016040519081016040528092919081815260200182805461361d9061554d565b80156136685780601f1061363f57610100808354040283529160200191613668565b820191905f5260205f20905b81548152906001019060200180831161364b57829003601f168201915b5050509183525050600682015473ffffffffffffffffffffffffffffffffffffffff908116602080840191909152600784015460408401526008840154606080850191909152600990940154808316608085015274010000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a090930192909252928452600a949094015460ff161515929093019190915282519091015191925016613759576040517f1d044d6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301a2cae86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e791906152c8565b8251608001516040517fbabcc53900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063babcc53990602401602060405180830381865afa158015613857573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061387b919061561c565b806139a257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301a2cae86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390e91906152c8565b8251606001516040517fbabcc53900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063babcc53990602401602060405180830381865afa15801561397e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a2919061561c565b90505f81613a3c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638204c6276040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a379190615598565b613a3e565b5f5b9050803414613a79576040517fcd3cb2bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251610100015115801590613a9357508251610100015142115b15613aca576040517f076802fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015115613b305782516080015173ffffffffffffffffffffffffffffffffffffffff888116911614613b2b576040517f2e15fb7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613bd5565b82516060015173ffffffffffffffffffffffffffffffffffffffff888116911614613b87576040517fe16e54be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851615613bd5576040517f2e15fb7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff8616613bfc57835160800151613bfe565b855b90505f60095f8981526020019081526020015f206040518060400160405290815f82018054613c2c9061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054613c589061554d565b8015613ca35780601f10613c7a57610100808354040283529160200191613ca3565b820191905f5260205f20905b815481529060010190602001808311613c8657829003601f168201915b50505050508152602001600182018054613cbc9061554d565b80601f0160208091040260200160405190810160405280929190818152602001828054613ce89061554d565b8015613d335780601f10613d0a57610100808354040283529160200191613d33565b820191905f5260205f20905b815481529060010190602001808311613d1657829003601f168201915b505050919092525050505f8981526007602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055600281018290556003810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560048201805490911690559192508181613dc860058301826149cf565b506006810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555f6007820181905560088201819055600991820180547fffffffffffffffff000000000000000000000000000000000000000000000000169055600a9390930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558a8352602052506040812090613e6f82826149cf565b613e7c600183015f6149cf565b50505f604051806101000160405280875f01516060015173ffffffffffffffffffffffffffffffffffffffff168152602001875f01516080015173ffffffffffffffffffffffffffffffffffffffff168152602001875f0151604001518152602001875f015160a001518152602001875f015160c0015173ffffffffffffffffffffffffffffffffffffffff168152602001600280811115613f2057613f20614c83565b8152875151602090910190613f359042615609565b8152875160e001516020909101528251519091505f90151580613f5c57505f836020015151115b15614023578651608001516040517e4b382900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691624b3829918891613fdb9187908990600401615cc3565b60206040518083038185885af1158015613ff7573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061401c9190615598565b90506140e1565b8651608001516040517f1461f12600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691631461f12691889161409d918790600401615d0d565b60206040518083038185885af11580156140b9573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140de9190615598565b90505b6040518060800160405280428152602001885f015160200151815260200160405180608001604052805f81526020015f8152602001896141275760025461ffff16614129565b5f5b61ffff90811682525f60209283018190529284528a15159382019390935284825260088152604080832085518155858301518051600183018054928601519188167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009093169290921762010000918816820217909155868301518051600280850191909155948101516003840155808401516004840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016918916919091179055606090810151600584015590960151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558b5101519054919361424593919204166127106146b7565b90505f81895f01516040015161425b9190615479565b905081156142a257885160c0015173ffffffffffffffffffffffffffffffffffffffff165f908152600460205260408120805484929061429c908490615609565b90915550505b88516060810151604082015160c0909201516142d99273ffffffffffffffffffffffffffffffffffffffff909116919030906132ca565b801561430657885160c001516143069073ffffffffffffffffffffffffffffffffffffffff168783613385565b8851610120015173ffffffffffffffffffffffffffffffffffffffff16156143435788516101208101516101409091015161434391908e86614767565b8573ffffffffffffffffffffffffffffffffffffffff16838d7f2a82588a72d442d0ca15bc61c1abab1812c42c9eab1d127cb645dd934fa9136e8a868a60405161438f93929190615d3b565b60405180910390a450909b9a5050505050505050505050565b801580156143f157506143c160c0830160a08401614c68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15614428576040517f5d6db4c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81355f03614462576040517fd88194e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f614474610100840160e08501614c68565b73ffffffffffffffffffffffffffffffffffffffff16036144c1576040517fb10b947e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b64ffffffffff6101008301351115614505576040517fd7c43e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82610120013511801561451d575081610120013542115b15614554576040517f076802fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61456761016084016101408501614c68565b73ffffffffffffffffffffffffffffffffffffffff161461463c5760065f61459761016085016101408601614c68565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f908120906145d161018085016101608601614af4565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040015f205460ff1661463c576040517f8e792a0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9d6c6ae700000000000000000000000000000000000000000000000000000000815273__$4bbbaa6d90f42a60403c514cce5191a63a$__90639d6c6ae79061468f906020860190600401615d59565b5f6040518083038186803b1580156146a5575f5ffd5b505af4158015611908573d5f5f3e3d5ffd5b5f5f5f6146c4868661487a565b91509150815f036146e8578381816146de576146de615d67565b0492505050610d9c565b8184116146ff576146ff60038515026011186148b5565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b6040805160248101849052604480820184905282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000871617905290515f90819073ffffffffffffffffffffffffffffffffffffffff8816906147fe908590615be0565b5f604051808303815f865af19150503d805f8114614837576040519150601f19603f3d011682016040523d82523d5f602084013e61483c565b606091505b509150915081610be557806040517f30b9b6dd000000000000000000000000000000000000000000000000000000008152600401612e469190615bf6565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f60058111156148f0576148f0614c83565b81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f815260200161499a60405180604001604052805f61ffff1681526020015f61ffff1681525090565b81526020016149ca60405180608001604052805f81526020015f81526020015f61ffff1681526020015f81525090565b905290565b5080546149db9061554d565b5f825580601f106149ea575050565b601f0160209004905f5260205f20908101906126f29190614a25565b6040518060400160405280614a19614a3d565b81525f60209091015290565b5b80821115614a39575f8155600101614a26565b5090565b6040518061016001604052805f8152602001614a7260405180604001604052805f61ffff1681526020015f61ffff1681525090565b81525f60208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e0820181905261010082018190526101209091015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146126f2575f5ffd5b8035614aef81614ab7565b919050565b5f60208284031215614b04575f5ffd5b8135610d9c81614ab7565b73ffffffffffffffffffffffffffffffffffffffff811681146126f2575f5ffd5b8035614aef81614b0f565b5f5f60408385031215614b4c575f5ffd5b8235614b5781614b0f565b91506020830135614b6781614ab7565b809150509250929050565b5f60208284031215614b82575f5ffd5b5035919050565b5f5f60408385031215614b9a575f5ffd5b8235614ba581614b0f565b946020939093013593505050565b5f5f5f60608486031215614bc5575f5ffd5b8335614bd081614b0f565b92506020840135614be081614b0f565b929592945050506040919091013590565b5f6101808284031215614c02575f5ffd5b50919050565b5f5f60408385031215614c19575f5ffd5b823567ffffffffffffffff811115614c2f575f5ffd5b614c3b85828601614bf1565b925050602083013567ffffffffffffffff811115614c57575f5ffd5b830160408186031215614b67575f5ffd5b5f60208284031215614c78575f5ffd5b8135610d9c81614b0f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60068110614cc057614cc0614c83565b9052565b60038110614cc057614cc0614c83565b5f6102008201905082518252602083015160208301526040830151614cfc6040840182614cb0565b506060830151614d0f6060840182614cc4565b506080830151614d37608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a0830151614d5f60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c0830151614d8760c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151614daf60e084018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100830151610100830152610120830151610120830152610140830151614ded610140840182805161ffff908116835260209182015116910152565b506101609290920151805161018083015260208101516101a0830152604081015161ffff166101c0830152606001516101e09091015290565b61ffff811681146126f2575f5ffd5b5f60208284031215614e45575f5ffd5b8135610d9c81614e26565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f825160406020840152805160608401526020810151614ed46080850182805161ffff908116835260209182015116910152565b50604081015160c0840152606081015173ffffffffffffffffffffffffffffffffffffffff90811660e085015260808201511661010084015260a0810151610180610120850152614f296101e0850182614e50565b905060c0820151614f5361014086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e082015161016085015261010082015161018085015261012082015173ffffffffffffffffffffffffffffffffffffffff166101a0850152610140909101517fffffffff00000000000000000000000000000000000000000000000000000000166101c08401526020840151801515604085015290949350505050565b5f5f60408385031215614fe3575f5ffd5b50508035926020909101359150565b5f60208284031215615002575f5ffd5b813567ffffffffffffffff811115615018575f5ffd5b6132c284828501614bf1565b80151581146126f2575f5ffd5b5f5f60408385031215615042575f5ffd5b823561504d81614b0f565b91506020830135614b6781615024565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610160810167ffffffffffffffff811182821017156150ae576150ae61505d565b60405290565b6040805190810167ffffffffffffffff811182821017156150ae576150ae61505d565b5f5f67ffffffffffffffff8411156150f1576150f161505d565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561513e5761513e61505d565b604052838152905080828401851015615155575f5ffd5b838360208301375f60208583010152509392505050565b5f5f5f5f6080858703121561517f575f5ffd5b843561518a81614b0f565b9350602085013561519a81614b0f565b925060408501359150606085013567ffffffffffffffff8111156151bc575f5ffd5b8501601f810187136151cc575f5ffd5b6151db878235602084016150d7565b91505092959194509250565b5f5f604083850312156151f8575f5ffd5b823591506020830135614b6781614b0f565b5f81516040845261521e6040850182614e50565b9050602083015184820360208601526152378282614e50565b95945050505050565b602081525f610d9c602083018461520a565b5f5f60408385031215615263575f5ffd5b823561526e81614b0f565b91506020830135614b6781614b0f565b5f5f5f60608486031215615290575f5ffd5b8335925060208401356152a281614b0f565b915060408401356152b281614ab7565b809150509250925092565b8051614aef81614b0f565b5f602082840312156152d8575f5ffd5b8151610d9c81614b0f565b805160068110614aef575f5ffd5b805160038110614aef575f5ffd5b5f610160828403128015615311575f5ffd5b5061531a61508a565b82518152602080840151908201526040808401519082015260608084015190820152615348608084016152bd565b608082015261535960a084016152bd565b60a082015261536a60c084016152bd565b60c082015261537b60e084016152bd565b60e082015261538d61010084016152bd565b6101008201526153a061012084016152e3565b6101208201526153b361014084016152f1565b6101408201529392505050565b5f82601f8301126153cf575f5ffd5b610d9c838335602085016150d7565b5f604082360312156153ee575f5ffd5b6153f66150b4565b823567ffffffffffffffff81111561540c575f5ffd5b615418368286016153c0565b825250602083013567ffffffffffffffff811115615434575f5ffd5b615440368286016153c0565b60208301525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156109ca576109ca61544c565b8481526020808201859052835161ffff908116604084015290840151166060820152610100810182516080830152602083015160a0830152604083015161ffff1660c0830152606083015160e0830152615237565b5f60808284031280156154f2575f5ffd5b506040516080810167ffffffffffffffff811182821017156155165761551661505d565b6040908152835182526020808501519083015283015161553581614e26565b60408201526060928301519281019290925250919050565b600181811c9082168061556157607f821691505b602082108103614c02577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f602082840312156155a8575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b808201808211156109ca576109ca61544c565b5f6020828403121561562c575f5ffd5b8151610d9c81615024565b5f6040828403128015615648575f5ffd5b506156516150b4565b825161565c81614b0f565b8152602083015161566c81614ab7565b60208201529392505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f6156e460a0830184614e50565b979650505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361571f5761571f61544c565b5060010190565b5f60408284031215615736575f5ffd5b61573e6150b4565b9050813561574b81614e26565b8152602082013561575b81614e26565b602082015292915050565b5f6101808236031215615777575f5ffd5b61577f61508a565b823581526157903660208501615726565b6020820152606083013560408201526157ab60808401614b30565b60608201526157bc60a08401614b30565b608082015260c083013567ffffffffffffffff8111156157da575f5ffd5b6157e6368286016153c0565b60a0830152506157f860e08401614b30565b60c08201526101008381013560e0830152610120840135908201526158206101408401614b30565b6101208201526158336101608401614ae4565b61014082015292915050565b601f821115610bea57805f5260205f20601f840160051c810160208510156158645750805b601f840160051c820191505b8181101561285d575f8155600101615870565b815167ffffffffffffffff81111561589d5761589d61505d565b6158b1816158ab845461554d565b8461583f565b6020601f821160018114615902575f83156158cc5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b17845561285d565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561594f578785015182556020948501946001909201910161592f565b508482101561598b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80356159a581614e26565b61ffff16825260208101356159b981614e26565b61ffff81166020840152505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159fb575f5ffd5b830160208101925035905067ffffffffffffffff811115615a1a575f5ffd5b803603821315615a28575f5ffd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408082528335908201525f615a92606083016020860161599a565b606084013560a0830152615aa860808501614b30565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152615acf60a08501614b30565b73ffffffffffffffffffffffffffffffffffffffff1660e0830152615af760c08501856159c8565b610180610100850152615b0f6101c085018284615a2f565b915050615b1e60e08601614b30565b73ffffffffffffffffffffffffffffffffffffffff81166101208501525061010085013561014084810191909152610120860135610160850152615b63908601614b30565b73ffffffffffffffffffffffffffffffffffffffff16610180840152615b8c6101608601614ae4565b7fffffffff00000000000000000000000000000000000000000000000000000000166101a08401528281036020840152615237818561520a565b61ffff81811683821601908111156109ca576109ca61544c565b5f82518060208501845e5f920191825250919050565b602081525f610d9c6020830184614e50565b73ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff6020820151166020830152604081015160408301525f60608201516101006060850152615c68610100850182614e50565b90506080830151615c91608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a0830151615ca460a0860182614cc4565b5060c083015160c085015260e083015160e08501528091505092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f615cf16060830185615c08565b8281036040840152615d03818561520a565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6132c26040830184615c08565b838152826020820152606060408201525f615237606083018461520a565b604081016109ca828461599a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea26469706673582212200f787fe5d4af9f528c0f529a3ef5eafd75f5d73d155af4d7f282e811d5e125ee64736f6c634300081e0033","sourceMap":"1318:25577:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26618:275;;;;;;;;;;-1:-1:-1;26618:275:88;;;;;:::i;:::-;;:::i;:::-;;;844:14:165;;837:22;819:41;;807:2;792:18;26618:275:88;;;;;;;;1879:68;;;;;;;;;;-1:-1:-1;1879:68:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6126:135:85;;;;;;;;;;-1:-1:-1;6126:135:85;;;;;:::i;:::-;;:::i;:::-;;;2099:42:165;2087:55;;;2069:74;;2057:2;2042:18;6126:135:85;1923:226:165;3602:574:85;;;;;;;;;;-1:-1:-1;3602:574:85;;;;;:::i;:::-;;:::i;:::-;;1491:29:88;;;;;;;;;;;;;;;;;;;2672:25:165;;;2660:2;2645:18;1491:29:88;2526:177:165;3452:237:88;;;;;;;;;;-1:-1:-1;3452:237:88;;;;;:::i;:::-;;:::i;:::-;;;;2882:25:165;;;2938:2;2923:18;;2916:34;;;;2855:18;3452:237:88;2708:248:165;1181:631:85;;;;;;;;;;-1:-1:-1;1181:631:85;;;;;:::i;:::-;;:::i;348:42::-;;;;;;;;;;;;;;;6880:196:88;;;;;;;;;;-1:-1:-1;6880:196:88;;;;;:::i;:::-;;:::i;22430:394::-;;;;;;;;;;-1:-1:-1;22430:394:88;;;;;:::i;:::-;;:::i;1648:54::-;;;;;;;;;;-1:-1:-1;1648:54:88;;;;;:::i;:::-;;;;;;;;;;;;;;2134:151:85;;;;;;;;;;-1:-1:-1;2134:151:85;;;;;:::i;:::-;;:::i;1597:45:88:-;;;;;;;;;;-1:-1:-1;1597:45:88;;;;;:::i;:::-;;:::i;4584:1222::-;;;;;;;;;;-1:-1:-1;4584:1222:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23101:241::-;;;;;;;;;;-1:-1:-1;23101:241:88;;;;;:::i;:::-;;:::i;20550:300::-;;;;;;;;;;-1:-1:-1;20550:300:88;;;;;:::i;:::-;;:::i;8431:443::-;;;;;;;;;;-1:-1:-1;8431:443:88;;;;;:::i;:::-;;:::i;17976:223::-;;;;;;;;;;-1:-1:-1;17976:223:88;;;;;:::i;:::-;;:::i;5951:189::-;;;;;;;;;;-1:-1:-1;5951:189:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5844:127:85:-;;;;;;;;;;-1:-1:-1;5844:127:85;;;;;:::i;:::-;;:::i;5577:::-;;;;;;;;;;-1:-1:-1;5577:127:85;;;;;:::i;:::-;;:::i;2293:101:15:-;;;;;;;;;;;;;:::i;21469:713:88:-;;;;;;;;;;-1:-1:-1;21469:713:88;;;;;:::i;:::-;;:::i;18343:231::-;;;;;;;;;;-1:-1:-1;18343:231:88;;;;;:::i;:::-;;:::i;14386:2837::-;;;;;;;;;;-1:-1:-1;14386:2837:88;;;;;:::i;:::-;;:::i;1638:85:15:-;;;;;;;;;;-1:-1:-1;1684:7:15;1710:6;;;1638:85;;1526:28:88;;;;;;;;;;-1:-1:-1;1526:28:88;;;;;;;;;;;10252:6:165;10240:19;;;10222:38;;10210:2;10195:18;1526:28:88;10078:188:165;7395:137:88;;;;;;;;;;-1:-1:-1;7395:137:88;;;;;:::i;:::-;;:::i;4491:730:85:-;;;;;;;;;;-1:-1:-1;4491:730:85;;;;;:::i;:::-;;:::i;1761:57:88:-;;;;;;;;;;-1:-1:-1;1761:57:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;23853:172;;;;;;;;;;-1:-1:-1;23853:172:88;;;;;:::i;:::-;23973:35;;;23950:4;23973:35;;;:17;:35;;;;;;;;:45;;;;;;;;;;;;;23853:172;;;;;9214:140;;;;;;:::i;:::-;;:::i;19387:577::-;;;;;;;;;;;;;:::i;2676:666:85:-;;;;;;;;;;-1:-1:-1;2676:666:85;;;;;:::i;:::-;;:::i;9698:168:88:-;;;;;;:::i;:::-;;:::i;21010:287::-;;;;;;;;;;-1:-1:-1;21010:287:88;;;;;:::i;:::-;;:::i;6301:208::-;;;;;;;;;;-1:-1:-1;6301:208:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20112:284::-;;;;;;;;;;-1:-1:-1;20112:284:88;;;;;:::i;:::-;;:::i;6492:166:85:-;;;;;;;;;;-1:-1:-1;6492:166:85;;;;;:::i;:::-;;:::i;18883:318:88:-;;;;;;;;;;-1:-1:-1;18883:318:88;;;;;:::i;:::-;;:::i;2543:215:15:-;;;;;;;;;;-1:-1:-1;2543:215:15;;;;;:::i;:::-;;:::i;1560:30:88:-;;;;;;;;;;-1:-1:-1;1560:30:88;;;;;;;;;;;26618:275;26720:4;26743:50;;;26758:35;26743:50;;:91;;-1:-1:-1;7238:25:85;7223:40;;;;26797:37:88;26743:143;;;-1:-1:-1;877:25:38;862:40;;;;26850:36:88;26736:150;26618:275;-1:-1:-1;;26618:275:88:o;6126:135:85:-;6222:32;;;;;;;;2672:25:165;;;6196:7:85;;6222:11;:23;;;;;2645:18:165;;6222:32:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3602:574::-;3705:29;;;;;;;;2672:25:165;;;3684:18:85;;3705:11;:20;;;;;2645:18:165;;3705:29:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3684:50;;3744:34;3761:5;:16;;;3744;:34::i;:::-;4011:48;;;;;4035:10;4011:48;;;17708:74:165;4011:23:85;17818:55:165;;;17798:18;;;17791:83;17890:18;;;17883:34;;;4011:11:85;:23;;;;17681:18:165;;4011:48:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4142:27;3674:502;3602:574;;:::o;3452:237:88:-;3541:26;3569:21;3606:16;3625;3633:7;3625;:16::i;:::-;3606:35;;3659:23;3677:4;3659:17;:23::i;:::-;3652:30;;;;;3452:237;;;:::o;1181:631:85:-;1303:29;;;;;;;;2672:25:165;;;1282:18:85;;1303:11;:20;;;;;2645:18:165;;1303:29:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1282:50;;1342:34;1359:5;:16;;;1342;:34::i;:::-;1625:59;;;;;1654:10;1625:59;;;18159:74:165;1625:28:85;18269:55:165;;;18249:18;;;18242:83;18361:55;;;18341:18;;;18334:83;18433:18;;;18426:34;;;1625:11:85;:28;;;;18131:19:165;;1625:59:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:38;1272:540;1181:631;;;:::o;6880:196:88:-;7012:7;7042:27;7053:5;7042:27;7060:8;7042:27;:::i;:::-;:10;:27::i;:::-;7035:34;6880:196;-1:-1:-1;;;6880:196:88:o;22430:394::-;1531:13:15;:11;:13::i;:::-;22604:30:88::1;::::0;::::1;::::0;;:55:::1;;-1:-1:-1::0;22638:21:88;;::::1;::::0;22604:55:::1;22675:7;22600:92;22702:35;::::0;::::1;;::::0;;;:17:::1;:35;::::0;;;;;;;:45;;::::1;::::0;;;;;;;;:52;;;::::1;22750:4;22702:52;::::0;;22770:47;22702:45;;:35;22770:47:::1;::::0;::::1;1554:1:15;22430:394:88::0;;:::o;2134:151:85:-;2239:39;2256:4;2262:2;2266:7;2239:39;;;;;;;;;;;;:16;:39::i;1597:45:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1597:45:88;:::o;4584:1222::-;4639:11;;:::i;:::-;4683:29;;;;;;;;2672:25:165;;;4662:18:88;;4683:11;:20;;;;;2645:18:165;;4683:29:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4662:50;;4722:34;4739:5;:16;;;4722;:34::i;:::-;4767:30;4800;;;:21;:30;;;;;;;;4767:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4845:5;:12;;;:30;;;;;;;;:::i;:::-;;:65;;;-1:-1:-1;4895:15:88;4879:5;:12;;;:31;;;;;;;;:::i;:::-;;4845:65;:100;;;-1:-1:-1;4930:15:88;4914:5;:12;;;:31;;;;;;;;:::i;:::-;;4845:100;4841:411;;;5000:19;:35;5073:5;:16;;;5053:5;:17;;;:36;;;;:::i;:::-;5107:11;:22;;;5147:11;:26;;;5191:11;:36;;;5000:241;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4961:36;;;:280;4841:411;5269:530;;;;;;;;5301:5;:17;;;5269:530;;;;5344:5;:16;;;5269:530;;;;5382:5;:12;;;5269:530;;;;;;;;:::i;:::-;;;;;5417:5;:13;;;5269:530;;;;;;;;:::i;:::-;;;;;5452:5;:12;;;5269:530;;;;;;5488:5;:14;;;5269:530;;;;;;5523:5;:11;;;5269:530;;;;;;5560:5;:16;;;5269:530;;;;;;5597:5;:11;;;5269:530;;;;5634:11;:22;;;5269:530;;;;5686:11;:26;;;5269:530;;;;5752:11;:36;;;5269:530;;;5262:537;;;;4584:1222;;;:::o;23101:241::-;1531:13:15;:11;:13::i;:::-;23210:35:88::1;::::0;::::1;23258:5;23210:35:::0;;;:17:::1;:35;::::0;;;;;;;:45;;::::1;::::0;;;;;;;;:53;;;::::1;::::0;;23279:56;23210:45;;:35;23279:56:::1;::::0;::::1;23101:241:::0;;:::o;20550:300::-;1531:13:15;:11;:13::i;:::-;544:6:106::1;20635:27:88;::::0;::::1;;20631:60;;;20671:20;;;;;;;;;;;;;;20631:60;20718:16;::::0;;::::1;20744:36:::0;;::::1;20718:16:::0;20744:36;;::::1;::::0;;::::1;;::::0;;;20796:47:::1;::::0;;20718:16;;;::::1;::::0;;::::1;21393:38:165::0;;;21462:2;21447:18;;21440:47;;;;20718:16:88;20796:47:::1;::::0;21366:18:165;20796:47:88::1;;;;;;;;20621:229;20550:300:::0;:::o;8431:443::-;8492:22;8517:20;;;:11;:20;;;;;;;;8492:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8517:20;;8492:45;;;8517:20;;8492:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8492:45:88;;;-1:-1:-1;;8492:45:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8552:12;;:21;;;;:12;;-1:-1:-1;8552:35:88;8548:67;;8596:19;;;;;;;;;;;;;;8548:67;8643:12;;:21;;;8629:35;;:10;:35;;;;:72;;-1:-1:-1;8682:12:88;;:19;;;8668:33;;:10;:33;;8629:72;8625:106;;;8710:21;;;;;;;;;;;;;;8625:106;8749:20;;;;:11;:20;;;;;8742:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8749:20;;;8742:27;;;;8749:20;8742:27;:::i;:::-;-1:-1:-1;8742:27:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8786;;;;;-1:-1:-1;8786:27:88;;;;8779:34;8786:27;8742;8779:34;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;8829:38:88;;8856:10;;8847:7;;8829:38;;;;;8482:392;8431:443;:::o;17976:223::-;18053:29;;;;;;;;2672:25:165;;;18032:18:88;;18053:11;:20;;;;;2645:18:165;;18053:29:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18032:50;;18092:34;18109:5;:16;;;18092;:34::i;:::-;18144:48;;;;;18172:10;18144:48;;;22114:74:165;22204:18;;;22197:34;;;18144:11:88;:27;;;;;22087:18:165;;18144:48:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18137:55;17976:223;:::o;5951:189::-;6011:16;;:::i;:::-;6054:14;;6043:7;:25;6039:57;;6077:19;;;;;;;;;;;;;;6039:57;6113:20;;;;:11;:20;;;;;;;;;6106:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6113:20;;6106:27;;;;6113:20;;6106:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6106:27:88;;;-1:-1:-1;;6106:27:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5951:189:88:o;5844:127:85:-;5936:28;;;;;;;;2672:25:165;;;5910:7:85;;5936:11;:19;;;;;2645:18:165;;5936:28:85;2526:177:165;5577:127:85;5669:28;;;;;:21;2087:55:165;;;5669:28:85;;;2069:74:165;5643:7:85;;5669:11;:21;;;;;;2042:18:165;;5669:28:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2293:101:15:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;21469:713:88:-;1531:13:15;:11;:13::i;:::-;21554:32:88::1;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;21550:574;;;21602:32;::::0;::::1;21637:5;21602:32:::0;;;:25:::1;:32;::::0;;;;:40;;;::::1;::::0;;21719:395:::1;21743:28;:35:::0;21739:39;::::1;21719:395;;;21842:5;21807:40;;:28;21836:1;21807:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;:40:::0;21803:297:::1;;21929:28;21958:35:::0;;:39:::1;::::0;21996:1:::1;::::0;21958:39:::1;:::i;:::-;21929:69;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21871:28:::1;:31:::0;;21929:69:::1;::::0;;::::1;::::0;21900:1;;21871:31;::::1;;;;;:::i;:::-;;;;;;;;;:127;;;;;;;;;;;;;;;;;;22020:28;:34;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;22076:5:::1;;21803:297;21780:3;;21719:395;;;;21550:574;22139:36;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;21469:713:::0;:::o;18343:231::-;18424:29;;;;;;;;2672:25:165;;;18403:18:88;;18424:11;:20;;;;;2645:18:165;;18424:29:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18403:50;;18463:34;18480:5;:16;;;18463;:34::i;:::-;18515:52;;;;;18547:10;18515:52;;;22114:74:165;22204:18;;;22197:34;;;18515:11:88;:31;;;;;22087:18:165;;18515:52:88;21940:297:165;14386:2837:88;14462:16;14481;14489:7;14481;:16::i;:::-;14462:35;;14509:26;14537:21;14562:23;14580:4;14562:17;:23::i;:::-;14508:77;;;;14596:30;14629:38;14638:13;14653;14629:8;:38::i;:::-;14596:71;-1:-1:-1;14677:24:88;14704:68;14713:38;14596:71;14713:13;:38;:::i;:::-;14753:18;14704:8;:68::i;:::-;14677:95;;14841:408;;;;;;;;14945:22;14897:4;:29;;;:45;;;:70;;;;:::i;:::-;14841:408;;;;15001:4;:29;;;:48;;;14841:408;;;;15079:4;:29;;;:44;;;14841:408;;;;;;15216:22;15161:4;:29;;;:52;;;:77;;;;:::i;:::-;14841:408;;14783:30;;;;:21;:30;;;;;;;;;:466;;:55;;;:466;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15341:41;15366:16;15341:22;:41;:::i;:::-;15393:19;15415:30;;;:21;:30;;;;;:50;;;15325:57;;-1:-1:-1;15393:19:88;15415:50;;;:81;;-1:-1:-1;15469:27:88;;15415:81;:270;;15527:158;15566:22;15590:4;:19;;;:35;;;15627:4;:29;;;:44;;;15527:21;:158::i;:::-;15415:270;;;15511:1;15415:270;15393:292;-1:-1:-1;15696:24:88;15723:36;15393:292;15723:22;:36;:::i;:::-;15696:63;-1:-1:-1;15769:21:88;15793:35;15812:16;15696:63;15793:35;:::i;:::-;15769:59;-1:-1:-1;15929:14:88;15957:20;;15953:151;;16005:88;;;;;16055:10;16005:88;;;23187:74:165;23277:18;;;23270:34;;;23320:18;;;23313:34;;;16005:11:88;:49;;;;;23160:18:165;;16005:88:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15993:100;;15953:151;16210:17;;16206:539;;16355:15;;16351:100;;16410:10;;;;16390:31;;;;;;:19;:31;;;;;:46;;16425:11;;16390:31;:46;;16425:11;;16390:46;:::i;:::-;;;;-1:-1:-1;;16351:100:88;16471:10;;;;16465:76;;:34;;16500:10;16520:4;16527:13;16465:34;:76::i;:::-;16560:17;;16556:179;;16660:60;16691:4;:13;;;16706;16666:4;:10;;;16660:30;;;;:60;;;;;:::i;:::-;16760:75;;;23810:25:165;;;23866:2;23851:18;;23844:34;;;23894:18;;;23887:34;;;16772:7:88;;16760:75;;23798:2:165;23783:18;16760:75:88;;;;;;;16925:9;16921:296;;;16986:41;;;;;;;;2672:25:165;;;16950:33:88;;16986:11;:32;;;;;2645:18:165;;16986:41:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17045:25;;16950:77;;-1:-1:-1;17045:39:88;;;17041:166;;17104:88;17130:8;:25;;;17157:8;:25;;;17184:7;17104:25;:88::i;:::-;16936:281;16921:296;14452:2771;;;;;;;;;14386:2837;;:::o;7395:137::-;7466:7;7492:33;7503:5;7510:14;7492:33;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:33::i;4491:730:85:-;5039:49;;;;;:29;24651:55:165;;;5039:49:85;;;24633:74:165;24750:14;;24743:22;24723:18;;;24716:50;5039:11:85;:29;;;;24606:18:165;;5039:49:85;;;;;;;;;;;;;;;;;;;9214:140:88;9277:7;9303:44;9315:10;9327:7;9344:1;9303:11;:44::i;19387:577::-;1531:13:15;:11;:13::i;:::-;19508:9:88::1;19503:455;19527:28;:35:::0;19523:39;::::1;19503:455;;;19583:13;19599:28;19628:1;19599:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;;19664:26:::0;;;:19:::1;:26:::0;;;;;;;;19599:31;;-1:-1:-1;19709:13:88;;19705:243:::1;;19742:26;::::0;::::1;19771:1;19742:26:::0;;;:19:::1;:26;::::0;;;;:30;19826:45:::1;19852:7;1684::15::0;1710:6;;;;1638:85;19852:7:88::1;19826:25;::::0;::::1;::::0;19861:9;19826:25:::1;:45::i;:::-;19916:5;19894:39;;19907:7;1684::15::0;1710:6;;;;1638:85;19907:7:88::1;19894:39;;;19923:9;19894:39;;;;2672:25:165::0;;2660:2;2645:18;;2526:177;19894:39:88::1;;;;;;;;19705:243;-1:-1:-1::0;;19564:3:88::1;;19503:455;;;;19387:577::o:0;2676:666:85:-;2819:29;;;;;;;;2672:25:165;;;2798:18:85;;2819:11;:20;;;;;2645:18:165;;2819:29:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2798:50;;2858:34;2875:5;:16;;;2858;:34::i;:::-;3145:69;;;;;:32;:11;:32;;;;:69;;3178:10;;3190:4;;3196:2;;3200:7;;3209:4;;3145:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3297:38;2788:554;2676:666;;;;:::o;9698:168:88:-;9791:7;9817:42;9829:10;9841:7;9850:8;9817:11;:42::i;21010:287::-;1531:13:15;:11;:13::i;:::-;21091:32:88::1;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;21086:157;;21139:32;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:39;;;::::1;21174:4;21139:39:::0;;::::1;::::0;;;21192:28:::1;:40:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;21086:157:::1;21258:32;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;21010:287:::0;:::o;6301:208::-;-1:-1:-1;;;;;;;;;;;;;;;;;6416:14:88;;6405:7;:25;6401:57;;6439:19;;;;;;;;;;;;;;6401:57;6475:27;;;;:18;:27;;;;;;;6468:34;;;;;;;;;;;;6475:27;;6468:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6301:208;;;:::o;20112:284::-;1531:13:15;:11;:13::i;:::-;544:6:106::1;20193:25:88;::::0;::::1;;20189:58;;;20227:20;;;;;;;;;;;;;;20189:58;20274:14;::::0;;::::1;20298:32:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;20346:43:::1;::::0;;20274:14;;;::::1;21393:38:165::0;;;21462:2;21447:18;;21440:47;;;;20346:43:88::1;::::0;21366:18:165;20346:43:88::1;21223:270:165::0;6492:166:85;6606:45;;;;;:28;25626:55:165;;;6606:45:85;;;25608:74:165;25718:55;;;25698:18;;;25691:83;6583:4:85;;6606:11;:28;;;;;;25581:18:165;;6606:45:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18883:318:88:-;19019:28;;;;;;;;2672:25:165;;;18998:18:88;;19019:11;:20;;;;;2645:18:165;;19019:28:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18998:49;;19057:34;19074:5;:16;;;19057;:34::i;:::-;19102:92;;;;;19139:10;19102:92;;;26014:74:165;26104:18;;;26097:34;;;19102:36:88;26167:55:165;;;26147:18;;;26140:83;26271:66;26259:79;;26239:18;;;26232:107;19102:11:88;:36;;;;25986:19:165;;19102:92:88;25785:560:165;2543:215:15;1531:13;:11;:13::i;:::-;2627:22:::1;::::0;::::1;2623:91;;2672:31;::::0;::::1;::::0;;2700:1:::1;2672:31;::::0;::::1;2069:74:165::0;2042:18;;2672:31:15::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;505:180:85:-:0;579:27;;;601:4;579:27;575:104;;629:39;;;;;657:10;629:39;;;2069:74:165;2042:18;;629:39:85;1923:226:165;4061:289:88;4152:26;4180:21;4257:4;:15;;;4238:4;:16;;;:34;;;;:::i;:::-;4298:29;;;;;:45;4217:55;;4061:289;-1:-1:-1;;4061:289:88:o;7538:634::-;7640:7;;7700:14;;;;;;;;:::i;:::-;7686:28;;:10;:28;;;7659:55;;7725:46;7744:5;7751:19;7725:18;:46::i;:::-;7800:14;:16;;7782:15;;;7800:16;;;:::i;:::-;;;;;7782:34;;7849:68;;;;;;;;7868:5;7849:68;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;7826:20:88;;;:11;:20;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;:91;:20;;:91;;;;;;;;:::i;:::-;-1:-1:-1;7826:91:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7938:17;;7932:31;:35;;;:79;;;8010:1;7977:8;:22;;;7971:36;:40;7932:79;7928:148;;;8027:27;;;;:18;:27;;;;;:38;;8057:8;;8027:27;;;:38;;:27;:38;:::i;:::-;-1:-1:-1;8027:38:88;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;7928:148:88;8112:10;8091:49;;8103:7;8091:49;8124:5;8131:8;8091:49;;;;;;;:::i;:::-;;;;;;;;8158:7;7538:634;-1:-1:-1;;;;7538:634:88:o;1796:162:15:-;1684:7;1710:6;1855:23;1710:6;735:10:29;1855:23:15;1851:101;;1901:40;;;;;735:10:29;1901:40:15;;;2069:74:165;2042:18;;1901:40:15;1923:226:165;2912:187:15;2985:16;3004:6;;;3020:17;;;;;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5617:111:40:-;5675:7;5312:5;;;5709;;;5311:36;5306:42;;5701:20;5071:294;25350:290:88;25503:7;25533:100;25545:19;25566:23;;;25599:32;25574:14;25599:15;:32;:::i;:::-;25591:41;;25533:11;:100::i;:::-;25526:107;25350:290;-1:-1:-1;;;;25350:290:88:o;1285:1573:82:-;1423:12;1550:4;1544:11;1692:66;1673:17;1666:93;1806:4;1802:1;1783:17;1779:25;1772:39;1890:2;1885;1866:17;1862:26;1855:38;1970:6;1965:2;1946:17;1942:26;1935:42;2774:2;2771:1;2766:3;2747:17;2744:1;2737:5;2730;2725:52;2293:16;2286:24;2280:2;2262:16;2259:24;2255:1;2251;2245:8;2242:15;2238:46;2235:76;2035:756;2024:767;;;2819:7;2811:40;;;;;;;34177:2:165;2811:40:82;;;34159:21:165;34216:2;34196:18;;;34189:30;34255:22;34235:18;;;34228:50;34295:18;;2811:40:82;33975:344:165;2864:1456:82;2976:12;3103:4;3097:11;3245:66;3226:17;3219:93;3359:2;3355:1;3336:17;3332:25;3325:37;3439:6;3434:2;3415:17;3411:26;3404:42;4241:2;4238:1;4234:2;4215:17;4212:1;4205:5;4198;4193:51;3762:16;3755:24;3749:2;3731:16;3728:24;3724:1;3720;3714:8;3711:15;3707:46;3704:76;3504:754;3493:765;;;4286:7;4278:35;;;;;;;34526:2:165;4278:35:82;;;34508:21:165;34565:2;34545:18;;;34538:30;34604:17;34584:18;;;34577:45;34639:18;;4278:35:82;34324:339:165;17487:366:88;17608:21;17655:16;17673:7;17632:49;;;;;;2672:25:165;;2660:2;2645:18;;2526:177;17632:49:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:73;;17693:12;17707:23;17734:16;:21;;17756:8;17734:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17692:73;;;;17780:7;17775:72;;17825:10;17810:26;;;;;;;;;;;:::i;9872:4371::-;9959:7;10003:20;;;:11;:20;;;;;;;;9978:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:7;;9978:45;;;;10003:20;;9978:45;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9978:45:88;;;-1:-1:-1;;9978:45:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10038:12;;:21;;;;:12;;-1:-1:-1;10038:35:88;10034:67;;10082:19;;;;;;;;;;;;;;10034:67;10189:24;10216:11;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10254:12;;:19;;;10216:58;;;;;:37;2087:55:165;;;10216:58:88;;;2069:74:165;10216:37:88;;;;;2042:18:165;;10216:58:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:134;;;;10290:11;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10328:12;;:21;;;10290:60;;;;;:37;2087:55:165;;;10290:60:88;;;2069:74:165;10290:37:88;;;;;2042:18:165;;10290:60:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10189:161;;10361:11;10375:19;:57;;10401:11;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10375:57;;;10397:1;10375:57;10361:71;;10460:3;10447:9;:16;10443:43;;10472:14;;;;;;;;;;;;;;10443:43;10586:12;;:22;;;:26;;;;:70;;-1:-1:-1;10634:12:88;;:22;;;10616:15;:40;10586:70;10582:126;;;10679:18;;;;;;;;;;;;;;10582:126;10783:5;:25;;;10779:455;;;10893:12;;:19;;;10885:27;;;;;;;10881:51;;10921:11;;;;;;;;;;;;;;10881:51;10779:455;;;11034:12;;:21;;;11026:29;;;;;;;11022:55;;11064:13;;;;;;;;;;;;;;11022:55;11181:22;;;;11177:46;;11212:11;;;;;;;;;;;;;;11177:46;11292:21;11316:22;;;:55;;11352:12;;:19;;;11316:55;;;11341:8;11316:55;11292:79;;11382:29;11414:18;:27;11433:7;11414:27;;;;;;;;;;;11382:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11382:59:88;;;;-1:-1:-1;;;11487:20:88;;;;:11;:20;;;;;11480:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11382:59;;-1:-1:-1;11487:20:88;;11480:27;;;;11487:20;11480:27;:::i;:::-;-1:-1:-1;11480:27:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11524;;;;;-1:-1:-1;11524:27:88;;;;11517:34;11524:27;11480;11517:34;:::i;:::-;;;;;;;:::i;:::-;;;11562:36;11601:495;;;;;;;;11643:5;:12;;;:21;;;11601:495;;;;;;11686:5;:12;;;:19;;;11601:495;;;;;;11732:5;:12;;;:23;;;11601:495;;;;11782:5;:12;;;:24;;;11601:495;;;;11827:5;:12;;;:18;;;11601:495;;;;;;11868:18;11601:495;;;;;;;;:::i;:::-;;;11991:12;;:23;11601:495;;;;;11973:41;;:15;:41;:::i;:::-;11601:495;;12051:12;;:34;;;11601:495;;;;;12227:17;;12221:31;11562:534;;-1:-1:-1;12051:12:88;;12221:35;;;:79;;;12299:1;12266:8;:22;;;12260:36;:40;12221:79;12217:329;;;12378:12;;:19;;;12326:95;;;;;:39;:11;:39;;;;12373:3;;12326:95;;12399:11;;12412:8;;12326:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12316:105;;12217:329;;;12502:12;;:19;;;12462:73;;;;;:27;:11;:27;;;;12497:3;;12462:73;;12523:11;;12462:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12452:83;;12217:329;12589:447;;;;;;;;12627:15;12589:447;;;;12672:5;:12;;;:27;;;12589:447;;;;12739:232;;;;;;;;12799:1;12739:232;;;;12838:1;12739:232;;;;12873:19;:40;;12899:14;;;;12873:40;;;12895:1;12873:40;12739:232;;;;;;12955:1;12739:232;;;;;;;12589:447;;;;;;;;;;;;;12556:30;;;:21;:30;;;;;;:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13232:12;;:23;;13257:16;;12955:1;;13220:63;;13232:23;;13257:16;;544:6:106;13220:11:88;:63::i;:::-;13196:87;;13293:24;13346:13;13320:5;:12;;;:23;;;:39;;;;:::i;:::-;13293:66;-1:-1:-1;13413:17:88;;13409:104;;13466:12;;:18;;;13446:39;;;;;;:19;:39;;;;;:56;;13489:13;;13446:39;:56;;13489:13;;13446:56;:::i;:::-;;;;-1:-1:-1;;13409:104:88;13634:12;;:21;;;;13672:23;;;;13597:18;;;;;13591:105;;:42;;;;;13634:21;13665:4;;13591:42;:105::i;:::-;13776:20;;13772:122;;13818:12;;:18;;;13812:71;;:38;;13851:13;13866:16;13812:38;:71::i;:::-;13950:12;;:29;;;:43;;;13946:170;;14026:12;;:29;;;;14057;;;;;14009:96;;14026:29;14088:7;14097;14009:16;:96::i;:::-;14167:13;14131:80;;14158:7;14149;14131:80;14182:3;14187:13;14202:8;14131:80;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;14229:7:88;;9872:4371;-1:-1:-1;;;;;;;;;;;9872:4371:88:o;24131:1007::-;24247:19;24246:20;:50;;;;-1:-1:-1;24284:12:88;;;;;;;;:::i;:::-;24270:26;;:10;:26;;;;24246:50;24242:109;;;24319:21;;;;;;;;;;;;;;24242:109;24364:16;;;:21;24360:53;;24394:19;;;;;;;;;;;;;;24360:53;24450:1;24427:11;;;;;;;;:::i;:::-;:25;;;24423:63;;24461:25;;;;;;;;;;;;;;24423:63;24530:16;24500:27;;;;:46;24496:79;;;24555:20;;;;;;;;;;;;;;24496:79;24693:1;24675:5;:15;;;:19;:56;;;;;24716:5;:15;;;24698;:33;24675:56;24671:112;;;24754:18;;;;;;;;;;;;;;24671:112;24893:1;24859:22;;;;;;;;:::i;:::-;:36;;;24855:202;;24916:17;:41;24934:22;;;;;;;;:::i;:::-;24916:41;;;;;;;;;;;;;-1:-1:-1;24916:41:88;;;;24958:22;;;;;;;;:::i;:::-;24916:65;;;;;;;;;;;;;-1:-1:-1;24916:65:88;;;;24911:136;;25008:24;;;;;;;;;;;;;;24911:136;25067:64;;;;;:19;;:42;;:64;;25110:20;;;;25067:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7242:3683:40;7324:14;7375:12;7389:11;7404:12;7411:1;7414;7404:6;:12::i;:::-;7374:42;;;;7498:4;7506:1;7498:9;7494:365;;7833:11;7827:3;:17;;;;;:::i;:::-;;7820:24;;;;;;7494:365;7984:4;7969:11;:19;7965:142;;8008:84;5312:5;8028:16;;5311:36;940:4:30;5306:42:40;8008:11;:84::i;:::-;8359:17;8510:11;8507:1;8504;8497:25;8902:12;8932:15;;;8917:31;;9067:22;;;;;9800:1;9781;:15;;9780:21;;10033;;;10029:25;;10018:36;10103:21;;;10099:25;;10088:36;10175:21;;;10171:25;;10160:36;10246:21;;;10242:25;;10231:36;10319:21;;;10315:25;;10304:36;10393:21;;;10389:25;;;10378:36;9309:12;;;;9305:23;;;9330:1;9301:31;8622:18;;;8612:29;;;9416:11;;;;8665:19;;;;9160:14;;;;9409:18;;;;10868:13;;-1:-1:-1;;7242:3683:40;;;;;:::o;25965:403:88:-;26134:62;;;;;;2882:25:165;;;2923:18;;;;2916:34;;;26134:62:88;;;;;;;;;;2855:18:165;;;;26134:62:88;;;;;;;;;;;;;;;26249:31;;-1:-1:-1;;;;26249:21:88;;;;:31;;26134:62;;26249:31;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26207:73;;;;26295:7;26290:72;;26340:10;26325:26;;;;;;;;;;;:::i;1027:550:40:-;1088:12;;1474:6;1471:1;1468;1461:20;1501:9;;;;1549:11;;;1535:12;;;;1531:30;;;;;1027:550;-1:-1:-1;;1027:550:40:o;1776:194:30:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:177:165:-;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:132;263:20;;292:30;263:20;292:30;:::i;:::-;196:132;;;:::o;333:245::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:30;542:5;518:30;:::i;871:154::-;957:42;950:5;946:54;939:5;936:65;926:93;;1015:1;1012;1005:12;1030:134;1098:20;;1127:31;1098:20;1127:31;:::i;1169:386::-;1236:6;1244;1297:2;1285:9;1276:7;1272:23;1268:32;1265:52;;;1313:1;1310;1303:12;1265:52;1352:9;1339:23;1371:31;1396:5;1371:31;:::i;:::-;1421:5;-1:-1:-1;1478:2:165;1463:18;;1450:32;1491;1450;1491;:::i;:::-;1542:7;1532:17;;;1169:386;;;;;:::o;1560:226::-;1619:6;1672:2;1660:9;1651:7;1647:23;1643:32;1640:52;;;1688:1;1685;1678:12;1640:52;-1:-1:-1;1733:23:165;;1560:226;-1:-1:-1;1560:226:165:o;2154:367::-;2222:6;2230;2283:2;2271:9;2262:7;2258:23;2254:32;2251:52;;;2299:1;2296;2289:12;2251:52;2338:9;2325:23;2357:31;2382:5;2357:31;:::i;:::-;2407:5;2485:2;2470:18;;;;2457:32;;-1:-1:-1;;;2154:367:165:o;2961:508::-;3038:6;3046;3054;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3162:9;3149:23;3181:31;3206:5;3181:31;:::i;:::-;3231:5;-1:-1:-1;3288:2:165;3273:18;;3260:32;3301:33;3260:32;3301:33;:::i;:::-;2961:508;;3353:7;;-1:-1:-1;;;3433:2:165;3418:18;;;;3405:32;;2961:508::o;3728:166::-;3798:5;3843:3;3834:6;3829:3;3825:16;3821:26;3818:46;;;3860:1;3857;3850:12;3818:46;-1:-1:-1;3882:6:165;3728:166;-1:-1:-1;3728:166:165:o;3899:664::-;4039:6;4047;4100:2;4088:9;4079:7;4075:23;4071:32;4068:52;;;4116:1;4113;4106:12;4068:52;4156:9;4143:23;4189:18;4181:6;4178:30;4175:50;;;4221:1;4218;4211:12;4175:50;4244:77;4313:7;4304:6;4293:9;4289:22;4244:77;:::i;:::-;4234:87;;;4374:2;4363:9;4359:18;4346:32;4403:18;4393:8;4390:32;4387:52;;;4435:1;4432;4425:12;4387:52;4458:24;;4516:2;4498:16;;;4494:25;4491:45;;;4532:1;4529;4522:12;4568:247;4627:6;4680:2;4668:9;4659:7;4655:23;4651:32;4648:52;;;4696:1;4693;4686:12;4648:52;4735:9;4722:23;4754:31;4779:5;4754:31;:::i;4820:184::-;4872:77;4869:1;4862:88;4969:4;4966:1;4959:15;4993:4;4990:1;4983:15;5009:137;5087:1;5080:5;5077:12;5067:46;;5093:18;;:::i;:::-;5122;;5009:137::o;5151:143::-;5235:1;5228:5;5225:12;5215:46;;5241:18;;:::i;5780:1444::-;5918:4;5960:3;5949:9;5945:19;5937:27;;5997:6;5991:13;5980:9;5973:32;6061:4;6053:6;6049:17;6043:24;6036:4;6025:9;6021:20;6014:54;6115:4;6107:6;6103:17;6097:24;6130:58;6182:4;6171:9;6167:20;6153:12;6130:58;:::i;:::-;;6237:4;6229:6;6225:17;6219:24;6252:66;6312:4;6301:9;6297:20;6281:14;6252:66;:::i;:::-;;6367:4;6359:6;6355:17;6349:24;6382:56;6432:4;6421:9;6417:20;6401:14;1868:42;1857:54;1845:67;;1791:127;6382:56;;6487:4;6479:6;6475:17;6469:24;6502:56;6552:4;6541:9;6537:20;6521:14;1868:42;1857:54;1845:67;;1791:127;6502:56;;6607:4;6599:6;6595:17;6589:24;6622:56;6672:4;6661:9;6657:20;6641:14;1868:42;1857:54;1845:67;;1791:127;6622:56;;6727:4;6719:6;6715:17;6709:24;6742:56;6792:4;6781:9;6777:20;6761:14;1868:42;1857:54;1845:67;;1791:127;6742:56;;6856:6;6848;6844:19;6838:26;6829:6;6818:9;6814:22;6807:58;6923:6;6915;6911:19;6905:26;6896:6;6885:9;6881:22;6874:58;6981:6;6973;6969:19;6963:26;6998:72;7062:6;7051:9;7047:22;7031:14;5383:12;;5397:6;5379:25;;;5367:38;;5458:4;5447:16;;;5441:23;5437:36;5421:14;;5414:60;5299:181;6998:72;-1:-1:-1;7119:6:165;7107:19;;;;7101:26;5575:12;;7210:6;7195:22;;5563:25;5637:4;5626:16;;5620:23;5604:14;;;5597:47;5697:4;5686:16;;5680:23;5705:6;5676:36;5660:14;;;5653:60;5762:4;5751:16;5745:23;5729:14;;;;5722:47;5780:1444;:::o;7229:117::-;7314:6;7307:5;7303:18;7296:5;7293:29;7283:57;;7336:1;7333;7326:12;7351:245;7409:6;7462:2;7450:9;7441:7;7437:23;7433:32;7430:52;;;7478:1;7475;7468:12;7430:52;7517:9;7504:23;7536:30;7560:5;7536:30;:::i;7601:348::-;7643:3;7681:5;7675:12;7708:6;7703:3;7696:19;7764:6;7757:4;7750:5;7746:16;7739:4;7734:3;7730:14;7724:47;7816:1;7809:4;7800:6;7795:3;7791:16;7787:27;7780:38;7938:4;7868:66;7863:2;7855:6;7851:15;7847:88;7842:3;7838:98;7834:109;7827:116;;;7601:348;;;;:::o;8109:1613::-;8294:2;8283:9;8276:21;8257:4;8332:6;8326:13;8375:4;8370:2;8359:9;8355:18;8348:32;8422:12;8416:19;8411:2;8400:9;8396:18;8389:47;8491:2;8477:12;8473:21;8467:28;8504:69;8568:3;8557:9;8553:19;8537:14;5383:12;;5397:6;5379:25;;;5367:38;;5458:4;5447:16;;;5441:23;5437:36;5421:14;;5414:60;5299:181;8504:69;-1:-1:-1;8634:4:165;8616:23;;8610:30;8604:3;8589:19;;8582:59;8696:2;8678:21;;8672:28;1868:42;1857:54;;;8759:3;8744:19;;1845:67;8819:3;8801:22;;8795:29;1857:54;8883:3;8868:19;;1845:67;8943:4;8925:23;;8919:30;8986:6;8980:3;8965:19;;8958:35;9016:54;9065:3;9050:19;;8919:30;9016:54;:::i;:::-;9002:68;;9125:3;9111:12;9107:22;9101:29;9139:55;9189:3;9178:9;9174:19;9158:14;1868:42;1857:54;1845:67;;1791:127;9139:55;-1:-1:-1;9255:3:165;9237:22;;9231:29;9225:3;9210:19;;9203:58;9325:3;9307:22;;9301:29;9292:6;9277:22;;9270:61;9386:3;9368:22;;9362:29;1868:42;1857:54;9450:3;9435:19;;1845:67;9510:3;9492:22;;;9486:29;8030:66;8019:78;9573:3;9558:19;;8007:91;9627:2;9615:15;;9609:22;653:13;;646:21;9687:4;9672:20;;634:34;9609:22;9710:6;8109:1613;-1:-1:-1;;;;8109:1613:165:o;9727:346::-;9795:6;9803;9856:2;9844:9;9835:7;9831:23;9827:32;9824:52;;;9872:1;9869;9862:12;9824:52;-1:-1:-1;;9917:23:165;;;10037:2;10022:18;;;10009:32;;-1:-1:-1;9727:346:165:o;10271:377::-;10368:6;10421:2;10409:9;10400:7;10396:23;10392:32;10389:52;;;10437:1;10434;10427:12;10389:52;10477:9;10464:23;10510:18;10502:6;10499:30;10496:50;;;10542:1;10539;10532:12;10496:50;10565:77;10634:7;10625:6;10614:9;10610:22;10565:77;:::i;10653:118::-;10739:5;10732:13;10725:21;10718:5;10715:32;10705:60;;10761:1;10758;10751:12;10776:382;10841:6;10849;10902:2;10890:9;10881:7;10877:23;10873:32;10870:52;;;10918:1;10915;10908:12;10870:52;10957:9;10944:23;10976:31;11001:5;10976:31;:::i;:::-;11026:5;-1:-1:-1;11083:2:165;11068:18;;11055:32;11096:30;11055:32;11096:30;:::i;11163:184::-;11215:77;11212:1;11205:88;11312:4;11309:1;11302:15;11336:4;11333:1;11326:15;11352:252;11424:2;11418:9;11466:3;11454:16;;11500:18;11485:34;;11521:22;;;11482:62;11479:88;;;11547:18;;:::i;:::-;11583:2;11576:22;11352:252;:::o;11609:::-;11676:4;11670:11;;;11708:17;;11755:18;11740:34;;11776:22;;;11737:62;11734:88;;;11802:18;;:::i;11866:833::-;11930:5;11962:1;11986:18;11978:6;11975:30;11972:56;;;12008:18;;:::i;:::-;-1:-1:-1;12222:2:165;12216:9;12072:66;12067:2;12055:15;;12051:88;;12280:2;12268:15;12264:88;12252:101;;12404:22;;;12383:18;12368:34;;12365:62;12362:88;;;12430:18;;:::i;:::-;12466:2;12459:22;12514;;;12499:6;-1:-1:-1;12499:6:165;12551:16;;;12548:25;-1:-1:-1;12545:45:165;;;12586:1;12583;12576:12;12545:45;12636:6;12631:3;12624:4;12616:6;12612:17;12599:44;12691:1;12684:4;12675:6;12667;12663:19;12659:30;12652:41;;11866:833;;;;;:::o;12704:846::-;12799:6;12807;12815;12823;12876:3;12864:9;12855:7;12851:23;12847:33;12844:53;;;12893:1;12890;12883:12;12844:53;12932:9;12919:23;12951:31;12976:5;12951:31;:::i;:::-;13001:5;-1:-1:-1;13058:2:165;13043:18;;13030:32;13071:33;13030:32;13071:33;:::i;:::-;13123:7;-1:-1:-1;13203:2:165;13188:18;;13175:32;;-1:-1:-1;13284:2:165;13269:18;;13256:32;13311:18;13300:30;;13297:50;;;13343:1;13340;13333:12;13297:50;13366:22;;13419:4;13411:13;;13407:27;-1:-1:-1;13397:55:165;;13448:1;13445;13438:12;13397:55;13471:73;13536:7;13531:2;13518:16;13513:2;13509;13505:11;13471:73;:::i;:::-;13461:83;;;12704:846;;;;;;;:::o;13555:367::-;13623:6;13631;13684:2;13672:9;13663:7;13659:23;13655:32;13652:52;;;13700:1;13697;13690:12;13652:52;13745:23;;;-1:-1:-1;13844:2:165;13829:18;;13816:32;13857:33;13816:32;13857:33;:::i;13927:362::-;13983:3;14027:5;14021:12;14054:4;14049:3;14042:17;14080:47;14121:4;14116:3;14112:14;14098:12;14080:47;:::i;:::-;14068:59;;14175:4;14168:5;14164:16;14158:23;14223:3;14217:4;14213:14;14206:4;14201:3;14197:14;14190:38;14244:39;14278:4;14262:14;14244:39;:::i;:::-;14237:46;13927:362;-1:-1:-1;;;;;13927:362:165:o;14294:278::-;14487:2;14476:9;14469:21;14450:4;14507:59;14562:2;14551:9;14547:18;14539:6;14507:59;:::i;14577:388::-;14645:6;14653;14706:2;14694:9;14685:7;14681:23;14677:32;14674:52;;;14722:1;14719;14712:12;14674:52;14761:9;14748:23;14780:31;14805:5;14780:31;:::i;:::-;14830:5;-1:-1:-1;14887:2:165;14872:18;;14859:32;14900:33;14859:32;14900:33;:::i;14970:506::-;15046:6;15054;15062;15115:2;15103:9;15094:7;15090:23;15086:32;15083:52;;;15131:1;15128;15121:12;15083:52;15176:23;;;-1:-1:-1;15275:2:165;15260:18;;15247:32;15288:33;15247:32;15288:33;:::i;:::-;15340:7;-1:-1:-1;15399:2:165;15384:18;;15371:32;15412;15371;15412;:::i;:::-;15463:7;15453:17;;;14970:506;;;;;:::o;15481:138::-;15560:13;;15582:31;15560:13;15582:31;:::i;15624:251::-;15694:6;15747:2;15735:9;15726:7;15722:23;15718:32;15715:52;;;15763:1;15760;15753:12;15715:52;15795:9;15789:16;15814:31;15839:5;15814:31;:::i;15880:151::-;15963:13;;16005:1;15995:12;;15985:40;;16021:1;16018;16011:12;16036:157;16125:13;;16167:1;16157:12;;16147:40;;16183:1;16180;16173:12;16198:1303;16292:6;16352:3;16340:9;16331:7;16327:23;16323:33;16368:2;16365:22;;;16383:1;16380;16373:12;16365:22;-1:-1:-1;16425:22:165;;:::i;:::-;16492:16;;16517:22;;16605:2;16590:18;;;16584:25;16625:14;;;16618:31;16715:2;16700:18;;;16694:25;16735:14;;;16728:31;16825:2;16810:18;;;16804:25;16845:14;;;16838:31;16902:50;16947:3;16932:19;;16902:50;:::i;:::-;16896:3;16889:5;16885:15;16878:75;16986:50;17031:3;17020:9;17016:19;16986:50;:::i;:::-;16980:3;16973:5;16969:15;16962:75;17070:50;17115:3;17104:9;17100:19;17070:50;:::i;:::-;17064:3;17057:5;17053:15;17046:75;17154:50;17199:3;17188:9;17184:19;17154:50;:::i;:::-;17148:3;17141:5;17137:15;17130:75;17238:50;17283:3;17272:9;17268:19;17238:50;:::i;:::-;17232:3;17225:5;17221:15;17214:75;17322:54;17371:3;17360:9;17356:19;17322:54;:::i;:::-;17316:3;17309:5;17305:15;17298:79;17410:60;17465:3;17454:9;17450:19;17410:60;:::i;:::-;17404:3;17393:15;;17386:85;17397:5;16198:1303;-1:-1:-1;;;16198:1303:165:o;18471:221::-;18514:5;18567:3;18560:4;18552:6;18548:17;18544:27;18534:55;;18585:1;18582;18575:12;18534:55;18607:79;18682:3;18673:6;18660:20;18653:4;18645:6;18641:17;18607:79;:::i;18697:657::-;18813:9;18872:4;18864:5;18848:14;18844:26;18840:37;18837:57;;;18890:1;18887;18880:12;18837:57;18918:17;;:::i;:::-;18971:5;18958:19;19000:18;18992:6;18989:30;18986:50;;;19032:1;19029;19022:12;18986:50;19061:53;19099:14;19090:6;19083:5;19079:18;19061:53;:::i;:::-;19052:7;19045:70;;19164:2;19157:5;19153:14;19140:28;19193:18;19183:8;19180:32;19177:52;;;19225:1;19222;19215:12;19177:52;19263:55;19303:14;19292:8;19285:5;19281:20;19263:55;:::i;:::-;19258:2;19245:16;;19238:81;-1:-1:-1;19249:7:165;18697:657;-1:-1:-1;;18697:657:165:o;19359:184::-;19411:77;19408:1;19401:88;19508:4;19505:1;19498:15;19532:4;19529:1;19522:15;19548:128;19615:9;;;19636:11;;;19633:37;;;19650:18;;:::i;19681:614::-;20072:25;;;20128:2;20113:18;;;20106:34;;;5383:12;;5397:6;5379:25;;;20205:2;20190:18;;5367:38;5447:16;;;5441:23;5437:36;5421:14;;;5414:60;20059:3;20044:19;;5575:12;;20284:3;20269:19;;5563:25;5637:4;5626:16;;5620:23;5604:14;;;5597:47;5697:4;5686:16;;5680:23;5705:6;5676:36;5660:14;;;5653:60;5762:4;5751:16;;5745:23;5729:14;;;5722:47;20218:71;5485:290;20300:918;20413:6;20473:3;20461:9;20452:7;20448:23;20444:33;20489:2;20486:22;;;20504:1;20501;20494:12;20486:22;-1:-1:-1;20573:2:165;20567:9;20615:3;20603:16;;20649:18;20634:34;;20670:22;;;20631:62;20628:88;;;20696:18;;:::i;:::-;20732:2;20725:22;;;20788:16;;20813:21;;20900:2;20885:18;;;20879:25;20920:15;;;20913:32;20975:18;;20969:25;21003:32;20969:25;21003:32;:::i;:::-;21063:2;21051:15;;21044:32;21142:2;21127:18;;;21121:25;21162:15;;;21155:32;;;;-1:-1:-1;21055:6:165;20300:918;-1:-1:-1;20300:918:165:o;21498:437::-;21577:1;21573:12;;;;21620;;;21641:61;;21695:4;21687:6;21683:17;21673:27;;21641:61;21748:2;21740:6;21737:14;21717:18;21714:38;21711:218;;21785:77;21782:1;21775:88;21886:4;21883:1;21876:15;21914:4;21911:1;21904:15;22242:230;22312:6;22365:2;22353:9;22344:7;22340:23;22336:32;22333:52;;;22381:1;22378;22371:12;22333:52;-1:-1:-1;22426:16:165;;22242:230;-1:-1:-1;22242:230:165:o;22477:184::-;22529:77;22526:1;22519:88;22626:4;22623:1;22616:15;22650:4;22647:1;22640:15;22666:184;22718:77;22715:1;22708:88;22815:4;22812:1;22805:15;22839:4;22836:1;22829:15;22855:125;22920:9;;;22941:10;;;22938:36;;;22954:18;;:::i;23358:245::-;23425:6;23478:2;23466:9;23457:7;23453:23;23449:32;23446:52;;;23494:1;23491;23484:12;23446:52;23526:9;23520:16;23545:28;23567:5;23545:28;:::i;23932:528::-;24038:6;24098:2;24086:9;24077:7;24073:23;24069:32;24113:2;24110:22;;;24128:1;24125;24118:12;24110:22;-1:-1:-1;24170:17:165;;:::i;:::-;24217:9;24211:16;24236:33;24261:7;24236:33;:::i;:::-;24278:22;;24345:2;24330:18;;24324:25;24358:32;24324:25;24358:32;:::i;:::-;24417:2;24406:14;;24399:31;24410:5;23932:528;-1:-1:-1;;;23932:528:165:o;24777:652::-;25048:42;25040:6;25036:55;25025:9;25018:74;25140:42;25132:6;25128:55;25123:2;25112:9;25108:18;25101:83;25232:42;25224:6;25220:55;25215:2;25204:9;25200:18;25193:83;25312:6;25307:2;25296:9;25292:18;25285:34;25356:3;25350;25339:9;25335:19;25328:32;24999:4;25377:46;25418:3;25407:9;25403:19;25395:6;25377:46;:::i;:::-;25369:54;24777:652;-1:-1:-1;;;;;;;24777:652:165:o;26350:195::-;26389:3;26420:66;26413:5;26410:77;26407:103;;26490:18;;:::i;:::-;-1:-1:-1;26537:1:165;26526:13;;26350:195::o;26550:428::-;26611:5;26659:4;26647:9;26642:3;26638:19;26634:30;26631:50;;;26677:1;26674;26667:12;26631:50;26699:17;;:::i;:::-;26690:26;;26753:9;26740:23;26772:32;26796:7;26772:32;:::i;:::-;26813:22;;26887:2;26872:18;;26859:32;26900;26859;26900;:::i;:::-;26959:2;26948:14;;26941:31;26952:5;26550:428;-1:-1:-1;;26550:428:165:o;26983:1391::-;27107:9;27166:6;27158:5;27142:14;27138:26;27134:39;27131:59;;;27186:1;27183;27176:12;27131:59;27214:22;;:::i;:::-;27281:19;;27309:24;;27367:64;27416:14;27411:2;27400:14;;27367:64;:::i;:::-;27362:2;27349:16;;27342:90;27501:2;27490:14;;27477:28;27534:4;27521:18;;27514:35;27583;27613:3;27602:15;;27583:35;:::i;:::-;27578:2;27569:7;27565:16;27558:61;27654:35;27684:3;27677:5;27673:15;27654:35;:::i;:::-;27648:3;27639:7;27635:17;27628:62;27737:3;27730:5;27726:15;27713:29;27765:18;27757:6;27754:30;27751:50;;;27797:1;27794;27787:12;27751:50;27836:53;27874:14;27865:6;27858:5;27854:18;27836:53;:::i;:::-;27830:3;27821:7;27817:17;27810:80;;27925:35;27955:3;27948:5;27944:15;27925:35;:::i;:::-;27919:3;27906:17;;27899:62;28030:3;28019:15;;;28006:29;28064:3;28051:17;;28044:34;28147:3;28136:15;;28123:29;28168:17;;;28161:34;28230:35;28260:3;28249:15;;28230:35;:::i;:::-;28224:3;28215:7;28211:17;28204:62;28301:37;28330:6;28323:5;28319:18;28301:37;:::i;:::-;28295:3;28282:17;;28275:64;28286:7;26983:1391;-1:-1:-1;;26983:1391:165:o;28505:518::-;28607:2;28602:3;28599:11;28596:421;;;28643:5;28640:1;28633:16;28687:4;28684:1;28674:18;28757:2;28745:10;28741:19;28738:1;28734:27;28728:4;28724:38;28793:4;28781:10;28778:20;28775:47;;;-1:-1:-1;28816:4:165;28775:47;28871:2;28866:3;28862:12;28859:1;28855:20;28849:4;28845:31;28835:41;;28926:81;28944:2;28937:5;28934:13;28926:81;;;29003:1;28989:16;;28970:1;28959:13;28926:81;;29259:1418;29385:3;29379:10;29412:18;29404:6;29401:30;29398:56;;;29434:18;;:::i;:::-;29463:97;29553:6;29513:38;29545:4;29539:11;29513:38;:::i;:::-;29507:4;29463:97;:::i;:::-;29609:4;29640:2;29629:14;;29657:1;29652:768;;;;30464:1;30481:6;30478:89;;;-1:-1:-1;30533:19:165;;;30527:26;30478:89;29165:66;29156:1;29152:11;;;29148:84;29144:89;29134:100;29240:1;29236:11;;;29131:117;30580:81;;29622:1049;;29652:768;28452:1;28445:14;;;28489:4;28476:18;;29700:66;29688:79;;;29865:222;29879:7;29876:1;29873:14;29865:222;;;29961:19;;;29955:26;29940:42;;30068:4;30053:20;;;;30021:1;30009:14;;;;29895:12;29865:222;;;29869:3;30115:6;30106:7;30103:19;30100:261;;;30176:19;;;30170:26;30277:66;30259:1;30255:14;;;30271:3;30251:24;30247:97;30243:102;30228:118;30213:134;;30100:261;-1:-1:-1;;;;30407:1:165;30391:14;;;30387:22;30374:36;;-1:-1:-1;29259:1418:165:o;30682:348::-;30787:5;30774:19;30802:32;30826:7;30802:32;:::i;:::-;30868:6;30855:20;30843:33;;30924:4;30913:16;;30900:30;30939:32;30900:30;30939:32;:::i;:::-;31016:6;31007:7;31003:20;30996:4;30991:3;30987:14;30980:44;;30682:348;;:::o;31035:560::-;31094:5;31101:6;31161:3;31148:17;31243:66;31232:8;31216:14;31212:29;31208:102;31188:18;31184:127;31174:155;;31325:1;31322;31315:12;31174:155;31353:33;;31457:4;31444:18;;;-1:-1:-1;31405:21:165;;-1:-1:-1;31485:18:165;31474:30;;31471:50;;;31517:1;31514;31507:12;31471:50;31564:6;31548:14;31544:27;31537:5;31533:39;31530:59;;;31585:1;31582;31575:12;31530:59;31035:560;;;;;:::o;31600:326::-;31689:6;31684:3;31677:19;31741:6;31734:5;31727:4;31722:3;31718:14;31705:43;;31793:1;31786:4;31777:6;31772:3;31768:16;31764:27;31757:38;31659:3;31915:4;31845:66;31840:2;31832:6;31828:15;31824:88;31819:3;31815:98;31811:109;31804:116;;31600:326;;;;:::o;31931:1879::-;32226:2;32208:21;;;32270:20;;32306:18;;;32299:33;32189:4;32341:80;32417:2;32402:18;;32395:4;32383:17;;32341:80;:::i;:::-;32491:2;32479:15;;32466:29;32526:3;32511:19;;32504:36;32569:37;32600:4;32588:17;;32569:37;:::i;:::-;1868:42;1857:54;32663:3;32648:19;;1845:67;32699:36;32730:3;32718:16;;32699:36;:::i;:::-;1868:42;1857:54;32794:3;32779:19;;1845:67;32844:57;32896:3;32884:16;;32888:6;32844:57;:::i;:::-;32938:6;32932:3;32921:9;32917:19;32910:35;32968:77;33040:3;33029:9;33025:19;33011:12;32995:14;32968:77;:::i;:::-;32954:91;;;33076:36;33107:3;33099:6;33095:16;33076:36;:::i;:::-;1868:42;1857:54;;33171:3;33156:19;;1845:67;-1:-1:-1;33246:3:165;33234:16;;33221:30;33282:3;33267:19;;;33260:36;;;;33366:3;33354:16;;33341:30;33402:3;33387:19;;33380:36;33447;;33466:16;;33447:36;:::i;:::-;1868:42;1857:54;33542:6;33527:22;;1845:67;33581:35;33611:3;33599:16;;33581:35;:::i;:::-;8030:66;8019:78;33674:3;33659:19;;8007:91;33717:22;;;33710:4;33695:20;;33688:52;33757:47;33721:6;33789;33757:47;:::i;33815:155::-;33906:6;33883:14;;;33899;;;33879:35;;33926:15;;33923:41;;;33944:18;;:::i;34668:301::-;34797:3;34835:6;34829:13;34881:6;34874:4;34866:6;34862:17;34857:3;34851:37;34943:1;34907:16;;34932:13;;;-1:-1:-1;34907:16:165;34668:301;-1:-1:-1;34668:301:165:o;34974:218::-;35121:2;35110:9;35103:21;35084:4;35141:45;35182:2;35171:9;35167:18;35159:6;35141:45;:::i;35475:848::-;35583:42;35575:5;35569:12;35565:61;35560:3;35553:74;35688:42;35680:4;35673:5;35669:16;35663:23;35659:72;35652:4;35647:3;35643:14;35636:96;35781:4;35774:5;35770:16;35764:23;35757:4;35752:3;35748:14;35741:47;35535:3;35834:4;35827:5;35823:16;35817:23;35872:6;35865:4;35860:3;35856:14;35849:30;35900:49;35941:6;35936:3;35932:16;35918:12;35900:49;:::i;:::-;35888:61;;35997:4;35990:5;35986:16;35980:23;36012:50;36056:4;36051:3;36047:14;36031;1868:42;1857:54;1845:67;;1791:127;36012:50;;36110:4;36103:5;36099:16;36093:23;36125:60;36179:4;36174:3;36170:14;36154;36125:60;:::i;:::-;;36234:4;36227:5;36223:16;36217:23;36210:4;36205:3;36201:14;36194:47;36290:4;36283:5;36279:16;36273:23;36266:4;36261:3;36257:14;36250:47;36313:4;36306:11;;;35475:848;;;;:::o;36328:631::-;36661:42;36653:6;36649:55;36638:9;36631:74;36741:2;36736;36725:9;36721:18;36714:30;36612:4;36767:63;36826:2;36815:9;36811:18;36803:6;36767:63;:::i;:::-;36878:9;36870:6;36866:22;36861:2;36850:9;36846:18;36839:50;36906:47;36946:6;36938;36906:47;:::i;:::-;36898:55;36328:631;-1:-1:-1;;;;;;36328:631:165:o;36964:410::-;37205:42;37197:6;37193:55;37182:9;37175:74;37285:2;37280;37269:9;37265:18;37258:30;37156:4;37305:63;37364:2;37353:9;37349:18;37341:6;37305:63;:::i;37379:420::-;37628:6;37617:9;37610:25;37671:6;37666:2;37655:9;37651:18;37644:34;37714:2;37709;37698:9;37694:18;37687:30;37591:4;37734:59;37789:2;37778:9;37774:18;37766:6;37734:59;:::i;37804:288::-;38014:2;37999:18;;38026:60;38003:9;38068:6;38026:60;:::i;38097:184::-;38149:77;38146:1;38139:88;38246:4;38243:1;38236:15;38270:4;38267:1;38260:15","linkReferences":{"src/libraries/CompoundInterestLib.sol":{"CompoundInterestLib":[{"start":4255,"length":20},{"start":18020,"length":20}]}},"immutableReferences":{"41258":[{"start":1065,"length":32},{"start":2561,"length":32},{"start":2737,"length":32},{"start":2962,"length":32},{"start":3137,"length":32},{"start":3370,"length":32},{"start":3873,"length":32},{"start":6107,"length":32},{"start":6303,"length":32},{"start":6984,"length":32},{"start":7123,"length":32},{"start":7859,"length":32},{"start":8055,"length":32},{"start":8555,"length":32},{"start":8976,"length":32},{"start":9553,"length":32},{"start":10022,"length":32},{"start":10226,"length":32},{"start":11295,"length":32},{"start":11451,"length":32},{"start":11716,"length":32},{"start":14172,"length":32},{"start":14467,"length":32},{"start":14764,"length":32},{"start":16291,"length":32},{"start":16486,"length":32}]}},"methodIdentifiers":{"_bullaClaim()":"2b538af5","acceptLoan(uint256)":"adfbe22f","acceptLoanWithReceiver(uint256,address)":"b9108c03","addToCallbackWhitelist(address,bytes4)":"307a8088","addToFeeTokenWhitelist(address)":"d4251f9e","admin()":"f851a440","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","callbackWhitelist(address,bytes4)":"04dbf913","getApproved(uint256)":"081812fc","getLoan(uint256)":"504006ca","getLoanOffer(uint256)":"631f1a3c","getLoanOfferMetadata(uint256)":"db4e0899","getTotalAmountDue(uint256)":"1bc7cd3d","impairLoan(uint256)":"623fb7ce","isApprovedForAll(address,address)":"e985e9c5","isCallbackWhitelisted(address,bytes4)":"a64d6beb","loanOfferCount()":"150a6422","markLoanAsPaid(uint256)":"88046146","offerLoan((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4))":"a15c24f3","offerLoanWithMetadata((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4),(string,string))":"2d1982ff","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","payLoan(uint256,uint256)":"89306e61","processingFeeBPS()":"fce5f608","protocolFeeBPS()":"96daa322","protocolFeeTokenWhitelist(address)":"a5cc6a7f","protocolFeesByToken(address)":"39737e07","rejectLoanOffer(uint256)":"6208d89c","removeFromCallbackWhitelist(address,bytes4)":"520eb076","removeFromFeeTokenWhitelist(address)":"82459995","renounceOwnership()":"715018a6","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setPaidLoanCallback(uint256,address,bytes4)":"ea7d616b","setProcessingFee(uint16)":"52331cf8","setProtocolFee(uint16)":"e4467f35","supportsInterface(bytes4)":"01ffc9a7","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","whitelistedProtocolFeeTokens(uint256)":"4be18e94","withdrawAllFees()":"af236af4"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bullaClaim\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_protocolFeeBPS\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_processingFeeBPS\",\"type\":\"uint16\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"CallbackFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallbackNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidGracePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTermLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LoanOfferExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LoanOfferNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NativeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCreditor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCreditorOrDebtor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDebtor\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"CallbackRemovedFromWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"CallbackWhitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"processingFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"attachmentURI\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"struct ClaimMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"LoanOfferAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rejectedBy\",\"type\":\"address\"}],\"name\":\"LoanOfferRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"offeredBy\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"termLength\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"interestRateBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"numberOfPeriodsPerYear\",\"type\":\"uint16\"}],\"internalType\":\"struct InterestConfig\",\"name\":\"interestConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"loanAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"impairmentGracePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiresAt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"callbackSelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"struct LoanRequestParams\",\"name\":\"loanOffer\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"attachmentURI\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"struct ClaimMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"LoanOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossInterestPaid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"principalPaid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"LoanPayment\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldFee\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newFee\",\"type\":\"uint16\"}],\"name\":\"ProcessingFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldFee\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newFee\",\"type\":\"uint16\"}],\"name\":\"ProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAddedToFeesWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenRemovedFromFeesWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_bullaClaim\",\"outputs\":[{\"internalType\":\"contract IBullaClaimV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"}],\"name\":\"acceptLoan\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"acceptLoanWithReceiver\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"addToCallbackWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addToFeeTokenWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"callbackWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"}],\"name\":\"getLoan\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"claimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paidAmount\",\"type\":\"uint256\"},{\"internalType\":\"enum Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"enum ClaimBinding\",\"name\":\"binding\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"dueBy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"acceptedAt\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"interestRateBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"numberOfPeriodsPerYear\",\"type\":\"uint16\"}],\"internalType\":\"struct InterestConfig\",\"name\":\"interestConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"accruedInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"latestPeriodNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"protocolFeeBps\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"totalGrossInterestPaid\",\"type\":\"uint256\"}],\"internalType\":\"struct InterestComputationState\",\"name\":\"interestComputationState\",\"type\":\"tuple\"}],\"internalType\":\"struct Loan\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"}],\"name\":\"getLoanOffer\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"termLength\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"interestRateBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"numberOfPeriodsPerYear\",\"type\":\"uint16\"}],\"internalType\":\"struct InterestConfig\",\"name\":\"interestConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"loanAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"impairmentGracePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiresAt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"callbackSelector\",\"type\":\"bytes4\"}],\"internalType\":\"struct LoanRequestParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"requestedByCreditor\",\"type\":\"bool\"}],\"internalType\":\"struct LoanOffer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"}],\"name\":\"getLoanOfferMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"attachmentURI\",\"type\":\"string\"}],\"internalType\":\"struct ClaimMetadata\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"}],\"name\":\"getTotalAmountDue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remainingPrincipal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"grossInterest\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"}],\"name\":\"impairLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"isCallbackWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loanOfferCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"}],\"name\":\"markLoanAsPaid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"termLength\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"interestRateBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"numberOfPeriodsPerYear\",\"type\":\"uint16\"}],\"internalType\":\"struct InterestConfig\",\"name\":\"interestConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"loanAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"impairmentGracePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiresAt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"callbackSelector\",\"type\":\"bytes4\"}],\"internalType\":\"struct LoanRequestParams\",\"name\":\"offer\",\"type\":\"tuple\"}],\"name\":\"offerLoan\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"termLength\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"interestRateBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"numberOfPeriodsPerYear\",\"type\":\"uint16\"}],\"internalType\":\"struct InterestConfig\",\"name\":\"interestConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"loanAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"impairmentGracePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiresAt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"callbackSelector\",\"type\":\"bytes4\"}],\"internalType\":\"struct LoanRequestParams\",\"name\":\"offer\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"attachmentURI\",\"type\":\"string\"}],\"internalType\":\"struct ClaimMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"offerLoanWithMetadata\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"claimId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentAmount\",\"type\":\"uint256\"}],\"name\":\"payLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"processingFeeBPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeBPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"protocolFeeTokenWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"protocolFeesByToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offerId\",\"type\":\"uint256\"}],\"name\":\"rejectLoanOffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeFromCallbackWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeFromFeeTokenWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"callbackSelector\",\"type\":\"bytes4\"}],\"name\":\"setPaidLoanCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_processingFeeBPS\",\"type\":\"uint16\"}],\"name\":\"setProcessingFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_protocolFeeBPS\",\"type\":\"uint16\"}],\"name\":\"setProtocolFee\",\"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\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"whitelistedProtocolFeeTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAllFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"acceptLoan(uint256)\":{\"details\":\"If offer was made by creditor, debtor can accept to receive fundsIf offer was made by debtor, creditor can accept to provide funds\",\"params\":{\"offerId\":\"The ID of the loan offer to accept\"},\"returns\":{\"_0\":\"The ID of the created claim\"}},\"acceptLoanWithReceiver(uint256,address)\":{\"details\":\"Only works when debtor is accepting a creditor's offer\",\"params\":{\"offerId\":\"The ID of the loan offer to accept\",\"receiver\":\"The address that should receive the loan funds\"},\"returns\":{\"_0\":\"The ID of the created claim\"}},\"addToCallbackWhitelist(address,bytes4)\":{\"params\":{\"callbackContract\":\"The contract address to whitelist\",\"selector\":\"The function selector to whitelist for this contract\"}},\"addToFeeTokenWhitelist(address)\":{\"params\":{\"token\":\"The token address to whitelist for withdrawals\"}},\"admin()\":{\"returns\":{\"_0\":\"The address of the owner\"}},\"approve(address,uint256)\":{\"details\":\"Approves another address to transfer a specific controlled claim\",\"params\":{\"to\":\"The address to approve\",\"tokenId\":\"The claim ID to approve\"}},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens owned by an address\",\"params\":{\"owner\":\"The address to query\"},\"returns\":{\"_0\":\"The number of tokens owned\"}},\"constructor\":{\"params\":{\"_owner\":\"Address of the contract owner\",\"_processingFeeBPS\":\"Processing fee in basis points taken from loan amount on acceptance\",\"_protocolFeeBPS\":\"Protocol fee in basis points taken from interest payments\",\"bullaClaim\":\"Address of the IBullaClaim contract to delegate calls to\"}},\"getApproved(uint256)\":{\"details\":\"Returns the approved address for a token\",\"params\":{\"tokenId\":\"The token ID to query\"},\"returns\":{\"_0\":\"The approved address\"}},\"getLoan(uint256)\":{\"params\":{\"claimId\":\"The ID of the claim associated with the loan\"},\"returns\":{\"_0\":\"The loan details\"}},\"getLoanOffer(uint256)\":{\"params\":{\"offerId\":\"The ID of the loan offer\"},\"returns\":{\"_0\":\"The loan offer details\"}},\"getLoanOfferMetadata(uint256)\":{\"params\":{\"offerId\":\"The ID of the loan offer\"},\"returns\":{\"_0\":\"The metadata for the loan offer\"}},\"getTotalAmountDue(uint256)\":{\"params\":{\"claimId\":\"The ID of the loan\"},\"returns\":{\"grossInterest\":\"The current gross interest amount accrued\",\"remainingPrincipal\":\"The remaining principal amount due\"}},\"impairLoan(uint256)\":{\"params\":{\"claimId\":\"The ID of the loan to impair\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Returns whether an operator is approved for all tokens of an owner\",\"params\":{\"operator\":\"The operator address\",\"owner\":\"The owner address\"},\"returns\":{\"_0\":\"Whether the operator is approved\"}},\"isCallbackWhitelisted(address,bytes4)\":{\"params\":{\"callbackContract\":\"The contract address to check\",\"selector\":\"The function selector to check\"},\"returns\":{\"_0\":\"True if the combination is whitelisted, false otherwise\"}},\"markLoanAsPaid(uint256)\":{\"params\":{\"claimId\":\"The ID of the loan to mark as paid\"}},\"offerLoan((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4))\":{\"details\":\"If caller is creditor, creates an offer for debtor to acceptIf caller is debtor, creates a request for creditor to accept\",\"params\":{\"offer\":\"The loan offer parameters\"},\"returns\":{\"_0\":\"The ID of the created loan offer\"}},\"offerLoanWithMetadata((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4),(string,string))\":{\"params\":{\"metadata\":\"Metadata for the claim (will be used when the loan is accepted)\",\"offer\":\"The loan offer parameters\"},\"returns\":{\"_0\":\"The ID of the created loan offer\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of a token\",\"params\":{\"tokenId\":\"The token ID to query\"},\"returns\":{\"_0\":\"The owner address\"}},\"payLoan(uint256,uint256)\":{\"params\":{\"claimId\":\"The ID of the loan to pay\",\"paymentAmount\":\"The amount to pay\"}},\"rejectLoanOffer(uint256)\":{\"params\":{\"offerId\":\"The ID of the loan offer to reject\"}},\"removeFromCallbackWhitelist(address,bytes4)\":{\"params\":{\"callbackContract\":\"The contract address to remove from whitelist\",\"selector\":\"The function selector to remove from whitelist for this contract\"}},\"removeFromFeeTokenWhitelist(address)\":{\"params\":{\"token\":\"The token address to remove from withdrawal whitelist\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers a controlled claim from one address to another\",\"params\":{\"from\":\"The address to transfer from\",\"to\":\"The address to transfer to\",\"tokenId\":\"The claim ID to transfer\"}},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers a controlled claim from one address to another with data\",\"params\":{\"data\":\"Additional data to pass to the receiver\",\"from\":\"The address to transfer from\",\"to\":\"The address to transfer to\",\"tokenId\":\"The claim ID to transfer\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets approval for all controlled claims owned by the caller\",\"params\":{\"approved\":\"Whether to approve or revoke approval\",\"operator\":\"The address to set approval for\"}},\"setPaidLoanCallback(uint256,address,bytes4)\":{\"params\":{\"callbackContract\":\"The contract address to call when loan is paid\",\"callbackSelector\":\"The function selector to call on callback contract\",\"loanId\":\"The ID of the loan to set the callback for\"}},\"setProcessingFee(uint16)\":{\"params\":{\"_processingFeeBPS\":\"New processing fee in basis points\"}},\"setProtocolFee(uint16)\":{\"params\":{\"_protocolFeeBPS\":\"New protocol fee in basis points\"}},\"supportsInterface(bytes4)\":{\"params\":{\"interfaceId\":\"The interface identifier, as specified in ERC-165\"},\"returns\":{\"_0\":\"True if the contract implements interfaceId\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers a controlled claim from one address to another\",\"params\":{\"from\":\"The address to transfer from\",\"to\":\"The address to transfer to\",\"tokenId\":\"The claim ID to transfer\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"BullaFrendLendV2\",\"version\":1},\"userdoc\":{\"events\":{\"LoanPayment(uint256,uint256,uint256,uint256)\":{\"notice\":\"grossInterestPaid = interest received by creditor + protocolFee\"}},\"kind\":\"user\",\"methods\":{\"acceptLoan(uint256)\":{\"notice\":\"Allows the counterparty to accept a loan offer\"},\"acceptLoanWithReceiver(uint256,address)\":{\"notice\":\"Allows a debtor to accept a loan offer with a custom receiver address\"},\"addToCallbackWhitelist(address,bytes4)\":{\"notice\":\"Allows owner to add a callback contract and selector to the whitelist\"},\"addToFeeTokenWhitelist(address)\":{\"notice\":\"Allows owner to add a token to the withdrawal whitelist\"},\"admin()\":{\"notice\":\"Returns the admin address (owner) for interface compatibility\"},\"approve(address,uint256)\":{\"notice\":\"Only the controller can set approvals for controlled claims\"},\"getLoan(uint256)\":{\"notice\":\"Get a loan with all its details. This function will compute the interest if the loan is not paid.\"},\"getLoanOffer(uint256)\":{\"notice\":\"Get a loan offer by ID\"},\"getLoanOfferMetadata(uint256)\":{\"notice\":\"Get loan offer metadata by ID\"},\"getTotalAmountDue(uint256)\":{\"notice\":\"Get the total amount due for a loan including principal and interest. This function will compute the interest if the loan is not paid.\"},\"impairLoan(uint256)\":{\"notice\":\"Allows a creditor to impair a loan\"},\"isCallbackWhitelisted(address,bytes4)\":{\"notice\":\"Check if a callback contract and selector combination is whitelisted\"},\"markLoanAsPaid(uint256)\":{\"notice\":\"Allows a creditor to manually mark a loan as paid\"},\"offerLoan((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4))\":{\"notice\":\"Allows a user to create and offer a loan\"},\"offerLoanWithMetadata((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4),(string,string))\":{\"notice\":\"Allows a user to create and offer a loan with metadata\"},\"payLoan(uint256,uint256)\":{\"notice\":\"Pays a loan\"},\"rejectLoanOffer(uint256)\":{\"notice\":\"Allows a debtor or creditor to reject or rescind a loan offer\"},\"removeFromCallbackWhitelist(address,bytes4)\":{\"notice\":\"Allows owner to remove a callback contract and selector from the whitelist\"},\"removeFromFeeTokenWhitelist(address)\":{\"notice\":\"Allows owner to remove a token from the withdrawal whitelist\"},\"safeTransferFrom(address,address,uint256)\":{\"notice\":\"Only the controller can initiate safe transfers for controlled claims\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"notice\":\"Only the controller can initiate safe transfers for controlled claims\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Only the controller can set operator approvals for users with controlled claims\"},\"setPaidLoanCallback(uint256,address,bytes4)\":{\"notice\":\"Allows the creditor to set a paid loan callback\"},\"setProcessingFee(uint16)\":{\"notice\":\"Allows owner to set the processing fee percentage\"},\"setProtocolFee(uint16)\":{\"notice\":\"Allows owner to set the protocol fee percentage\"},\"supportsInterface(bytes4)\":{\"notice\":\"Returns true if this contract implements the interface defined by interfaceId\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Only the controller can initiate transfers for controlled claims\"},\"withdrawAllFees()\":{\"notice\":\"Allows owner to withdraw accumulated protocol fees\"}},\"notice\":\"A wrapper contract for IBullaClaim that allows both creditors to offer loans that debtors can accept, and debtors to request loans that creditors can accept\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BullaFrendLendV2.sol\":\"BullaFrendLendV2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":contracts/=src/\",\":ds-test/=lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":scripts/=scripts/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41\",\"dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L\"]},\"src/BullaClaimControllerBase.sol\":{\"keccak256\":\"0x5ff07dff82a0e534603452abeea45af8b41b92cca06b982b804feddeb5f05617\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://413294e068eafc1b286716c47d8b7031ff5b645e4e6a8430bd7022808a631b3e\",\"dweb:/ipfs/QmTagGu8Ttuaz2KARG3VxpKdTtGcZT7yw1sunP1GCWB4gU\"]},\"src/BullaFrendLendV2.sol\":{\"keccak256\":\"0x3a3d029072a4287cf5604ff38af5c5af42a356cf959bb4810a0874b96c7ec711\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://7728b84c0a87edb041279059eeb33eb6b91cf3ee3dcf95392d9d9cfc05977480\",\"dweb:/ipfs/QmP3wiS4XTnU2jRdeEtumcZ76pPG9UthSfdWvVdUUgohdh\"]},\"src/interfaces/IBullaApprovalRegistry.sol\":{\"keccak256\":\"0x5051264e404cd39b1bb622e09e3bc87049708faae9f30cf81eb68b2249d2101b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://7a864c6fc884c2756a99dd32ceef8fc70b697cb19a32029a242e12d011e66ca6\",\"dweb:/ipfs/QmTAjj1ikpjWtayHyToCUV7vrAMwpMr6RJPnC1rQStXMeZ\"]},\"src/interfaces/IBullaClaimAdmin.sol\":{\"keccak256\":\"0x4b75414685abe74b8f97b61cc313aa809849f36d90a8020a79a0dd36ea155e19\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bef7aea0ea20d23f3ebee2db71c536257d85bfa63d6e3ef274afce960b819c77\",\"dweb:/ipfs/QmXXNkXxZXzJ2WCXgQ18Wrqe56wmfUYzEcpRvbx2xX28V2\"]},\"src/interfaces/IBullaClaimCore.sol\":{\"keccak256\":\"0x7212a0195e4a672060553161b254eb775b9b8827e4f886752e23a131c4285e6f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b9ecf2c68056162595f6efbdccd669bdbed0f9f9fbc836ed08980f0b8b65ecaa\",\"dweb:/ipfs/QmVoXzmLxmPAaeLjw94HYcUTgExWVJ53B75AG7bidmZh3R\"]},\"src/interfaces/IBullaClaimV2.sol\":{\"keccak256\":\"0xf9148698b77d14bebaa53f4490a626ef53797833851c271353d341051cdde467\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bc36296c228428d8e36da9d163589d271cc99f7c775d2ee1d72dcc5760550fa9\",\"dweb:/ipfs/QmNsKbcFyVntLWk5e3CuBZzS86ENduqBUhX5z4jybkQ3zW\"]},\"src/interfaces/IBullaControllerRegistry.sol\":{\"keccak256\":\"0xe32eac36e7234902c8257b014b9d0b6e7a48b93dbbb14160f6c285546686fd67\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5c5fe3ad51e8d0a6e026b44029cb5893e98f51d4d7dbf09bdc7a6c88869bb39d\",\"dweb:/ipfs/QmU85by1dz9FDtAU3heS9KidWYhnnHFjBSD2QCjJ15L4Up\"]},\"src/interfaces/IBullaFrendLendV2.sol\":{\"keccak256\":\"0x4e370612bd6a71f33914d66b4fd66b0b4921672f5dd1cff4a3e4bbcfc5ed4813\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://35633ea0733796145a874aacd209af4e0f4986ce3ec11c67ef9e9e873e81a8f4\",\"dweb:/ipfs/QmNVEY3Xar2eRbcPNDx1X4FDiqpK65Pi7wLsM2woYuYsF6\"]},\"src/interfaces/IPermissions.sol\":{\"keccak256\":\"0x6f0f7d9cac9e03835c277b347ec925c7dc5e4ee9ff8e0f758549937e0c14c6ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fdcc19ee1756c9f3614add8821e8056f6640effb8649cd9ae951a28b912c9531\",\"dweb:/ipfs/QmPGEDWFYRHKhzFhfuzd3fzVSLi9WhLBRZmeaHyCigXfNh\"]},\"src/libraries/CompoundInterestLib.sol\":{\"keccak256\":\"0xd7b81a8298093ee733ddd907f2b52748cd1aadecc3a43651a7ccacbd8467b1d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3d71f703912cf0dd0597c58c79ad03fbb8e481af686f928426d20500ee8ccc64\",\"dweb:/ipfs/QmaR3jB2jGoNPiWJWEDKjCAns6yxi1gTBWb39UKBtdKU8R\"]},\"src/types/Types.sol\":{\"keccak256\":\"0xad9e54c3a2853a4f22d195846995442025834a5b872c8829c4c06fc60695f246\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9a160d76b68aaf4624c09409a297724c9093e9df0f2e41bb1d5564f430d4b936\",\"dweb:/ipfs/QmZtYySRFRErNTu4jx4y4M1szKvjGp6Pkuf3gXXPh7zJ9V\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"bullaClaim","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_protocolFeeBPS","type":"uint16"},{"internalType":"uint16","name":"_processingFeeBPS","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"type":"error","name":"CallbackFailed"},{"inputs":[],"type":"error","name":"CallbackNotWhitelisted"},{"inputs":[],"type":"error","name":"IncorrectFee"},{"inputs":[],"type":"error","name":"InvalidGracePeriod"},{"inputs":[],"type":"error","name":"InvalidProtocolFee"},{"inputs":[],"type":"error","name":"InvalidTermLength"},{"inputs":[],"type":"error","name":"LoanOfferExpired"},{"inputs":[],"type":"error","name":"LoanOfferNotFound"},{"inputs":[],"type":"error","name":"NativeTokenNotSupported"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"NotController"},{"inputs":[],"type":"error","name":"NotCreditor"},{"inputs":[],"type":"error","name":"NotCreditorOrDebtor"},{"inputs":[],"type":"error","name":"NotDebtor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"address","name":"callbackContract","type":"address","indexed":true},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":true}],"type":"event","name":"CallbackRemovedFromWhitelist","anonymous":false},{"inputs":[{"internalType":"address","name":"callbackContract","type":"address","indexed":true},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":true}],"type":"event","name":"CallbackWhitelisted","anonymous":false},{"inputs":[{"internalType":"address","name":"admin","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"FeeWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256","indexed":true},{"internalType":"uint256","name":"claimId","type":"uint256","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false},{"internalType":"uint256","name":"processingFee","type":"uint256","indexed":false},{"internalType":"struct ClaimMetadata","name":"metadata","type":"tuple","components":[{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"string","name":"attachmentURI","type":"string"}],"indexed":false}],"type":"event","name":"LoanOfferAccepted","anonymous":false},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256","indexed":true},{"internalType":"address","name":"rejectedBy","type":"address","indexed":true}],"type":"event","name":"LoanOfferRejected","anonymous":false},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256","indexed":true},{"internalType":"address","name":"offeredBy","type":"address","indexed":true},{"internalType":"struct LoanRequestParams","name":"loanOffer","type":"tuple","components":[{"internalType":"uint256","name":"termLength","type":"uint256"},{"internalType":"struct InterestConfig","name":"interestConfig","type":"tuple","components":[{"internalType":"uint16","name":"interestRateBps","type":"uint16"},{"internalType":"uint16","name":"numberOfPeriodsPerYear","type":"uint16"}]},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"address","name":"creditor","type":"address"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"impairmentGracePeriod","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"callbackSelector","type":"bytes4"}],"indexed":false},{"internalType":"struct ClaimMetadata","name":"metadata","type":"tuple","components":[{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"string","name":"attachmentURI","type":"string"}],"indexed":false}],"type":"event","name":"LoanOffered","anonymous":false},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256","indexed":true},{"internalType":"uint256","name":"grossInterestPaid","type":"uint256","indexed":false},{"internalType":"uint256","name":"principalPaid","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFee","type":"uint256","indexed":false}],"type":"event","name":"LoanPayment","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldFee","type":"uint16","indexed":false},{"internalType":"uint16","name":"newFee","type":"uint16","indexed":false}],"type":"event","name":"ProcessingFeeUpdated","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldFee","type":"uint16","indexed":false},{"internalType":"uint16","name":"newFee","type":"uint16","indexed":false}],"type":"event","name":"ProtocolFeeUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true}],"type":"event","name":"TokenAddedToFeesWhitelist","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true}],"type":"event","name":"TokenRemovedFromFeesWhitelist","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"_bullaClaim","outputs":[{"internalType":"contract IBullaClaimV2","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256"}],"stateMutability":"payable","type":"function","name":"acceptLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"payable","type":"function","name":"acceptLoanWithReceiver","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"addToCallbackWhitelist"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"addToFeeTokenWhitelist"},{"inputs":[],"stateMutability":"view","type":"function","name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function","name":"callbackWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getLoan","outputs":[{"internalType":"struct Loan","name":"","type":"tuple","components":[{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"paidAmount","type":"uint256"},{"internalType":"enum Status","name":"status","type":"uint8"},{"internalType":"enum ClaimBinding","name":"binding","type":"uint8"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"address","name":"creditor","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"dueBy","type":"uint256"},{"internalType":"uint256","name":"acceptedAt","type":"uint256"},{"internalType":"struct InterestConfig","name":"interestConfig","type":"tuple","components":[{"internalType":"uint16","name":"interestRateBps","type":"uint16"},{"internalType":"uint16","name":"numberOfPeriodsPerYear","type":"uint16"}]},{"internalType":"struct InterestComputationState","name":"interestComputationState","type":"tuple","components":[{"internalType":"uint256","name":"accruedInterest","type":"uint256"},{"internalType":"uint256","name":"latestPeriodNumber","type":"uint256"},{"internalType":"uint16","name":"protocolFeeBps","type":"uint16"},{"internalType":"uint256","name":"totalGrossInterestPaid","type":"uint256"}]}]}]},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getLoanOffer","outputs":[{"internalType":"struct LoanOffer","name":"","type":"tuple","components":[{"internalType":"struct LoanRequestParams","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"termLength","type":"uint256"},{"internalType":"struct InterestConfig","name":"interestConfig","type":"tuple","components":[{"internalType":"uint16","name":"interestRateBps","type":"uint16"},{"internalType":"uint16","name":"numberOfPeriodsPerYear","type":"uint16"}]},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"address","name":"creditor","type":"address"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"impairmentGracePeriod","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"callbackSelector","type":"bytes4"}]},{"internalType":"bool","name":"requestedByCreditor","type":"bool"}]}]},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getLoanOfferMetadata","outputs":[{"internalType":"struct ClaimMetadata","name":"","type":"tuple","components":[{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"string","name":"attachmentURI","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTotalAmountDue","outputs":[{"internalType":"uint256","name":"remainingPrincipal","type":"uint256"},{"internalType":"uint256","name":"grossInterest","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"impairLoan"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"isCallbackWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"loanOfferCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"markLoanAsPaid"},{"inputs":[{"internalType":"struct LoanRequestParams","name":"offer","type":"tuple","components":[{"internalType":"uint256","name":"termLength","type":"uint256"},{"internalType":"struct InterestConfig","name":"interestConfig","type":"tuple","components":[{"internalType":"uint16","name":"interestRateBps","type":"uint16"},{"internalType":"uint16","name":"numberOfPeriodsPerYear","type":"uint16"}]},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"address","name":"creditor","type":"address"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"impairmentGracePeriod","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"callbackSelector","type":"bytes4"}]}],"stateMutability":"nonpayable","type":"function","name":"offerLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct LoanRequestParams","name":"offer","type":"tuple","components":[{"internalType":"uint256","name":"termLength","type":"uint256"},{"internalType":"struct InterestConfig","name":"interestConfig","type":"tuple","components":[{"internalType":"uint16","name":"interestRateBps","type":"uint16"},{"internalType":"uint16","name":"numberOfPeriodsPerYear","type":"uint16"}]},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"address","name":"creditor","type":"address"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"impairmentGracePeriod","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"callbackSelector","type":"bytes4"}]},{"internalType":"struct ClaimMetadata","name":"metadata","type":"tuple","components":[{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"string","name":"attachmentURI","type":"string"}]}],"stateMutability":"nonpayable","type":"function","name":"offerLoanWithMetadata","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"},{"internalType":"uint256","name":"paymentAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"payLoan"},{"inputs":[],"stateMutability":"view","type":"function","name":"processingFeeBPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"protocolFeeBPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"protocolFeeTokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"protocolFeesByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"offerId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rejectLoanOffer"},{"inputs":[{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"removeFromCallbackWhitelist"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeFromFeeTokenWhitelist"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"uint256","name":"loanId","type":"uint256"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"callbackSelector","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"setPaidLoanCallback"},{"inputs":[{"internalType":"uint16","name":"_processingFeeBPS","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setProcessingFee"},{"inputs":[{"internalType":"uint16","name":"_protocolFeeBPS","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setProtocolFee"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"whitelistedProtocolFeeTokens","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"withdrawAllFees"}],"devdoc":{"kind":"dev","methods":{"acceptLoan(uint256)":{"details":"If offer was made by creditor, debtor can accept to receive fundsIf offer was made by debtor, creditor can accept to provide funds","params":{"offerId":"The ID of the loan offer to accept"},"returns":{"_0":"The ID of the created claim"}},"acceptLoanWithReceiver(uint256,address)":{"details":"Only works when debtor is accepting a creditor's offer","params":{"offerId":"The ID of the loan offer to accept","receiver":"The address that should receive the loan funds"},"returns":{"_0":"The ID of the created claim"}},"addToCallbackWhitelist(address,bytes4)":{"params":{"callbackContract":"The contract address to whitelist","selector":"The function selector to whitelist for this contract"}},"addToFeeTokenWhitelist(address)":{"params":{"token":"The token address to whitelist for withdrawals"}},"admin()":{"returns":{"_0":"The address of the owner"}},"approve(address,uint256)":{"details":"Approves another address to transfer a specific controlled claim","params":{"to":"The address to approve","tokenId":"The claim ID to approve"}},"balanceOf(address)":{"details":"Returns the number of tokens owned by an address","params":{"owner":"The address to query"},"returns":{"_0":"The number of tokens owned"}},"constructor":{"params":{"_owner":"Address of the contract owner","_processingFeeBPS":"Processing fee in basis points taken from loan amount on acceptance","_protocolFeeBPS":"Protocol fee in basis points taken from interest payments","bullaClaim":"Address of the IBullaClaim contract to delegate calls to"}},"getApproved(uint256)":{"details":"Returns the approved address for a token","params":{"tokenId":"The token ID to query"},"returns":{"_0":"The approved address"}},"getLoan(uint256)":{"params":{"claimId":"The ID of the claim associated with the loan"},"returns":{"_0":"The loan details"}},"getLoanOffer(uint256)":{"params":{"offerId":"The ID of the loan offer"},"returns":{"_0":"The loan offer details"}},"getLoanOfferMetadata(uint256)":{"params":{"offerId":"The ID of the loan offer"},"returns":{"_0":"The metadata for the loan offer"}},"getTotalAmountDue(uint256)":{"params":{"claimId":"The ID of the loan"},"returns":{"grossInterest":"The current gross interest amount accrued","remainingPrincipal":"The remaining principal amount due"}},"impairLoan(uint256)":{"params":{"claimId":"The ID of the loan to impair"}},"isApprovedForAll(address,address)":{"details":"Returns whether an operator is approved for all tokens of an owner","params":{"operator":"The operator address","owner":"The owner address"},"returns":{"_0":"Whether the operator is approved"}},"isCallbackWhitelisted(address,bytes4)":{"params":{"callbackContract":"The contract address to check","selector":"The function selector to check"},"returns":{"_0":"True if the combination is whitelisted, false otherwise"}},"markLoanAsPaid(uint256)":{"params":{"claimId":"The ID of the loan to mark as paid"}},"offerLoan((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4))":{"details":"If caller is creditor, creates an offer for debtor to acceptIf caller is debtor, creates a request for creditor to accept","params":{"offer":"The loan offer parameters"},"returns":{"_0":"The ID of the created loan offer"}},"offerLoanWithMetadata((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4),(string,string))":{"params":{"metadata":"Metadata for the claim (will be used when the loan is accepted)","offer":"The loan offer parameters"},"returns":{"_0":"The ID of the created loan offer"}},"owner()":{"details":"Returns the address of the current owner."},"ownerOf(uint256)":{"details":"Returns the owner of a token","params":{"tokenId":"The token ID to query"},"returns":{"_0":"The owner address"}},"payLoan(uint256,uint256)":{"params":{"claimId":"The ID of the loan to pay","paymentAmount":"The amount to pay"}},"rejectLoanOffer(uint256)":{"params":{"offerId":"The ID of the loan offer to reject"}},"removeFromCallbackWhitelist(address,bytes4)":{"params":{"callbackContract":"The contract address to remove from whitelist","selector":"The function selector to remove from whitelist for this contract"}},"removeFromFeeTokenWhitelist(address)":{"params":{"token":"The token address to remove from withdrawal whitelist"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers a controlled claim from one address to another","params":{"from":"The address to transfer from","to":"The address to transfer to","tokenId":"The claim ID to transfer"}},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers a controlled claim from one address to another with data","params":{"data":"Additional data to pass to the receiver","from":"The address to transfer from","to":"The address to transfer to","tokenId":"The claim ID to transfer"}},"setApprovalForAll(address,bool)":{"details":"Sets or unsets approval for all controlled claims owned by the caller","params":{"approved":"Whether to approve or revoke approval","operator":"The address to set approval for"}},"setPaidLoanCallback(uint256,address,bytes4)":{"params":{"callbackContract":"The contract address to call when loan is paid","callbackSelector":"The function selector to call on callback contract","loanId":"The ID of the loan to set the callback for"}},"setProcessingFee(uint16)":{"params":{"_processingFeeBPS":"New processing fee in basis points"}},"setProtocolFee(uint16)":{"params":{"_protocolFeeBPS":"New protocol fee in basis points"}},"supportsInterface(bytes4)":{"params":{"interfaceId":"The interface identifier, as specified in ERC-165"},"returns":{"_0":"True if the contract implements interfaceId"}},"transferFrom(address,address,uint256)":{"details":"Transfers a controlled claim from one address to another","params":{"from":"The address to transfer from","to":"The address to transfer to","tokenId":"The claim ID to transfer"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"acceptLoan(uint256)":{"notice":"Allows the counterparty to accept a loan offer"},"acceptLoanWithReceiver(uint256,address)":{"notice":"Allows a debtor to accept a loan offer with a custom receiver address"},"addToCallbackWhitelist(address,bytes4)":{"notice":"Allows owner to add a callback contract and selector to the whitelist"},"addToFeeTokenWhitelist(address)":{"notice":"Allows owner to add a token to the withdrawal whitelist"},"admin()":{"notice":"Returns the admin address (owner) for interface compatibility"},"approve(address,uint256)":{"notice":"Only the controller can set approvals for controlled claims"},"getLoan(uint256)":{"notice":"Get a loan with all its details. This function will compute the interest if the loan is not paid."},"getLoanOffer(uint256)":{"notice":"Get a loan offer by ID"},"getLoanOfferMetadata(uint256)":{"notice":"Get loan offer metadata by ID"},"getTotalAmountDue(uint256)":{"notice":"Get the total amount due for a loan including principal and interest. This function will compute the interest if the loan is not paid."},"impairLoan(uint256)":{"notice":"Allows a creditor to impair a loan"},"isCallbackWhitelisted(address,bytes4)":{"notice":"Check if a callback contract and selector combination is whitelisted"},"markLoanAsPaid(uint256)":{"notice":"Allows a creditor to manually mark a loan as paid"},"offerLoan((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4))":{"notice":"Allows a user to create and offer a loan"},"offerLoanWithMetadata((uint256,(uint16,uint16),uint256,address,address,string,address,uint256,uint256,address,bytes4),(string,string))":{"notice":"Allows a user to create and offer a loan with metadata"},"payLoan(uint256,uint256)":{"notice":"Pays a loan"},"rejectLoanOffer(uint256)":{"notice":"Allows a debtor or creditor to reject or rescind a loan offer"},"removeFromCallbackWhitelist(address,bytes4)":{"notice":"Allows owner to remove a callback contract and selector from the whitelist"},"removeFromFeeTokenWhitelist(address)":{"notice":"Allows owner to remove a token from the withdrawal whitelist"},"safeTransferFrom(address,address,uint256)":{"notice":"Only the controller can initiate safe transfers for controlled claims"},"safeTransferFrom(address,address,uint256,bytes)":{"notice":"Only the controller can initiate safe transfers for controlled claims"},"setApprovalForAll(address,bool)":{"notice":"Only the controller can set operator approvals for users with controlled claims"},"setPaidLoanCallback(uint256,address,bytes4)":{"notice":"Allows the creditor to set a paid loan callback"},"setProcessingFee(uint16)":{"notice":"Allows owner to set the processing fee percentage"},"setProtocolFee(uint16)":{"notice":"Allows owner to set the protocol fee percentage"},"supportsInterface(bytes4)":{"notice":"Returns true if this contract implements the interface defined by interfaceId"},"transferFrom(address,address,uint256)":{"notice":"Only the controller can initiate transfers for controlled claims"},"withdrawAllFees()":{"notice":"Allows owner to withdraw accumulated protocol fees"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","contracts/=src/","ds-test/=lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","scripts/=scripts/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":2000000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/BullaFrendLendV2.sol":"BullaFrendLendV2"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa","urls":["bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287","dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/solmate/src/utils/SafeTransferLib.sol":{"keccak256":"0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300","urls":["bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41","dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L"],"license":"AGPL-3.0-only"},"src/BullaClaimControllerBase.sol":{"keccak256":"0x5ff07dff82a0e534603452abeea45af8b41b92cca06b982b804feddeb5f05617","urls":["bzz-raw://413294e068eafc1b286716c47d8b7031ff5b645e4e6a8430bd7022808a631b3e","dweb:/ipfs/QmTagGu8Ttuaz2KARG3VxpKdTtGcZT7yw1sunP1GCWB4gU"],"license":"BUSL-1.1"},"src/BullaFrendLendV2.sol":{"keccak256":"0x3a3d029072a4287cf5604ff38af5c5af42a356cf959bb4810a0874b96c7ec711","urls":["bzz-raw://7728b84c0a87edb041279059eeb33eb6b91cf3ee3dcf95392d9d9cfc05977480","dweb:/ipfs/QmP3wiS4XTnU2jRdeEtumcZ76pPG9UthSfdWvVdUUgohdh"],"license":"BUSL-1.1"},"src/interfaces/IBullaApprovalRegistry.sol":{"keccak256":"0x5051264e404cd39b1bb622e09e3bc87049708faae9f30cf81eb68b2249d2101b","urls":["bzz-raw://7a864c6fc884c2756a99dd32ceef8fc70b697cb19a32029a242e12d011e66ca6","dweb:/ipfs/QmTAjj1ikpjWtayHyToCUV7vrAMwpMr6RJPnC1rQStXMeZ"],"license":"BUSL-1.1"},"src/interfaces/IBullaClaimAdmin.sol":{"keccak256":"0x4b75414685abe74b8f97b61cc313aa809849f36d90a8020a79a0dd36ea155e19","urls":["bzz-raw://bef7aea0ea20d23f3ebee2db71c536257d85bfa63d6e3ef274afce960b819c77","dweb:/ipfs/QmXXNkXxZXzJ2WCXgQ18Wrqe56wmfUYzEcpRvbx2xX28V2"],"license":"BUSL-1.1"},"src/interfaces/IBullaClaimCore.sol":{"keccak256":"0x7212a0195e4a672060553161b254eb775b9b8827e4f886752e23a131c4285e6f","urls":["bzz-raw://b9ecf2c68056162595f6efbdccd669bdbed0f9f9fbc836ed08980f0b8b65ecaa","dweb:/ipfs/QmVoXzmLxmPAaeLjw94HYcUTgExWVJ53B75AG7bidmZh3R"],"license":"BUSL-1.1"},"src/interfaces/IBullaClaimV2.sol":{"keccak256":"0xf9148698b77d14bebaa53f4490a626ef53797833851c271353d341051cdde467","urls":["bzz-raw://bc36296c228428d8e36da9d163589d271cc99f7c775d2ee1d72dcc5760550fa9","dweb:/ipfs/QmNsKbcFyVntLWk5e3CuBZzS86ENduqBUhX5z4jybkQ3zW"],"license":"BUSL-1.1"},"src/interfaces/IBullaControllerRegistry.sol":{"keccak256":"0xe32eac36e7234902c8257b014b9d0b6e7a48b93dbbb14160f6c285546686fd67","urls":["bzz-raw://5c5fe3ad51e8d0a6e026b44029cb5893e98f51d4d7dbf09bdc7a6c88869bb39d","dweb:/ipfs/QmU85by1dz9FDtAU3heS9KidWYhnnHFjBSD2QCjJ15L4Up"],"license":"BUSL-1.1"},"src/interfaces/IBullaFrendLendV2.sol":{"keccak256":"0x4e370612bd6a71f33914d66b4fd66b0b4921672f5dd1cff4a3e4bbcfc5ed4813","urls":["bzz-raw://35633ea0733796145a874aacd209af4e0f4986ce3ec11c67ef9e9e873e81a8f4","dweb:/ipfs/QmNVEY3Xar2eRbcPNDx1X4FDiqpK65Pi7wLsM2woYuYsF6"],"license":"GPL-2.0-or-later"},"src/interfaces/IPermissions.sol":{"keccak256":"0x6f0f7d9cac9e03835c277b347ec925c7dc5e4ee9ff8e0f758549937e0c14c6ef","urls":["bzz-raw://fdcc19ee1756c9f3614add8821e8056f6640effb8649cd9ae951a28b912c9531","dweb:/ipfs/QmPGEDWFYRHKhzFhfuzd3fzVSLi9WhLBRZmeaHyCigXfNh"],"license":"MIT"},"src/libraries/CompoundInterestLib.sol":{"keccak256":"0xd7b81a8298093ee733ddd907f2b52748cd1aadecc3a43651a7ccacbd8467b1d3","urls":["bzz-raw://3d71f703912cf0dd0597c58c79ad03fbb8e481af686f928426d20500ee8ccc64","dweb:/ipfs/QmaR3jB2jGoNPiWJWEDKjCAns6yxi1gTBWb39UKBtdKU8R"],"license":"BUSL-1.1"},"src/types/Types.sol":{"keccak256":"0xad9e54c3a2853a4f22d195846995442025834a5b872c8829c4c06fc60695f246","urls":["bzz-raw://9a160d76b68aaf4624c09409a297724c9093e9df0f2e41bb1d5564f430d4b936","dweb:/ipfs/QmZtYySRFRErNTu4jx4y4M1szKvjGp6Pkuf3gXXPh7zJ9V"],"license":"BUSL-1.1"}},"version":1},"id":88}