{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"nonpayable"},{"type":"function","name":"MIN_ORDER_SIZE","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"NATIVE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"TERMINATION_DELAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"WITHDRAW_EPOCH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_amount","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositFor","inputs":[{"name":"_account","type":"address","internalType":"address"},{"name":"_token","type":"address","internalType":"address"},{"name":"_amount","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositNative","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositNativeFor","inputs":[{"name":"_account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"_factory","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"isTerminated","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maintenanceAccrued","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maintenanceAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"maintenanceBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"pure"},{"type":"function","name":"multicall","inputs":[{"name":"data","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"payable"},{"type":"function","name":"operatorAccrued","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"operatorAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"operatorAdmin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"operatorBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"_owner","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"setOperatorAdmin","inputs":[{"name":"_newAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperatorFee","inputs":[{"name":"_recipient","type":"address","internalType":"address"},{"name":"_bps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSettleEpochCap","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_cap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setWithdrawEpochCap","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_cap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settleBatch","inputs":[{"name":"_deltas","type":"tuple[]","internalType":"struct MidribV3.SettleDelta[]","components":[{"name":"user","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"},{"name":"delta","type":"int256","internalType":"int256"}]},{"name":"_volumes","type":"tuple[]","internalType":"struct MidribV3.TokenVolume[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"grossVolume","type":"uint256","internalType":"uint256"}]},{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settleEpochCap","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"cap","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"settleFees","inputs":[{"name":"_token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settledInEpoch","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"terminate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"terminatedAt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tradeBalance","inputs":[{"name":"holder","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"usedSettleNonces","inputs":[{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"used","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedWithdrawNonces","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"used","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"_version","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"withdraw","inputs":[{"name":"_v","type":"tuple","internalType":"struct MidribV3.WithdrawalVoucher","components":[{"name":"account","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"expiry","type":"uint256","internalType":"uint256"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawEpochCap","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"cap","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdrawTerminated","inputs":[{"name":"_token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawnInEpoch","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"FeesSettled","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"maintenanceRecipient","type":"address","indexed":true,"internalType":"address"},{"name":"maintenanceAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"operatorRecipient","type":"address","indexed":true,"internalType":"address"},{"name":"operatorAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NetSettled","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"delta","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"OperatorAdminSet","inputs":[{"name":"oldAdmin","type":"address","indexed":true,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OperatorFeeSet","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"bps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"SettleEpochCapSet","inputs":[{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"cap","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Terminated","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TerminatedWithdrawal","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TokenDeposited","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint160","indexed":false,"internalType":"uint160"}],"anonymous":false},{"type":"event","name":"WithdrawEpochCapSet","inputs":[{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"cap","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"tokenContract","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"FEE_TOO_HIGH","inputs":[{"name":"totalBps","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"INSUFFICIENT_BALANCE","inputs":[{"name":"available","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint160","internalType":"uint160"}]},{"type":"error","name":"INVALID_SIGNER","inputs":[]},{"type":"error","name":"MINIMUM_ORDER_AMOUNT","inputs":[{"name":"amount","type":"uint160","internalType":"uint160"}]},{"type":"error","name":"NOT_A_CLONE","inputs":[]},{"type":"error","name":"NOT_TERMINATED","inputs":[]},{"type":"error","name":"OPERATOR_ADMIN_IS_SIGNER","inputs":[]},{"type":"error","name":"Reentrancy","inputs":[]},{"type":"error","name":"SETTLE_NONCE_ALREADY_USED","inputs":[]},{"type":"error","name":"SETTLE_NOT_CONSERVED","inputs":[]},{"type":"error","name":"SETTLE_RATE_LIMITED","inputs":[{"name":"cap","type":"uint256","internalType":"uint256"},{"name":"attempted","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TERMINATED","inputs":[]},{"type":"error","name":"TERMINATION_DELAY_PENDING","inputs":[{"name":"readyAt","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UNAUTHORIZED_CALLER","inputs":[]},{"type":"error","name":"WITHDRAW_NONCE_ALREADY_USED","inputs":[]},{"type":"error","name":"WITHDRAW_RATE_LIMITED","inputs":[{"name":"cap","type":"uint256","internalType":"uint256"},{"name":"attempted","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"WITHDRAW_VOUCHER_EXPIRED","inputs":[]},{"type":"error","name":"ZERO_ADDRESS_OPERATOR","inputs":[]},{"type":"error","name":"ZERO_ADDRESS_OPERATOR_ADMIN","inputs":[]},{"type":"error","name":"ZERO_AMOUNT","inputs":[]}],"bytecode":{"object":"0x61014060405234801561001157600080fd5b50306080524660a052606080610025610095565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81529384019290925290820152466060820152306080820181905260a09091206101005261012052506100e39050565b60408051808201909152600681526526b4b23934b160d11b602082015260606100be60036100c4565b90509091565b6060604051604081016040526001815282603001602082015392915050565b60805160a05160c05160e05161010051610120516135036101476000396000818161085f01528181610dfa0152818161176e0152611a4301526000612bd201526000612c8c01526000612c6601526000612c1601526000612bf301526135036000f3fe6080604052600436106102855760003560e01c8063719d5f8311610153578063a0cf0aea116100cb578063c45a01551161007f578063d3f82d8e11610064578063d3f82d8e146107cc578063db6b5246146107e1578063e0a273bc146107e957600080fd5b8063c45a015514610790578063d1cc9976146107b557600080fd5b8063a78842ee116100b0578063a78842ee1461071d578063ac9650d81461073d578063c41092531461075d57600080fd5b8063a0cf0aea146106e0578063a4e0c1811461070857600080fd5b8063892d16be1161012257806391a775b71161010757806391a775b71461067f5780639cd5adbe146106925780639e3bc208146106ca57600080fd5b8063892d16be146106225780638da5cb5b1461065d57600080fd5b8063719d5f8314610570578063742960c1146105955780637e122f53146105cd57806384b0196e146105fa57600080fd5b8063426aabc21161020157806354222c98116101b557806362b629f91161019a57806362b629f91461050d57806362fe8ee11461053a5780636de071571461055057600080fd5b806354222c98146104d157806354fd4d50146104f157600080fd5b80634d51462e116101e65780634d51462e146104645780634e3250cf146104915780634e5c6e4e146104b157600080fd5b8063426aabc2146103f75780634565fe4a1461042457600080fd5b80631aba2337116102585780632d2cfb661161023d5780632d2cfb66146103815780632e673446146103a157806336807d4c146103e057600080fd5b80631aba23371461034157806326ac1b1c1461036157600080fd5b806303fde2551461028a5780630c08bf88146102ac578063127effb2146102c157806319d5f0c3146102fe575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612dc6565b610809565b005b3480156102b857600080fd5b506102aa6108d2565b3480156102cd57600080fd5b506005546102e1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561030a57600080fd5b50610333610319366004612dc6565b600060208181529281526040808220909352908152205481565b6040519081526020016102f5565b34801561034d57600080fd5b506102aa61035c366004612dff565b610976565b34801561036d57600080fd5b506102aa61037c366004612e1c565b610b4e565b34801561038d57600080fd5b506102aa61039c366004612e51565b610cf9565b3480156103ad57600080fd5b506103cd60003660011981013560f090811c909103603c0135901c905090565b60405161ffff90911681526020016102f5565b3480156103ec57600080fd5b506103336201518081565b34801561040357600080fd5b50610333610412366004612dff565b60036020526000908152604090205481565b34801561043057600080fd5b5061045461043f366004612e7d565b60016020526000908152604090205460ff1681565b60405190151581526020016102f5565b34801561047057600080fd5b5061033361047f366004612dff565b600a6020526000908152604090205481565b34801561049d57600080fd5b506102aa6104ac366004612e96565b610da4565b3480156104bd57600080fd5b506102aa6104cc366004612f2a565b6110b9565b3480156104dd57600080fd5b506102aa6104ec366004612e51565b6114ee565b3480156104fd57600080fd5b50604051600381526020016102f5565b34801561051957600080fd5b50610333610528366004612dff565b60076020526000908152604090205481565b34801561054657600080fd5b50610333610e1081565b34801561055c57600080fd5b506102aa61056b366004612dff565b61158d565b34801561057c57600080fd5b503660011981013560f01c90036028013560601c6102e1565b3480156105a157600080fd5b506103336105b0366004612e51565b600460209081526000928352604080842090915290825290205481565b3480156105d957600080fd5b506103336105e8366004612dff565b60086020526000908152604090205481565b34801561060657600080fd5b5061060f6116d5565b6040516102f59796959493929190612fe9565b34801561062e57600080fd5b5061045461063d366004612e51565b600260209081526000928352604080842090915290825290205460ff1681565b34801561066957600080fd5b503660011981013560f01c90033560601c6102e1565b6102aa61068d366004612dff565b611718565b34801561069e57600080fd5b506103336106ad366004612e51565b600b60209081526000928352604080842090915290825290205481565b3480156106d657600080fd5b5061033360095481565b3480156106ec57600080fd5b506102e173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561071457600080fd5b506102e16117de565b34801561072957600080fd5b506102aa610738366004612dff565b611812565b61075061074b36600461309d565b6119c8565b6040516102f59190613114565b34801561076957600080fd5b506005546103cd9074010000000000000000000000000000000000000000900461ffff1681565b34801561079c57600080fd5b503660011981013560f01c90036014013560601c6102e1565b3480156107c157600080fd5b506009541515610454565b3480156107d857600080fd5b506103cd600a81565b6102aa6119ed565b3480156107f557600080fd5b506102aa6108043660046131dc565b611ab2565b3068929eee149b4bd2126854036108285763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156108555760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108b7576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c2338383611fa8565b3868929eee149b4bd21268555050565b6108da6117de565b6001600160a01b0316336001600160a01b031614610924576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954156109455760405163dc04be8560e01b815260040160405180910390fd5b4260095560405133907f98cd97fc1a1cc958cbd729b1bb531d4f3ea4925470bf23ea9af386640cbd07be90600090a2565b3068929eee149b4bd2126854036109955763ab143c066000526004601cfd5b3068929eee149b4bd212685560095460008190036109df576040517ff66fedd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109ee62015180836132ed565b905080421015610a32576040517f0baa86e0000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b336000908152602081815260408083206001600160a01b038716845290915281205490819003610a8e576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03881680855292528220919091557fffffffffffffffffffffffff111111111111111111111111111111111111111201610ae857610ae333826122e3565b610afc565b610afc6001600160a01b0385163383612303565b6040518181526001600160a01b0385169033907f86d30d8feddd544de8061b7fa9f3487b6a32fb331060c2d5d16855c0778b3b449060200160405180910390a35050503868929eee149b4bd212685550565b610b566117de565b6001600160a01b0316336001600160a01b031614610ba0576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008161ffff16118015610bbb57506001600160a01b038216155b15610bf2576040517fe51bf64600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008161ffff16610c1860003660011981013560f090811c909103603c0135901c905090565b61ffff16610c2691906132ed565b9050612710811115610c67576040517f5c9bdcc600000000000000000000000000000000000000000000000000000000815260048101829052602401610a29565b600580546001600160a01b0385167fffffffffffffffffffff0000000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000061ffff861690810291909117909255604051918252907fd5650eed710468f7e377b318748df27ca6d4546f13b80aa9d6eec8c9abf23faa9060200160405180910390a2505050565b610d016117de565b6001600160a01b0316336001600160a01b031614610d4b576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526003602052604090819020839055517f027fb8edad5b73929d95fbc37ccc198eef670efb352551c3a1c51870107c50ef90610d989084815260200190565b60405180910390a25050565b3068929eee149b4bd212685403610dc35763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415610df05760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e52576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316600003610e95576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a6001600160a01b0382161015610ee4576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a29565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190613300565b9050610f846001600160a01b038481169033903090861661235c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038616906370a0823190602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190613300565b6110149190613319565b6001600160a01b0380871660009081526020818152604080832093891683529290529081208054929350839290919061104e9084906132ed565b90915550506001600160a01b038085169086167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d561108b846123c3565b6040516001600160a01b03909116815260200160405180910390a350503868929eee149b4bd2126855505050565b3068929eee149b4bd2126854036110d85763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156111055760405163dc04be8560e01b815260040160405180910390fd5b6111108383836123ed565b826040013560000361114e576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826080013542111561118c576040517fcfb1238700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600061119d6020860186612dff565b6001600160a01b03168152602080820192909252604090810160009081206060870135825290925290205460ff1615611202576040517f2152b76d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260006112156020870187612dff565b6001600160a01b031681526020808201929092526040908101600090812060608801358252835290812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092558190819061127d90870187612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906112b29190612dff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808460400135111561133357806112ef85604001356123c3565b6040517ff075336700000000000000000000000000000000000000000000000000000000815260048101929092526001600160a01b03166024820152604401610a29565b6113506113466040860160208701612dff565b8560400135612535565b61135e604085013582613319565b60008061136e6020880188612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906113a39190612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168460200160208101906113f89190612dff565b6001600160a01b03160361142f5761142a604085013561141b6020870187612dff565b6001600160a01b0316906122e3565b611463565b61146361143f6020860186612dff565b604086018035906114539060208901612dff565b6001600160a01b03169190612303565b6114736040850160208601612dff565b6001600160a01b03166114896020860186612dff565b6001600160a01b03167f91fb9d98b786c57d74c099ccd2beca1739e9f6a81fb49001ca465c4b7591bbe2866040013587606001356040516114d4929190918252602082015260400190565b60405180910390a3503868929eee149b4bd2126855505050565b6114f66117de565b6001600160a01b0316336001600160a01b031614611540576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600a602052604090819020839055517f538bee6b440206c69b1feb76dd3c68c7f0e4f03dcbdac492ea06cdb38986e39c90610d989084815260200190565b60006115976117de565b9050336001600160a01b038216146115db576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661161b576040517fccd2609c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c90033560601c6001600160a01b0383160361166c576040517f0187b0a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691821790925560405190918316907f6238bd8cf686042e0573e875b5120babc506c96bf63da70f5b8fdec308feb4c290600090a35050565b7f0f00000000000000000000000000000000000000000000000000000000000000606080600080808361170661260c565b97989097965046955030945091925090565b3068929eee149b4bd2126854036117375763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156117645760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036117c6576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117cf81612652565b3868929eee149b4bd212685550565b6006546000906001600160a01b03168061180a573660011981013560f01c9003603e013560601c61180c565b805b91505090565b3068929eee149b4bd2126854036118315763ab143c066000526004601cfd5b3068929eee149b4bd21268556001600160a01b03811660009081526007602052604090205480156118b4576001600160a01b03821660008181526007602090815260408083208390553660011981013560f01c90036028013560601c835282825280832093835292905290812080548392906118ae9084906132ed565b90915550505b6001600160a01b0380831660009081526008602052604090205460055490911681158015906118eb57506001600160a01b03811615155b1561193f576001600160a01b03808516600081815260086020908152604080832083905593851682528181528382209282529190915290812080548492906119349084906132ed565b909155506119449050565b600091505b6001600160a01b0381163660011981013560f01c90036028013560601c6001600160a01b0316856001600160a01b03167f5c10360cd7c1ee27bdd881695aca458471acf57fec9bdd94efc9e11a3b5a8e2686866040516119ae929190918252602082015260400190565b60405180910390a45050503868929eee149b4bd212685550565b606034156119d557600080fd5b6119e76119e28484612784565b61281b565b92915050565b3068929eee149b4bd212685403611a0c5763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415611a395760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611a9b576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa433612652565b3868929eee149b4bd2126855565b3068929eee149b4bd212685403611ad15763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415611afe5760405163dc04be8560e01b815260040160405180910390fd5b611b0d8787878787878761282c565b60008381526001602052604090205460ff1615611b56576040517f539110c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600160208190526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790558690611bb060003660011981013560f090811c909103603c0135901c905090565b60055490915074010000000000000000000000000000000000000000900461ffff1660005b83811015611db45760008b8b83818110611bf157611bf161332c565b9050606002016020016020810190611c099190612dff565b9050600160005b83811015611c6b57826001600160a01b03168e8e83818110611c3457611c3461332c565b9050606002016020016020810190611c4c9190612dff565b6001600160a01b031603611c635760009150611c6b565b600101611c10565b5080611c78575050611dac565b600080611c868f8f866129a5565b9150915080600014611c9c57611c9c8482612a4c565b6000611ca98e8e87612b23565b90506000612710611cbe61ffff8b168461335b565b611cc89190613372565b90506000612710611cdd61ffff8b168561335b565b611ce79190613372565b9050611cfb611cf682846132ed565b612ba8565b611d04906133ad565b8514611d3c576040517f053b624b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611d70576001600160a01b03871660009081526007602052604081208054849290611d6a9084906132ed565b90915550505b8015611da4576001600160a01b03871660009081526008602052604081208054839290611d9e9084906132ed565b90915550505b505050505050505b600101611bd5565b5060005b83811015611f8f57368b8b83818110611dd357611dd361332c565b606002919091019150600090508080611def6020850185612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000206000836020016020810190611e249190612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905060008260400135611e5783612ba8565b611e6191906133e5565b90506000811215611ea8576040517ff07533670000000000000000000000000000000000000000000000000000000081526004810183905260006024820152604401610a29565b80600080611eb96020870187612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000206000856020016020810190611eee9190612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550826020016020810190611f259190612dff565b6001600160a01b0316611f3b6020850185612dff565b6001600160a01b03167fcb92bc64cc5c68703b92c9fcf4b3a37a69be04873e614837f8aeacfa8589e8f58560400135604051611f7991815260200190565b60405180910390a3505050806001019050611db8565b505050503868929eee149b4bd212685550505050505050565b806001600160a01b0316600003611feb576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a6001600160a01b038216101561203a576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a29565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600091908416906370a0823190602401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190613300565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613300565b9050826001600160a01b031682101561219f576040517ff0753367000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0384166024820152604401610a29565b6121b96001600160a01b038581169087903090871661235c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038716906370a0823190602401602060405180830381865afa15801561221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223f9190613300565b6122499190613319565b6001600160a01b03808816600090815260208181526040808320938a168352929052908120805492935083929091906122839084906132ed565b90915550506001600160a01b038086169087167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d56122c0846123c3565b6040516001600160a01b03909116815260200160405180910390a3505050505050565b60003860003884865af16122ff5763b12d13eb6000526004601cfd5b5050565b81601452806034526fa9059cbb00000000000000000000000060005260206000604460106000875af1806001600051141661235157803d853b151710612351576390b8ec186000526004601cfd5b506000603452505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af180600160005114166123b457803d873b1517106123b457637939f4246000526004601cfd5b50600060605260405250505050565b60007401000000000000000000000000000000000000000082106123e9576123e9612bc2565b5090565b60007f232a4ef2241135df893cd0d3f880df0ff65115b1f538078c78353f91a830770261241d6020860186612dff565b61242d6040870160208801612dff565b6040805160208101949094526001600160a01b03928316848201529116606083810191909152908601356080838101919091529086013560a083015285013560c082015260e001604051602081830303815290604052805190602001209050600061249782612bd0565b905060006124ca826020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b905060006124d9828787612ce8565b90503660011981013560f01c90033560601c6001600160a01b0382161461252c576040517f6cbfd82c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b6000612543610e1042613372565b6001600160a01b0384166000908152600460209081526040808320848452909152812054919250906125769084906132ed565b6001600160a01b03851660009081526003602052604090205490915080158015906125a057508082115b156125e1576040517f5e7fe40c0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610a29565b506001600160a01b039093166000908152600460209081526040808320938352929052209190915550565b60408051808201909152600681527f4d696472696200000000000000000000000000000000000000000000000000006020820152606061264c6003612d8f565b90509091565b3460000361268c576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a3410156126d2576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0334166004820152602401610a29565b6001600160a01b03811660009081526020818152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8452909152812080543492906127179084906132ed565b9091555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90506001600160a01b0382167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d5612766346123c3565b6040516001600160a01b03909116815260200160405180910390a350565b600060405190506020815281816020015280604001808360051b808684378201808515612803575b835187018035602082018337600038823584305af46127ce573d6000873e3d86fd5b5082810384523d815260209384019381013d6000823e60003d8201523d01601f0167ffffffffffffffe01690508184106127ac575b806040528485820360401b1794505050505092915050565b8060401c8167ffffffffffffffff16f35b60007ff6472b53c7bf87555bdd86e4ea01a600b45c6783d98b337d089a5cb0e2af8e8d888860405160200161286292919061340d565b60405160208183030381529060405280519060200120878760405160200161288b929190613480565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091526080810185905260a001604051602081830303815290604052805190602001209050600061290382612bd0565b90506000612936826020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b90506000612945828787612ce8565b90503660011981013560f01c90033560601c6001600160a01b03821614612998576040517f6cbfd82c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b60008060005b84811015612a4357836001600160a01b03168686838181106129cf576129cf61332c565b90506060020160200160208101906129e79190612dff565b6001600160a01b031603612a3b576000868683818110612a0957612a0961332c565b9050606002016040013590508084612a2191906133e5565b93506000811315612a3957612a3681846132ed565b92505b505b6001016129ab565b50935093915050565b6000612a5a610e1042613372565b6001600160a01b0384166000908152600b6020908152604080832084845290915281205491925090612a8d9084906132ed565b6001600160a01b0385166000908152600a60205260409020549091508015801590612ab757508082115b15612af8576040517fe5235f570000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610a29565b506001600160a01b039093166000908152600b60209081526040808320938352929052209190915550565b6000805b83811015612b9b57826001600160a01b0316858583818110612b4b57612b4b61332c565b612b619260206040909202019081019150612dff565b6001600160a01b031603612b9357848482818110612b8157612b8161332c565b90506040020160200135915050612ba1565b600101612b27565b50600090505b9392505050565b6000808212612bb5575090565b612bbd612bc2565b919050565b6335278d126000526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416612cc35750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60006040518260408114612d045760418114612d445750612d79565b60208581013560ff81901c601b0190915285356040527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16606052612d56565b604085013560001a6020526040856040375b5084600052602060016080600060015afa5191506000606052806040523d612d87575b638baa579f6000526004601cfd5b509392505050565b6060604051604081016040526001815282603001602082015392915050565b6001600160a01b0381168114612dc357600080fd5b50565b60008060408385031215612dd957600080fd5b8235612de481612dae565b91506020830135612df481612dae565b809150509250929050565b600060208284031215612e1157600080fd5b8135612ba181612dae565b60008060408385031215612e2f57600080fd5b8235612e3a81612dae565b9150602083013561ffff81168114612df457600080fd5b60008060408385031215612e6457600080fd5b8235612e6f81612dae565b946020939093013593505050565b600060208284031215612e8f57600080fd5b5035919050565b600080600060608486031215612eab57600080fd5b8335612eb681612dae565b92506020840135612ec681612dae565b91506040840135612ed681612dae565b809150509250925092565b60008083601f840112612ef357600080fd5b50813567ffffffffffffffff811115612f0b57600080fd5b602083019150836020828501011115612f2357600080fd5b9250929050565b600080600083850360c0811215612f4057600080fd5b60a0811215612f4e57600080fd5b5083925060a084013567ffffffffffffffff811115612f6c57600080fd5b612f7886828701612ee1565b9497909650939450505050565b6000815180845260005b81811015612fab57602081850181015186830182015201612f8f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061302460e0830189612f85565b82810360408401526130368189612f85565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561308c57835183526020938401939092019160010161306e565b50909b9a5050505050505050505050565b600080602083850312156130b057600080fd5b823567ffffffffffffffff8111156130c757600080fd5b8301601f810185136130d857600080fd5b803567ffffffffffffffff8111156130ef57600080fd5b8560208260051b840101111561310457600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561318b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613176858351612f85565b9450602093840193919091019060010161313c565b50929695505050505050565b60008083601f8401126131a957600080fd5b50813567ffffffffffffffff8111156131c157600080fd5b6020830191508360208260061b8501011115612f2357600080fd5b60008060008060008060006080888a0312156131f757600080fd5b873567ffffffffffffffff81111561320e57600080fd5b8801601f81018a1361321f57600080fd5b803567ffffffffffffffff81111561323657600080fd5b8a602060608302840101111561324b57600080fd5b60209182019850965088013567ffffffffffffffff81111561326c57600080fd5b6132788a828b01613197565b90965094505060408801359250606088013567ffffffffffffffff81111561329f57600080fd5b6132ab8a828b01612ee1565b989b979a50959850939692959293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156119e7576119e76132be565b60006020828403121561331257600080fd5b5051919050565b818103818111156119e7576119e76132be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176119e7576119e76132be565b6000826133a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007f800000000000000000000000000000000000000000000000000000000000000082036133de576133de6132be565b5060000390565b8082018281126000831280158216821582161715613405576134056132be565b505092915050565b6020808252810182905260008360408301825b8581101561347657823561343381612dae565b6001600160a01b03168252602083013561344c81612dae565b6001600160a01b031660208301526040838101359083015260609283019290910190600101613420565b5095945050505050565b6020808252810182905260008360408301825b858110156134765782356134a681612dae565b6001600160a01b03168252602083810135908301526040928301929091019060010161349356fea2646970667358221220688b537cb5ccc738a74927cab709798a62733fa591b8fae4e5271e0ca080fd3664736f6c63430008220033","sourceMap":"3585:39021:15:-:0;;;10121:53;;;;;;;;;-1:-1:-1;3066:4:9;3028:45;;3100:13;3083:30;;3124:18;;3240:23;:21;:23::i;:::-;3340:22;;;;;;;3454:25;;;;;;;;;3489:26;;;;3525:32;;;;3737:4;3731:11;;3802:16;3792:27;;3843:12;;;3836:30;;;;3890:12;;;3883:33;3954:9;3947:4;3940:12;;3933:31;4002:9;3995:4;3988:12;;3981:31;;;4055:4;4042:18;;;4093:34;;10145:22:15;;-1:-1:-1;3585:39021:15;;-1:-1:-1;3585:39021:15;42068:318;42283:16;;;;;;;;;;;;-1:-1:-1;;;42283:16:15;;;;42181:19;42361:18;4286:1;42361:16;:18::i;:::-;42350:29;;42068:318;;:::o;214:334:18:-;264:21;378:4;372:11;416:4;413:1;409:12;403:4;396:26;445:1;442;435:12;504:1;500:2;496:10;489:4;486:1;482:12;474:33;531:1;214:334;-1:-1:-1;;214:334:18:o;3585:39021:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102855760003560e01c8063719d5f8311610153578063a0cf0aea116100cb578063c45a01551161007f578063d3f82d8e11610064578063d3f82d8e146107cc578063db6b5246146107e1578063e0a273bc146107e957600080fd5b8063c45a015514610790578063d1cc9976146107b557600080fd5b8063a78842ee116100b0578063a78842ee1461071d578063ac9650d81461073d578063c41092531461075d57600080fd5b8063a0cf0aea146106e0578063a4e0c1811461070857600080fd5b8063892d16be1161012257806391a775b71161010757806391a775b71461067f5780639cd5adbe146106925780639e3bc208146106ca57600080fd5b8063892d16be146106225780638da5cb5b1461065d57600080fd5b8063719d5f8314610570578063742960c1146105955780637e122f53146105cd57806384b0196e146105fa57600080fd5b8063426aabc21161020157806354222c98116101b557806362b629f91161019a57806362b629f91461050d57806362fe8ee11461053a5780636de071571461055057600080fd5b806354222c98146104d157806354fd4d50146104f157600080fd5b80634d51462e116101e65780634d51462e146104645780634e3250cf146104915780634e5c6e4e146104b157600080fd5b8063426aabc2146103f75780634565fe4a1461042457600080fd5b80631aba2337116102585780632d2cfb661161023d5780632d2cfb66146103815780632e673446146103a157806336807d4c146103e057600080fd5b80631aba23371461034157806326ac1b1c1461036157600080fd5b806303fde2551461028a5780630c08bf88146102ac578063127effb2146102c157806319d5f0c3146102fe575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612dc6565b610809565b005b3480156102b857600080fd5b506102aa6108d2565b3480156102cd57600080fd5b506005546102e1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561030a57600080fd5b50610333610319366004612dc6565b600060208181529281526040808220909352908152205481565b6040519081526020016102f5565b34801561034d57600080fd5b506102aa61035c366004612dff565b610976565b34801561036d57600080fd5b506102aa61037c366004612e1c565b610b4e565b34801561038d57600080fd5b506102aa61039c366004612e51565b610cf9565b3480156103ad57600080fd5b506103cd60003660011981013560f090811c909103603c0135901c905090565b60405161ffff90911681526020016102f5565b3480156103ec57600080fd5b506103336201518081565b34801561040357600080fd5b50610333610412366004612dff565b60036020526000908152604090205481565b34801561043057600080fd5b5061045461043f366004612e7d565b60016020526000908152604090205460ff1681565b60405190151581526020016102f5565b34801561047057600080fd5b5061033361047f366004612dff565b600a6020526000908152604090205481565b34801561049d57600080fd5b506102aa6104ac366004612e96565b610da4565b3480156104bd57600080fd5b506102aa6104cc366004612f2a565b6110b9565b3480156104dd57600080fd5b506102aa6104ec366004612e51565b6114ee565b3480156104fd57600080fd5b50604051600381526020016102f5565b34801561051957600080fd5b50610333610528366004612dff565b60076020526000908152604090205481565b34801561054657600080fd5b50610333610e1081565b34801561055c57600080fd5b506102aa61056b366004612dff565b61158d565b34801561057c57600080fd5b503660011981013560f01c90036028013560601c6102e1565b3480156105a157600080fd5b506103336105b0366004612e51565b600460209081526000928352604080842090915290825290205481565b3480156105d957600080fd5b506103336105e8366004612dff565b60086020526000908152604090205481565b34801561060657600080fd5b5061060f6116d5565b6040516102f59796959493929190612fe9565b34801561062e57600080fd5b5061045461063d366004612e51565b600260209081526000928352604080842090915290825290205460ff1681565b34801561066957600080fd5b503660011981013560f01c90033560601c6102e1565b6102aa61068d366004612dff565b611718565b34801561069e57600080fd5b506103336106ad366004612e51565b600b60209081526000928352604080842090915290825290205481565b3480156106d657600080fd5b5061033360095481565b3480156106ec57600080fd5b506102e173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561071457600080fd5b506102e16117de565b34801561072957600080fd5b506102aa610738366004612dff565b611812565b61075061074b36600461309d565b6119c8565b6040516102f59190613114565b34801561076957600080fd5b506005546103cd9074010000000000000000000000000000000000000000900461ffff1681565b34801561079c57600080fd5b503660011981013560f01c90036014013560601c6102e1565b3480156107c157600080fd5b506009541515610454565b3480156107d857600080fd5b506103cd600a81565b6102aa6119ed565b3480156107f557600080fd5b506102aa6108043660046131dc565b611ab2565b3068929eee149b4bd2126854036108285763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156108555760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108b7576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c2338383611fa8565b3868929eee149b4bd21268555050565b6108da6117de565b6001600160a01b0316336001600160a01b031614610924576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954156109455760405163dc04be8560e01b815260040160405180910390fd5b4260095560405133907f98cd97fc1a1cc958cbd729b1bb531d4f3ea4925470bf23ea9af386640cbd07be90600090a2565b3068929eee149b4bd2126854036109955763ab143c066000526004601cfd5b3068929eee149b4bd212685560095460008190036109df576040517ff66fedd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109ee62015180836132ed565b905080421015610a32576040517f0baa86e0000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b336000908152602081815260408083206001600160a01b038716845290915281205490819003610a8e576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03881680855292528220919091557fffffffffffffffffffffffff111111111111111111111111111111111111111201610ae857610ae333826122e3565b610afc565b610afc6001600160a01b0385163383612303565b6040518181526001600160a01b0385169033907f86d30d8feddd544de8061b7fa9f3487b6a32fb331060c2d5d16855c0778b3b449060200160405180910390a35050503868929eee149b4bd212685550565b610b566117de565b6001600160a01b0316336001600160a01b031614610ba0576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008161ffff16118015610bbb57506001600160a01b038216155b15610bf2576040517fe51bf64600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008161ffff16610c1860003660011981013560f090811c909103603c0135901c905090565b61ffff16610c2691906132ed565b9050612710811115610c67576040517f5c9bdcc600000000000000000000000000000000000000000000000000000000815260048101829052602401610a29565b600580546001600160a01b0385167fffffffffffffffffffff0000000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000061ffff861690810291909117909255604051918252907fd5650eed710468f7e377b318748df27ca6d4546f13b80aa9d6eec8c9abf23faa9060200160405180910390a2505050565b610d016117de565b6001600160a01b0316336001600160a01b031614610d4b576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526003602052604090819020839055517f027fb8edad5b73929d95fbc37ccc198eef670efb352551c3a1c51870107c50ef90610d989084815260200190565b60405180910390a25050565b3068929eee149b4bd212685403610dc35763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415610df05760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e52576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316600003610e95576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a6001600160a01b0382161015610ee4576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a29565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190613300565b9050610f846001600160a01b038481169033903090861661235c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038616906370a0823190602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190613300565b6110149190613319565b6001600160a01b0380871660009081526020818152604080832093891683529290529081208054929350839290919061104e9084906132ed565b90915550506001600160a01b038085169086167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d561108b846123c3565b6040516001600160a01b03909116815260200160405180910390a350503868929eee149b4bd2126855505050565b3068929eee149b4bd2126854036110d85763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156111055760405163dc04be8560e01b815260040160405180910390fd5b6111108383836123ed565b826040013560000361114e576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826080013542111561118c576040517fcfb1238700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600061119d6020860186612dff565b6001600160a01b03168152602080820192909252604090810160009081206060870135825290925290205460ff1615611202576040517f2152b76d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260006112156020870187612dff565b6001600160a01b031681526020808201929092526040908101600090812060608801358252835290812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092558190819061127d90870187612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906112b29190612dff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808460400135111561133357806112ef85604001356123c3565b6040517ff075336700000000000000000000000000000000000000000000000000000000815260048101929092526001600160a01b03166024820152604401610a29565b6113506113466040860160208701612dff565b8560400135612535565b61135e604085013582613319565b60008061136e6020880188612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906113a39190612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168460200160208101906113f89190612dff565b6001600160a01b03160361142f5761142a604085013561141b6020870187612dff565b6001600160a01b0316906122e3565b611463565b61146361143f6020860186612dff565b604086018035906114539060208901612dff565b6001600160a01b03169190612303565b6114736040850160208601612dff565b6001600160a01b03166114896020860186612dff565b6001600160a01b03167f91fb9d98b786c57d74c099ccd2beca1739e9f6a81fb49001ca465c4b7591bbe2866040013587606001356040516114d4929190918252602082015260400190565b60405180910390a3503868929eee149b4bd2126855505050565b6114f66117de565b6001600160a01b0316336001600160a01b031614611540576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600a602052604090819020839055517f538bee6b440206c69b1feb76dd3c68c7f0e4f03dcbdac492ea06cdb38986e39c90610d989084815260200190565b60006115976117de565b9050336001600160a01b038216146115db576040517fe15e56c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661161b576040517fccd2609c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c90033560601c6001600160a01b0383160361166c576040517f0187b0a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691821790925560405190918316907f6238bd8cf686042e0573e875b5120babc506c96bf63da70f5b8fdec308feb4c290600090a35050565b7f0f00000000000000000000000000000000000000000000000000000000000000606080600080808361170661260c565b97989097965046955030945091925090565b3068929eee149b4bd2126854036117375763ab143c066000526004601cfd5b3068929eee149b4bd2126855600954156117645760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036117c6576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117cf81612652565b3868929eee149b4bd212685550565b6006546000906001600160a01b03168061180a573660011981013560f01c9003603e013560601c61180c565b805b91505090565b3068929eee149b4bd2126854036118315763ab143c066000526004601cfd5b3068929eee149b4bd21268556001600160a01b03811660009081526007602052604090205480156118b4576001600160a01b03821660008181526007602090815260408083208390553660011981013560f01c90036028013560601c835282825280832093835292905290812080548392906118ae9084906132ed565b90915550505b6001600160a01b0380831660009081526008602052604090205460055490911681158015906118eb57506001600160a01b03811615155b1561193f576001600160a01b03808516600081815260086020908152604080832083905593851682528181528382209282529190915290812080548492906119349084906132ed565b909155506119449050565b600091505b6001600160a01b0381163660011981013560f01c90036028013560601c6001600160a01b0316856001600160a01b03167f5c10360cd7c1ee27bdd881695aca458471acf57fec9bdd94efc9e11a3b5a8e2686866040516119ae929190918252602082015260400190565b60405180910390a45050503868929eee149b4bd212685550565b606034156119d557600080fd5b6119e76119e28484612784565b61281b565b92915050565b3068929eee149b4bd212685403611a0c5763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415611a395760405163dc04be8560e01b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611a9b576040517fdd201b4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa433612652565b3868929eee149b4bd2126855565b3068929eee149b4bd212685403611ad15763ab143c066000526004601cfd5b3068929eee149b4bd212685560095415611afe5760405163dc04be8560e01b815260040160405180910390fd5b611b0d8787878787878761282c565b60008381526001602052604090205460ff1615611b56576040517f539110c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600160208190526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790558690611bb060003660011981013560f090811c909103603c0135901c905090565b60055490915074010000000000000000000000000000000000000000900461ffff1660005b83811015611db45760008b8b83818110611bf157611bf161332c565b9050606002016020016020810190611c099190612dff565b9050600160005b83811015611c6b57826001600160a01b03168e8e83818110611c3457611c3461332c565b9050606002016020016020810190611c4c9190612dff565b6001600160a01b031603611c635760009150611c6b565b600101611c10565b5080611c78575050611dac565b600080611c868f8f866129a5565b9150915080600014611c9c57611c9c8482612a4c565b6000611ca98e8e87612b23565b90506000612710611cbe61ffff8b168461335b565b611cc89190613372565b90506000612710611cdd61ffff8b168561335b565b611ce79190613372565b9050611cfb611cf682846132ed565b612ba8565b611d04906133ad565b8514611d3c576040517f053b624b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611d70576001600160a01b03871660009081526007602052604081208054849290611d6a9084906132ed565b90915550505b8015611da4576001600160a01b03871660009081526008602052604081208054839290611d9e9084906132ed565b90915550505b505050505050505b600101611bd5565b5060005b83811015611f8f57368b8b83818110611dd357611dd361332c565b606002919091019150600090508080611def6020850185612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000206000836020016020810190611e249190612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905060008260400135611e5783612ba8565b611e6191906133e5565b90506000811215611ea8576040517ff07533670000000000000000000000000000000000000000000000000000000081526004810183905260006024820152604401610a29565b80600080611eb96020870187612dff565b6001600160a01b03166001600160a01b031681526020019081526020016000206000856020016020810190611eee9190612dff565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550826020016020810190611f259190612dff565b6001600160a01b0316611f3b6020850185612dff565b6001600160a01b03167fcb92bc64cc5c68703b92c9fcf4b3a37a69be04873e614837f8aeacfa8589e8f58560400135604051611f7991815260200190565b60405180910390a3505050806001019050611db8565b505050503868929eee149b4bd212685550505050505050565b806001600160a01b0316600003611feb576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a6001600160a01b038216101561203a576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a29565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600091908416906370a0823190602401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190613300565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613300565b9050826001600160a01b031682101561219f576040517ff0753367000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0384166024820152604401610a29565b6121b96001600160a01b038581169087903090871661235c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038716906370a0823190602401602060405180830381865afa15801561221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223f9190613300565b6122499190613319565b6001600160a01b03808816600090815260208181526040808320938a168352929052908120805492935083929091906122839084906132ed565b90915550506001600160a01b038086169087167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d56122c0846123c3565b6040516001600160a01b03909116815260200160405180910390a3505050505050565b60003860003884865af16122ff5763b12d13eb6000526004601cfd5b5050565b81601452806034526fa9059cbb00000000000000000000000060005260206000604460106000875af1806001600051141661235157803d853b151710612351576390b8ec186000526004601cfd5b506000603452505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af180600160005114166123b457803d873b1517106123b457637939f4246000526004601cfd5b50600060605260405250505050565b60007401000000000000000000000000000000000000000082106123e9576123e9612bc2565b5090565b60007f232a4ef2241135df893cd0d3f880df0ff65115b1f538078c78353f91a830770261241d6020860186612dff565b61242d6040870160208801612dff565b6040805160208101949094526001600160a01b03928316848201529116606083810191909152908601356080838101919091529086013560a083015285013560c082015260e001604051602081830303815290604052805190602001209050600061249782612bd0565b905060006124ca826020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b905060006124d9828787612ce8565b90503660011981013560f01c90033560601c6001600160a01b0382161461252c576040517f6cbfd82c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b6000612543610e1042613372565b6001600160a01b0384166000908152600460209081526040808320848452909152812054919250906125769084906132ed565b6001600160a01b03851660009081526003602052604090205490915080158015906125a057508082115b156125e1576040517f5e7fe40c0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610a29565b506001600160a01b039093166000908152600460209081526040808320938352929052209190915550565b60408051808201909152600681527f4d696472696200000000000000000000000000000000000000000000000000006020820152606061264c6003612d8f565b90509091565b3460000361268c576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a3410156126d2576040517f7ccfd2ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0334166004820152602401610a29565b6001600160a01b03811660009081526020818152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8452909152812080543492906127179084906132ed565b9091555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90506001600160a01b0382167ff252e7564622d27c64805f4295d4aed7999599ad484da4eaa1377fc14df9f1d5612766346123c3565b6040516001600160a01b03909116815260200160405180910390a350565b600060405190506020815281816020015280604001808360051b808684378201808515612803575b835187018035602082018337600038823584305af46127ce573d6000873e3d86fd5b5082810384523d815260209384019381013d6000823e60003d8201523d01601f0167ffffffffffffffe01690508184106127ac575b806040528485820360401b1794505050505092915050565b8060401c8167ffffffffffffffff16f35b60007ff6472b53c7bf87555bdd86e4ea01a600b45c6783d98b337d089a5cb0e2af8e8d888860405160200161286292919061340d565b60405160208183030381529060405280519060200120878760405160200161288b929190613480565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091526080810185905260a001604051602081830303815290604052805190602001209050600061290382612bd0565b90506000612936826020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b90506000612945828787612ce8565b90503660011981013560f01c90033560601c6001600160a01b03821614612998576040517f6cbfd82c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b60008060005b84811015612a4357836001600160a01b03168686838181106129cf576129cf61332c565b90506060020160200160208101906129e79190612dff565b6001600160a01b031603612a3b576000868683818110612a0957612a0961332c565b9050606002016040013590508084612a2191906133e5565b93506000811315612a3957612a3681846132ed565b92505b505b6001016129ab565b50935093915050565b6000612a5a610e1042613372565b6001600160a01b0384166000908152600b6020908152604080832084845290915281205491925090612a8d9084906132ed565b6001600160a01b0385166000908152600a60205260409020549091508015801590612ab757508082115b15612af8576040517fe5235f570000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610a29565b506001600160a01b039093166000908152600b60209081526040808320938352929052209190915550565b6000805b83811015612b9b57826001600160a01b0316858583818110612b4b57612b4b61332c565b612b619260206040909202019081019150612dff565b6001600160a01b031603612b9357848482818110612b8157612b8161332c565b90506040020160200135915050612ba1565b600101612b27565b50600090505b9392505050565b6000808212612bb5575090565b612bbd612bc2565b919050565b6335278d126000526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416612cc35750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60006040518260408114612d045760418114612d445750612d79565b60208581013560ff81901c601b0190915285356040527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16606052612d56565b604085013560001a6020526040856040375b5084600052602060016080600060015afa5191506000606052806040523d612d87575b638baa579f6000526004601cfd5b509392505050565b6060604051604081016040526001815282603001602082015392915050565b6001600160a01b0381168114612dc357600080fd5b50565b60008060408385031215612dd957600080fd5b8235612de481612dae565b91506020830135612df481612dae565b809150509250929050565b600060208284031215612e1157600080fd5b8135612ba181612dae565b60008060408385031215612e2f57600080fd5b8235612e3a81612dae565b9150602083013561ffff81168114612df457600080fd5b60008060408385031215612e6457600080fd5b8235612e6f81612dae565b946020939093013593505050565b600060208284031215612e8f57600080fd5b5035919050565b600080600060608486031215612eab57600080fd5b8335612eb681612dae565b92506020840135612ec681612dae565b91506040840135612ed681612dae565b809150509250925092565b60008083601f840112612ef357600080fd5b50813567ffffffffffffffff811115612f0b57600080fd5b602083019150836020828501011115612f2357600080fd5b9250929050565b600080600083850360c0811215612f4057600080fd5b60a0811215612f4e57600080fd5b5083925060a084013567ffffffffffffffff811115612f6c57600080fd5b612f7886828701612ee1565b9497909650939450505050565b6000815180845260005b81811015612fab57602081850181015186830182015201612f8f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061302460e0830189612f85565b82810360408401526130368189612f85565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561308c57835183526020938401939092019160010161306e565b50909b9a5050505050505050505050565b600080602083850312156130b057600080fd5b823567ffffffffffffffff8111156130c757600080fd5b8301601f810185136130d857600080fd5b803567ffffffffffffffff8111156130ef57600080fd5b8560208260051b840101111561310457600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561318b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613176858351612f85565b9450602093840193919091019060010161313c565b50929695505050505050565b60008083601f8401126131a957600080fd5b50813567ffffffffffffffff8111156131c157600080fd5b6020830191508360208260061b8501011115612f2357600080fd5b60008060008060008060006080888a0312156131f757600080fd5b873567ffffffffffffffff81111561320e57600080fd5b8801601f81018a1361321f57600080fd5b803567ffffffffffffffff81111561323657600080fd5b8a602060608302840101111561324b57600080fd5b60209182019850965088013567ffffffffffffffff81111561326c57600080fd5b6132788a828b01613197565b90965094505060408801359250606088013567ffffffffffffffff81111561329f57600080fd5b6132ab8a828b01612ee1565b989b979a50959850939692959293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156119e7576119e76132be565b60006020828403121561331257600080fd5b5051919050565b818103818111156119e7576119e76132be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176119e7576119e76132be565b6000826133a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007f800000000000000000000000000000000000000000000000000000000000000082036133de576133de6132be565b5060000390565b8082018281126000831280158216821582161715613405576134056132be565b505092915050565b6020808252810182905260008360408301825b8581101561347657823561343381612dae565b6001600160a01b03168252602083013561344c81612dae565b6001600160a01b031660208301526040838101359083015260609283019290910190600101613420565b5095945050505050565b6020808252810182905260008360408301825b858110156134765782356134a681612dae565b6001600160a01b03168252602083810135908301526040928301929091019060010161349356fea2646970667358221220688b537cb5ccc738a74927cab709798a62733fa591b8fae4e5271e0ca080fd3664736f6c63430008220033","sourceMap":"3585:39021:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;42589:8;;;3585:39021;;;;;;;;;;;;;;;;;;;;;;42589:8;;;17155:150;;;;;;;;;;-1:-1:-1;17155:150:15;;;;;:::i;:::-;;:::i;:::-;;26217:278;;;;;;;;;;;;;:::i;6922:30::-;;;;;;;;;;-1:-1:-1;6922:30:15;;;;-1:-1:-1;;;;;6922:30:15;;;;;;-1:-1:-1;;;;;730:55:22;;;712:74;;700:2;685:18;6922:30:15;;;;;;;;5572:87;;;;;;;;;;-1:-1:-1;5572:87:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1336:25:22;;;1324:2;1309:18;5572:87:15;1190:177:22;27450:713:15;;;;;;;;;;-1:-1:-1;27450:713:15;;;;;:::i;:::-;;:::i;29434:521::-;;;;;;;;;;-1:-1:-1;29434:521:15;;;;;:::i;:::-;;:::i;23798:263::-;;;;;;;;;;-1:-1:-1;23798:263:15;;;;;:::i;:::-;;:::i;28471:96::-;;;;;;;;;;;;28518:6;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;;;3071:114;;;28557:2:15;41860:23;41847:37;41837:48;;28536:24;;28471:96;;;;;2590:6:22;2578:19;;;2560:38;;2548:2;2533:18;28471:96:15;2416:188:22;4833:52:15;;;;;;;;;;;;4877:8;4833:52;;6386:61;;;;;;;;;;-1:-1:-1;6386:61:15;;;;;:::i;:::-;;;;;;;;;;;;;;5749:59;;;;;;;;;;-1:-1:-1;5749:59:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3005:14:22;;2998:22;2980:41;;2968:2;2953:18;5749:59:15;2840:187:22;8882:59:15;;;;;;;;;;-1:-1:-1;8882:59:15;;;;;:::i;:::-;;;;;;;;;;;;;;18299:811;;;;;;;;;;-1:-1:-1;18299:811:15;;;;;:::i;:::-;;:::i;21828:1324::-;;;;;;;;;;-1:-1:-1;21828:1324:15;;;;;:::i;:::-;;:::i;24832:257::-;;;;;;;;;;-1:-1:-1;24832:257:15;;;;;:::i;:::-;;:::i;16836:89::-;;;;;;;;;;-1:-1:-1;16836:89:15;;4286:1;4629:36:22;;4617:2;4602:18;16836:89:15;4487:184:22;7614:66:15;;;;;;;;;;-1:-1:-1;7614:66:15;;;;;:::i;:::-;;;;;;;;;;;;;;4696:48;;;;;;;;;;;;4737:7;4696:48;;30354:469;;;;;;;;;;-1:-1:-1;30354:469:15;;;;;:::i;:::-;;:::i;28263:102::-;;;;;;;;;;-1:-1:-1;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;28355:2:15;699:22:0;686:36;680:4;676:47;28263:102:15;28471:96;6580:90;;;;;;;;;;-1:-1:-1;6580:90:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7686:63;;;;;;;;;;-1:-1:-1;7686:63:15;;;;;:::i;:::-;;;;;;;;;;;;;;11383:596:9;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;5962:89:15:-;;;;;;;;;;-1:-1:-1;5962:89:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16614:99;;;;;;;;;;-1:-1:-1;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;686:36;680:4;676:47;16614:99:15;28471:96;19693:139;;;;;;:::i;:::-;;:::i;9168:88::-;;;;;;;;;;-1:-1:-1;9168:88:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;8395:27;;;;;;;;;;;;;;;;5425:75;;;;;;;;;;;;5458:42;5425:75;;28881:168;;;;;;;;;;;;;:::i;37881:1088::-;;;;;;;;;;-1:-1:-1;37881:1088:15;;;;;:::i;:::-;;:::i;1622:626:10:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6958:25:15:-;;;;;;;;;;-1:-1:-1;6958:25:15;;;;;;;;;;;16272:106;;;;;;;;;;-1:-1:-1;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;16368:2:15;699:22:0;686:36;680:4;676:47;16272:106:15;28471:96;25159:94;;;;;;;;;;-1:-1:-1;25229:12:15;;:17;;25159:94;;4366:42;;;;;;;;;;;;4406:2;4366:42;;19280:122;;;:::i;33291:2812::-;;;;;;;;;;-1:-1:-1;33291:2812:15;;;;;:::i;:::-;;:::i;17155:150::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;-1:-1:-1::0;;;;;10367:6:15::2;10350:23;10358:4;10350:23:::0;10346:62:::2;;10382:26;;;;;;;;;;;;;;10346:62;17261:37:::3;17270:10;17282:6;17290:7;17261:8;:37::i;:::-;1937:10:11::0;1913:22;1906:42;17155:150:15;;:::o;26217:278::-;26275:15;:13;:15::i;:::-;-1:-1:-1;;;;;26261:29:15;:10;-1:-1:-1;;;;;26261:29:15;;26257:76;;26299:34;;;;;;;;;;;;;;26257:76;26347:12;;:17;26343:55;;26373:25;;-1:-1:-1;;;26373:25:15;;;;;;;;;;;26343:55;26423:15;26408:12;:30;26453:35;;26477:10;;26453:35;;;;;26217:278::o;27450:713::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;27539:12:15::1;::::0;27526:10:::1;27565:7:::0;;;27561:49:::1;;27581:29;;;;;;;;;;;;;;27561:49;27620:15;27638:22;4877:8;27638:2:::0;:22:::1;:::i;:::-;27620:40;;27692:7;27674:15;:25;27670:85;;;27708:47;::::0;::::1;::::0;;::::1;::::0;::::1;1336:25:22::0;;;1309:18;;27708:47:15::1;;;;;;;;27670:85;27795:10;27765:14;27782:24:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27782:32:15;::::1;::::0;;;;;;;;;27828:11;;;27824:50:::1;;27848:26;;;;;;;;;;;;;;27824:50;27897:10;27919:1;27884:24:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27884:32:15;::::1;::::0;;;;;;;:36;;;;27934:16;;27930:151:::1;;27966:34;:10;27993:6:::0;27966:26:::1;:34::i;:::-;27930:151;;;28031:39;-1:-1:-1::0;;;;;28031:19:15;::::1;28051:10;28063:6:::0;28031:19:::1;:39::i;:::-;28095:61;::::0;1336:25:22;;;-1:-1:-1;;;;;28095:61:15;::::1;::::0;28129:10:::1;::::0;28095:61:::1;::::0;1324:2:22;1309:18;28095:61:15::1;;;;;;;27516:647;;;1937:10:11::0;1913:22;1906:42;27450:713:15;:::o;29434:521::-;29528:15;:13;:15::i;:::-;-1:-1:-1;;;;;29514:29:15;:10;-1:-1:-1;;;;;29514:29:15;;29510:76;;29552:34;;;;;;;;;;;;;;29510:76;29607:1;29600:4;:8;;;:36;;;;-1:-1:-1;;;;;;29612:24:15;;;29600:36;29596:85;;;29645:36;;;;;;;;;;;;;;29596:85;29691:13;29743:4;29735:13;;29715:16;28518:6;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;;;3071:114;;;28557:2:15;41860:23;41847:37;41837:48;;28536:24;;28471:96;;29715:16;29707:25;;:41;;;;:::i;:::-;29691:57;-1:-1:-1;4552:6:15;29762:19;;29758:64;;;29790:32;;;;;;;;1336:25:22;;;1309:18;;29790:32:15;1190:177:22;29758:64:15;29832:15;:28;;-1:-1:-1;;;;;29832:28:15;;29870:18;;;;;;;;;;;;;;;;;;;;29903:45;;2560:38:22;;;29832:28:15;29903:45;;2548:2:22;2533:18;29903:45:15;;;;;;;29500:455;29434:521;;:::o;23798:263::-;23894:15;:13;:15::i;:::-;-1:-1:-1;;;;;23880:29:15;:10;-1:-1:-1;;;;;23880:29:15;;23876:76;;23918:34;;;;;;;;;;;;;;23876:76;-1:-1:-1;;;;;23962:24:15;;;;;;:16;:24;;;;;;;:31;;;24008:46;;;;;23989:4;1336:25:22;;1324:2;1309:18;;1190:177;24008:46:15;;;;;;;;23798:263;;:::o;18299:811::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;-1:-1:-1::0;;;;;10367:6:15::2;10350:23;10358:4;10350:23:::0;10346:62:::2;;10382:26;;;;;;;;;;;;;;10346:62;18466:7:::3;-1:-1:-1::0;;;;;18466:12:15::3;18477:1;18466:12:::0;18462:76:::3;;18501:26;;;;;;;;;;;;;;18462:76;4406:2;-1:-1:-1::0;;;;;18551:24:15;::::3;;18547:114;;;18598:52;::::0;::::3;::::0;;-1:-1:-1;;;;;730:55:22;;18598:52:15::3;::::0;::::3;712:74:22::0;685:18;;18598:52:15::3;566:226:22::0;18547:114:15::3;18695:46;::::0;;;;18735:4:::3;18695:46;::::0;::::3;712:74:22::0;18671:21:15::3;::::0;-1:-1:-1;;;;;18695:31:15;::::3;::::0;::::3;::::0;685:18:22;;18695:46:15::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18671:70:::0;-1:-1:-1;18751:59:15::3;-1:-1:-1::0;;;;;18751:23:15;;::::3;::::0;18775:10:::3;::::0;18795:4:::3;::::0;18751:59;::::3;:23;:59::i;:::-;18839:46;::::0;;;;18879:4:::3;18839:46;::::0;::::3;712:74:22::0;18820:16:15::3;::::0;18888:13;;-1:-1:-1;;;;;18839:31:15;::::3;::::0;::::3;::::0;685:18:22;;18839:46:15::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;-1:-1:-1::0;;;;;18979:22:15;;::::3;:12;:22:::0;;;::::3;::::0;;;;;;;:30;;::::3;::::0;;;;;;;;:42;;18820:81;;-1:-1:-1;18820:81:15;;18979:30;;:12;:42:::3;::::0;18820:81;;18979:42:::3;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;19036:67:15;;::::3;::::0;;::::3;;19082:20;:8:::0;:18:::3;:20::i;:::-;19036:67;::::0;-1:-1:-1;;;;;730:55:22;;;712:74;;700:2;685:18;19036:67:15::3;;;;;;;18452:658;;1937:10:11::0;1913:22;1906:42;18299:811:15;;;:::o;21828:1324::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;21950:40:::2;21975:2;21979:10;;21950:24;:40::i;:::-;22004:2;:9;;;22017:1;22004:14:::0;22000:53:::2;;22027:26;;;;;;;;;;;;;;22000:53;22085:2;:9;;;22067:15;:27;22063:79;;;22103:39;;;;;;;;;;;;;;22063:79;22156:18;:30;22175:10;;::::0;::::2;:2:::0;:10:::2;:::i;:::-;-1:-1:-1::0;;;;;22156:30:15::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;-1:-1:-1;22156:30:15;;;22187:8:::2;::::0;::::2;;22156:40:::0;;;;;;;;::::2;;22152:120;;;22219:42;;;;;;;;;;;;;;22152:120;22324:4;22281:18;:30;22300:10;;::::0;::::2;:2:::0;:10:::2;:::i;:::-;-1:-1:-1::0;;;;;22281:30:15::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;-1:-1:-1;22281:30:15;;;22312:8:::2;::::0;::::2;;22281:40:::0;;;;;;;:47;;;::::2;::::0;::::2;;::::0;;;::::2;::::0;;;-1:-1:-1;;;;22370:10:15::2;::::0;;::::2;22312:8:::0;22370:10:::2;:::i;:::-;-1:-1:-1::0;;;;;22357:24:15::2;-1:-1:-1::0;;;;;22357:24:15::2;;;;;;;;;;;;:34;22382:2;:8;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22357:34:15::2;-1:-1:-1::0;;;;;22357:34:15::2;;;;;;;;;;;;;22339:52;;22574:7;22562:2;:9;;;:19;22558:145;;;22650:7;22669:21;:2;:9;;;:19;:21::i;:::-;22604:88;::::0;::::2;::::0;;::::2;::::0;::::2;10824:25:22::0;;;;-1:-1:-1;;;;;10885:55:22;10865:18;;;10858:83;10797:18;;22604:88:15::2;10650:297:22::0;22558:145:15::2;22712:43;22735:8;::::0;;;::::2;::::0;::::2;;:::i;:::-;22745:2;:9;;;22712:22;:43::i;:::-;22876:19;22886:9;::::0;::::2;;22876:7:::0;:19:::2;:::i;:::-;22839:12;::::0;22852:10:::2;;::::0;::::2;:2:::0;:10:::2;:::i;:::-;-1:-1:-1::0;;;;;22839:24:15::2;-1:-1:-1::0;;;;;22839:24:15::2;;;;;;;;;;;;:34;22864:2;:8;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22839:34:15::2;-1:-1:-1::0;;;;;22839:34:15::2;;;;;;;;;;;;:56;;;;5458:42;-1:-1:-1::0;;;;;22909:18:15::2;:2;:8;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22909:18:15::2;::::0;22905:161:::2;;22943:37;22970:9;::::0;::::2;;22943:10;;::::0;::::2;22970:2:::0;22943:10:::2;:::i;:::-;-1:-1:-1::0;;;;;22943:26:15::2;::::0;::::2;:37::i;:::-;22905:161;;;23011:44;23033:10;;::::0;::::2;:2:::0;:10:::2;:::i;:::-;23045:9;::::0;::::2;::::0;::::2;::::0;23011:8:::2;::::0;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;23011:21:15::2;::::0;:44;:21:::2;:44::i;:::-;23115:8;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;23080:65:15::2;23103:10;;::::0;::::2;:2:::0;:10:::2;:::i;:::-;-1:-1:-1::0;;;;;23080:65:15::2;;23125:2;:9;;;23136:2;:8;;;23080:65;;;;;;11126:25:22::0;;;11182:2;11167:18;;11160:34;11114:2;11099:18;;10952:248;23080:65:15::2;;;;;;;;21940:1212;1937:10:11::0;1913:22;1906:42;21828:1324:15;;;:::o;24832:257::-;24926:15;:13;:15::i;:::-;-1:-1:-1;;;;;24912:29:15;:10;-1:-1:-1;;;;;24912:29:15;;24908:76;;24950:34;;;;;;;;;;;;;;24908:76;-1:-1:-1;;;;;24994:22:15;;;;;;:14;:22;;;;;;;:29;;;25038:44;;;;;25019:4;1336:25:22;;1324:2;1309:18;;1190:177;30354:469:15;30418:15;30436;:13;:15::i;:::-;30418:33;-1:-1:-1;30465:10:15;-1:-1:-1;;;;;30465:21:15;;;30461:68;;30495:34;;;;;;;;;;;;;;30461:68;-1:-1:-1;;;;;30543:23:15;;30539:78;;30575:42;;;;;;;;;;;;;;30539:78;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;686:36;680:4;676:47;-1:-1:-1;;;;;30631:30:15;;;30627:82;;30670:39;;;;;;;;;;;;;;30627:82;30719:21;:33;;;;-1:-1:-1;;;;;30719:33:15;;;;;;;;;30767:49;;30719:33;;30767:49;;;;;-1:-1:-1;;30767:49:15;30408:415;30354:469;:::o;11383:596:9:-;11721:16;11508:18;;11481:13;;;11508:18;11779:23;:21;:23::i;:::-;11383:596;;11761:41;;;-1:-1:-1;11822:13:9;;-1:-1:-1;11873:4:9;;-1:-1:-1;11383:596:9;;-1:-1:-1;11383:596:9;:::o;19693:139:15:-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;-1:-1:-1::0;;;;;10367:6:15::2;10350:23;10358:4;10350:23:::0;10346:62:::2;;10382:26;;;;;;;;;;;;;;10346:62;19801:24:::3;19816:8;19801:14;:24::i;:::-;1937:10:11::0;1913:22;1906:42;19693:139:15;:::o;28881:168::-;28960:21;;28927:7;;-1:-1:-1;;;;;28960:21:15;;28998:44;;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;29039:2:15;699:22:0;686:36;680:4;676:47;28998:44:15;;;29018:3;28998:44;28991:51;;;28881:168;:::o;37881:1088::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;-1:-1:-1;;;;;37968:26:15;::::1;37949:16;37968:26:::0;;;:18:::1;:26;::::0;;;;;38008:13;;38004:371:::1;;-1:-1:-1::0;;;;;38037:26:15;::::1;38066:1;38037:26:::0;;;:18:::1;:26;::::0;;;;;;;:30;;;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;28355:2:15;699:22:0;686:36;680:4;676:47;38310:34:15;;;;;;;;:42;;;;;;;;;:54;;38356:8;;38066:1;38310:54:::1;::::0;38356:8;;38310:54:::1;:::i;:::-;::::0;;;-1:-1:-1;;38004:371:15::1;-1:-1:-1::0;;;;;38403:23:15;;::::1;38385:15;38403:23:::0;;;:15:::1;:23;::::0;;;;;38460:15:::1;::::0;38403:23;;38460:15:::1;38660:12:::0;;;::::1;::::0;:43:::1;;-1:-1:-1::0;;;;;;38676:27:15;::::1;::::0;::::1;38660:43;38656:203;;;-1:-1:-1::0;;;;;38719:23:15;;::::1;38745:1;38719:23:::0;;;:15:::1;:23;::::0;;;;;;;:27;;;38760;;::::1;::::0;;;;;;;;:35;;;;;;;;;;:46;;38799:7;;38745:1;38760:46:::1;::::0;38799:7;;38760:46:::1;:::i;:::-;::::0;;;-1:-1:-1;38656:203:15::1;::::0;-1:-1:-1;38656:203:15::1;;38847:1;38837:11;;38656:203;-1:-1:-1::0;;;;;38874:88:15;::::1;3151:14:0::0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;28355:2:15;699:22:0;686:36;680:4;676:47;-1:-1:-1;;;;;38874:88:15::1;38899:6;-1:-1:-1::0;;;;;38874:88:15::1;;38929:8;38954:7;38874:88;;;;;;11126:25:22::0;;;11182:2;11167:18;;11160:34;11114:2;11099:18;;10952:248;38874:88:15::1;;;;;;;;37939:1030;;;1937:10:11::0;1913:22;1906:42;37881:1088:15;:::o;1622:626:10:-;1696:14;2069:9;:14;2065:28;;2085:8;;;2065:28;2201:40;2224:16;2235:4;;2224:10;:16::i;:::-;2201:22;:40::i;:::-;1622:626;;;;:::o;19280:122:15:-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;-1:-1:-1::0;;;;;10367:6:15::2;10350:23;10358:4;10350:23:::0;10346:62:::2;;10382:26;;;;;;;;;;;;;;10346:62;19369:26:::3;19384:10;19369:14;:26::i;:::-;1937:10:11::0;1913:22;1906:42;19280:122:15:o;33291:2812::-;1635:9:11;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;10681:12:15::1;::::0;:17;10677:55:::1;;10707:25;;-1:-1:-1::0;;;10707:25:15::1;;;;;;;;;;;10677:55;33504:57:::2;33523:7;;33532:8;;33542:6;33550:10;;33504:18;:57::i;:::-;33575:24;::::0;;;:16:::2;:24;::::0;;;;;::::2;;33571:102;;;33622:40;;;;;;;;;;;;;;33571:102;33682:24;::::0;;;33709:4:::2;33682:24;::::0;;;;;;:31;;;::::2;::::0;;::::2;::::0;;33738:7;;33776:16:::2;28518:6:::0;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;;;3071:114;;;28557:2:15;41860:23;41847:37;41837:48;;28536:24;;28471:96;;33776:16:::2;33816:11;::::0;33762:30;;-1:-1:-1;33816:11:15;;::::2;;;33802;34171:1171;34191:3;34187:1;:7;34171:1171;;;34215:13;34231:7;;34239:1;34231:10;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;:::-;34215:32:::0;-1:-1:-1;34278:4:15::2;34261:14;34296:176;34316:1;34312;:5;34296:176;;;34366:5;-1:-1:-1::0;;;;;34346:25:15::2;:7;;34354:1;34346:10;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34346:25:15::2;::::0;34342:116:::2;;34407:5;34395:17;;34434:5;;34342:116;34319:3;;34296:176;;;;34490:9;34485:24;;34501:8;;;;34485:24;34525:10;34537:16:::0;34557:28:::2;34570:7;;34579:5;34557:12;:28::i;:::-;34524:61;;;;34603:8;34615:1;34603:13;34599:58;;34618:39;34641:5;34648:8;34618:22;:39::i;:::-;34672:19;34694:27;34705:8;;34715:5;34694:10;:27::i;:::-;34672:49:::0;-1:-1:-1;34735:16:15::2;4552:6;34755:18;34754:34;34755:18:::0;::::2;34672:49:::0;34755:18:::2;:::i;:::-;34754:34;;;;:::i;:::-;34735:53:::0;-1:-1:-1;34802:15:15::2;4552:6;34821:18;34820:34;34821:18:::0;::::2;:11:::0;:18:::2;:::i;:::-;34820:34;;;;:::i;:::-;34802:52:::0;-1:-1:-1;35120:31:15::2;35121:18;34802:52:::0;35121:8;:18:::2;:::i;:::-;35120:29;:31::i;:::-;35119:32;;;:::i;:::-;35112:3;:39;35108:87;;35160:35;;;;;;;;;;;;;;35108:87;35214:13:::0;;35210:56:::2;;-1:-1:-1::0;;;;;35229:25:15;::::2;;::::0;;;:18:::2;:25;::::0;;;;:37;;35258:8;;35229:25;:37:::2;::::0;35258:8;;35229:37:::2;:::i;:::-;::::0;;;-1:-1:-1;;35210:56:15::2;35284:12:::0;;35280:51:::2;;-1:-1:-1::0;;;;;35298:22:15;::::2;;::::0;;;:15:::2;:22;::::0;;;;:33;;35324:7;;35298:22;:33:::2;::::0;35324:7;;35298:33:::2;:::i;:::-;::::0;;;-1:-1:-1;;35280:51:15::2;34201:1141;;;;;;;34171:1171;34196:3;;34171:1171;;;;35440:9;35435:662;35455:3;35451:1;:7;35435:662;;;35479:22;35504:7;;35512:1;35504:10;;;;;;;:::i;:::-;;;::::0;;;::::2;::::0;-1:-1:-1;35528:11:15::2;::::0;-1:-1:-1;35528:11:15;;35555:6:::2;;::::0;::::2;35504:10:::0;35555:6:::2;:::i;:::-;-1:-1:-1::0;;;;;35542:20:15::2;-1:-1:-1::0;;;;;35542:20:15::2;;;;;;;;;;;;:29;35563:1;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35542:29:15::2;-1:-1:-1::0;;;;;35542:29:15::2;;;;;;;;;;;;;35528:43;;35813:11;35844:1;:7;;;35827:14;:3;:12;:14::i;:::-;:24;;;;:::i;:::-;35813:38;;35876:1;35869:4;:8;35865:95;;;35904:41;::::0;::::2;::::0;;::::2;::::0;::::2;10824:25:22::0;;;35943:1:15::2;10865:18:22::0;;;10858:83;10797:18;;35904:41:15::2;10650:297:22::0;35865:95:15::2;36013:4:::0;35973:12:::2;::::0;35986:6:::2;;::::0;::::2;:1:::0;:6:::2;:::i;:::-;-1:-1:-1::0;;;;;35973:20:15::2;-1:-1:-1::0;;;;;35973:20:15::2;;;;;;;;;;;;:29;35994:1;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35973:29:15::2;-1:-1:-1::0;;;;;35973:29:15::2;;;;;;;;;;;;:45;;;;36069:1;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36037:49:15::2;36061:6;;::::0;::::2;:1:::0;:6:::2;:::i;:::-;-1:-1:-1::0;;;;;36037:49:15::2;;36078:1;:7;;;36037:49;;;;1336:25:22::0;;1324:2;1309:18;;1190:177;36037:49:15::2;;;;;;;;35465:632;;;35460:3;;;;;35435:662;;;;33494:2609;;;1937:10:11::0;1913:22;1906:42;33291:2812:15;;;;;;;:::o;11517:1492::-;11646:7;-1:-1:-1;;;;;11646:12:15;11657:1;11646:12;11642:76;;11681:26;;;;;;;;;;;;;;11642:76;4406:2;-1:-1:-1;;;;;11789:24:15;;;11785:114;;;11836:52;;;;;-1:-1:-1;;;;;730:55:22;;11836:52:15;;;712:74:22;685:18;;11836:52:15;566:226:22;11785:114:15;11966:40;;;;;-1:-1:-1;;;;;730:55:22;;;11966:40:15;;;712:74:22;11948:15:15;;11966:31;;;;;;685:18:22;;11966:40:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12082:46;;;;;12122:4;12082:46;;;712:74:22;11948:58:15;;-1:-1:-1;12058:21:15;;-1:-1:-1;;;;;12082:31:15;;;;;685:18:22;;12082:46:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12058:70;;12219:7;-1:-1:-1;;;;;12209:17:15;:7;:17;12205:169;;;12289:74;;;;;;;;10824:25:22;;;-1:-1:-1;;;;;10885:55:22;;10865:18;;;10858:83;10797:18;;12289:74:15;10650:297:22;12205:169:15;12429:56;-1:-1:-1;;;;;12429:23:15;;;;12453:7;;12470:4;;12429:56;;:23;:56::i;:::-;12564:46;;;;;12604:4;12564:46;;;712:74:22;12545:16:15;;12613:13;;-1:-1:-1;;;;;12564:31:15;;;;;685:18:22;;12564:46:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;-1:-1:-1;;;;;12837:21:15;;;:12;:21;;;;;;;;;;;:29;;;;;;;;;;;:41;;12545:81;;-1:-1:-1;12545:81:15;;12837:29;;:12;:41;;12545:81;;12837:41;:::i;:::-;;;;-1:-1:-1;;;;;;;12936:66:15;;;;;;;12981:20;:8;:18;:20::i;:::-;12936:66;;-1:-1:-1;;;;;730:55:22;;;712:74;;700:2;685:18;12936:66:15;;;;;;;11594:1415;;;11517:1492;;;:::o;4176:342:13:-;4378:4;4366:10;4360:4;4348:10;4340:6;4336:2;4329:5;4324:59;4314:188;;4416:10;4410:4;4403:24;4483:4;4477;4470:18;4314:188;4176:342;;:::o;13392:887::-;13555:2;13549:4;13542:16;13612:6;13606:4;13599:20;13677:34;13671:4;13664:48;13873:4;13867;13861;13855;13852:1;13845:5;13838;13833:45;13925:7;13921:1;13914:4;13908:11;13905:18;13901:32;13891:275;;14016:7;13997:16;13988:5;13976:18;13969:26;13966:48;13963:61;13953:199;;14061:10;14055:4;14048:24;14129:4;14123;14116:18;13953:199;13891:275;14192:1;14186:4;14179:15;13392:887;;;:::o;9254:1026::-;9437:4;9431:11;9502:6;9496:4;9489:20;9567:2;9561:4;9554:16;9632:4;9628:2;9624:13;9618:4;9611:27;9694:34;9688:4;9681:48;9841:4;9835;9829;9823;9820:1;9813:5;9806;9801:45;9893:7;9889:1;9882:4;9876:11;9873:18;9869:32;9859:279;;9984:7;9965:16;9956:5;9944:18;9937:26;9934:48;9931:61;9921:203;;10029:10;10023:4;10016:24;10101:4;10095;10088:18;9921:203;-1:-1:-1;10164:1:13;10158:4;10151:15;10220:4;10213:15;-1:-1:-1;;;;9254:1026:13:o;5039:142:12:-;5092:7;5120:8;5115:1;:13;5111:36;;5130:17;:15;:17::i;:::-;-1:-1:-1;5172:1:12;5039:142::o;40649:843:15:-;40821:18;40893:143;41054:10;;;;:2;:10;:::i;:::-;41082:8;;;;;;;;:::i;:::-;41108:9;40865:319;;;;;13040:25:22;;;;-1:-1:-1;;;;;13101:55:22;;;13081:18;;;13074:83;13193:55;;41135:8:15;13173:18:22;;;13166:83;;;;41108:9:15;;;;41161;13265:18:22;;;13258:34;;;;41135:8:15;;;;13308:19:22;;;13301:35;41161:9:15;;;13352:19:22;;;13345:35;13012:19;;40865:319:15;;;;;;;;;;;;40842:352;;;;;;40821:373;;41204:14;41221:26;41236:10;41221:14;:26::i;:::-;41204:43;;41257:28;41288:36;41317:6;13444:4:8;13437:18;13524:50;13345:14;13511:64;13627:4;13621;13611:21;;13276:409;41288:36:15;41257:67;;41334:14;41351:55;41373:20;41395:10;;41351:21;:55::i;:::-;41334:72;-1:-1:-1;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;686:36;680:4;676:47;-1:-1:-1;;;;;41420:27:15;;;41416:69;;41456:29;;;;;;;;;;;;;;41416:69;40755:737;;;;40649:843;;;:::o;14413:391::-;14497:13;14513:32;4737:7;14513:15;:32;:::i;:::-;-1:-1:-1;;;;;14570:24:15;;14555:12;14570:24;;;:16;:24;;;;;;;;:31;;;;;;;;;14497:48;;-1:-1:-1;14555:12:15;14570:41;;14604:7;;14570:41;:::i;:::-;-1:-1:-1;;;;;14635:24:15;;14621:11;14635:24;;;:16;:24;;;;;;14555:56;;-1:-1:-1;14673:8:15;;;;;:22;;;14692:3;14685:4;:10;14673:22;14669:80;;;14704:45;;;;;;;;11126:25:22;;;11167:18;;;11160:34;;;11099:18;;14704:45:15;10952:248:22;14669:80:15;-1:-1:-1;;;;;;14759:24:15;;;;;;;:16;:24;;;;;;;;:31;;;;;;;:38;;;;-1:-1:-1;14413:391:15:o;42068:318::-;42283:16;;;;;;;;;;;;;;;;;42181:19;42361:18;4286:1;42361:16;:18::i;:::-;42350:29;;42068:318;;:::o;13315:486::-;13380:9;13393:1;13380:14;13376:78;;13417:26;;;;;;;;;;;;;;13376:78;4406:2;13467:9;:26;13463:127;;;13516:63;;;;;-1:-1:-1;;;;;13567:9:15;730:55:22;13516:63:15;;;712:74:22;685:18;;13516:63:15;566:226:22;13463:127:15;-1:-1:-1;;;;;13667:22:15;;:12;:22;;;;;;;;;;;5458:42;13667:30;;;;;;;:43;;13701:9;;13667:12;:43;;13701:9;;13667:43;:::i;:::-;;;;-1:-1:-1;5458:42:15;;-1:-1:-1;;;;;;13726:68:15;;;13772:21;:9;:19;:21::i;:::-;13726:68;;-1:-1:-1;;;;;730:55:22;;;712:74;;700:2;685:18;13726:68:15;;;;;;;13315:486;:::o;2458:1909:10:-;2527:15;2637:4;2631:11;2620:22;;2671:4;2662:7;2655:21;2716:11;2706:7;2700:4;2696:18;2689:39;2760:7;2754:4;2750:18;2790:1;2822:11;2819:1;2815:19;2876:3;2863:11;2860:1;2847:33;2900:11;;;2949:1252;;;;2982:1205;3048:1;3042:8;3029:11;3025:26;3115:1;3102:15;3095:4;3092:1;3088:12;3085:1;3072:46;3263:4;3251:10;3247:1;3234:15;3231:1;3220:9;3213:5;3200:68;3190:310;;3403:16;3397:4;3388:7;3373:47;3461:16;3452:7;3445:33;3190:310;-1:-1:-1;3531:9:10;;;3521:20;;3685:16;3675:27;;3571:4;3567:12;;;;3732;;3789:16;3783:4;3732:12;3765:41;4073:1;4054:16;4047:24;;4040:35;3974:16;3967:24;3993:4;3963:35;4000:18;3959:60;;-1:-1:-1;4148:10:10;;;2982:1205;4138:31;2982:1205;4227:1;4221:4;4214:15;4302:7;4291;4288:1;4284:15;4280:2;4276:24;4273:37;4262:48;;;;;;2458:1909;;;;:::o;5510:221::-;5706:7;5702:2;5698:16;5688:7;5668:18;5664:32;5657:58;39587:847:15;39841:18;39913:78;40030:7;;40019:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40009:30;;;;;;40078:8;;40067:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;40057:31;;40067:20;40057:31;;;;39885:241;;;15552:25:22;;;;15593:18;;15586:34;;;;15636:18;;;15629:34;;;;15679:18;;;15672:34;;;15524:19;;39885:241:15;;;;;;;;;;;;39862:274;;;;;;39841:295;;40146:14;40163:26;40178:10;40163:14;:26::i;:::-;40146:43;;40199:28;40230:36;40259:6;13444:4:8;13437:18;13524:50;13345:14;13511:64;13627:4;13621;13611:21;;13276:409;40230:36:15;40199:67;;40276:14;40293:55;40315:20;40337:10;;40293:21;:55::i;:::-;40276:72;-1:-1:-1;3151:14:0;-1:-1:-1;;3147:22:0;;3134:36;3128:4;3124:47;3071:114;;686:36;680:4;676:47;-1:-1:-1;;;;;40362:27:15;;;40358:69;;40398:29;;;;;;;;;;;;;;40358:69;39775:659;;;;39587:847;;;;;;;:::o;36493:536::-;36610:10;36622:16;36659:9;36654:369;36670:18;;;36654:369;;;36733:6;-1:-1:-1;;;;;36713:26:15;:7;;36721:1;36713:10;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36713:26:15;;36709:304;;36759:8;36770:7;;36778:1;36770:10;;;;;;;:::i;:::-;;;;;;:16;;;36759:27;;36811:1;36804:8;;;;;:::i;:::-;;;36973:1;36969;:5;36965:33;;;36976:22;36996:1;36976:22;;:::i;:::-;;;36965:33;36741:272;36709:304;36690:3;;36654:369;;;;36493:536;;;;;;:::o;15243:387::-;15329:13;15345:32;4737:7;15345:15;:32;:::i;:::-;-1:-1:-1;;;;;15402:22:15;;15387:12;15402:22;;;:14;:22;;;;;;;;:29;;;;;;;;;15329:48;;-1:-1:-1;15387:12:15;15402:41;;15434:9;;15402:41;:::i;:::-;-1:-1:-1;;;;;15467:22:15;;15453:11;15467:22;;;:14;:22;;;;;;15387:56;;-1:-1:-1;15503:8:15;;;;;:22;;;15522:3;15515:4;:10;15503:22;15499:78;;;15534:43;;;;;;;;11126:25:22;;;11167:18;;;11160:34;;;11099:18;;15534:43:15;10952:248:22;15499:78:15;-1:-1:-1;;;;;;15587:22:15;;;;;;;:14;:22;;;;;;;;:29;;;;;;;:36;;;;-1:-1:-1;15243:387:15:o;37164:265::-;37256:7;37280:9;37275:130;37291:19;;;37275:130;;;37356:6;-1:-1:-1;;;;;37335:27:15;:8;;37344:1;37335:11;;;;;;;:::i;:::-;:17;;;:11;;;;;:17;;;;-1:-1:-1;37335:17:15;:::i;:::-;-1:-1:-1;;;;;37335:27:15;;37331:63;;37371:8;;37380:1;37371:11;;;;;;;:::i;:::-;;;;;;:23;;;37364:30;;;;;37331:63;37312:3;;37275:130;;;;37421:1;37414:8;;37164:265;;;;;;:::o;22875:140:12:-;22927:6;22962:1;22956;22949:14;22945:36;;-1:-1:-1;22979:1:12;22875:140::o;22945:36::-;22991:17;:15;:17::i;:::-;22875:140;;;:::o;23502:290::-;23691:10;23685:4;23678:24;23771:4;23765;23758:18;6666:885:9;6975:22;13508:11;13649:9;13646:25;13463:14;13619:9;13616:28;13612:60;7011:73;;-1:-1:-1;12939:4:9;12933:11;;13000:16;12990:27;;12777:15;13044:4;13037:12;;13030:31;12820:18;13095:12;;;13088:33;;;;13155:9;13148:4;13141:12;;13134:31;13199:9;13192:4;13185:12;;13178:31;13248:4;13235:18;;7011:73;7218:18;7212:4;7205:32;7284:6;7278:4;7271:20;7348:10;7342:4;7335:24;7424:4;7418;7408:21;7398:31;;7533:1;7527:4;7520:15;6666:885;;;:::o;4336:1373:8:-;4448:14;4565:4;4559:11;4717:16;4755:2;4750:297;;;;5069:2;5064:204;;;;5295:8;;;4750:297;4825:4;4803:27;;;4790:41;4873:3;4869:12;;;4883:2;4865:21;4852:35;;;4929:30;;4923:4;4916:44;5002:18;;4996:4;4989:32;4750:297;;5064:204;5150:4;5132:16;5128:27;5115:41;5112:1;5107:50;5101:4;5094:64;5224:4;5206:16;5200:4;5187:42;4710:595;;5335:4;5329;5322:18;5412:4;5406;5400;5394;5391:1;5384:5;5373:44;5367:51;5357:61;;5448:1;5442:4;5435:15;5506:1;5500:4;5493:15;5653:16;5672:5;5650:29;;4606:10;4600:4;4593:24;4672:4;4666;4659:18;4544:1149;4548:24;4336:1373;;;;;:::o;214:334:18:-;264:21;378:4;372:11;416:4;413:1;409:12;403:4;396:26;445:1;442;435:12;504:1;500:2;496:10;489:4;486:1;482:12;474:33;531:1;214:334;-1:-1:-1;;214:334:18:o;14:154:22:-;-1:-1:-1;;;;;93:5:22;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:388::-;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:31;401:5;376:31;:::i;:::-;426:5;-1:-1:-1;483:2:22;468:18;;455:32;496:33;455:32;496:33;:::i;:::-;548:7;538:17;;;173:388;;;;;:::o;1372:247::-;1431:6;1484:2;1472:9;1463:7;1459:23;1455:32;1452:52;;;1500:1;1497;1490:12;1452:52;1539:9;1526:23;1558:31;1583:5;1558:31;:::i;1624:415::-;1691:6;1699;1752:2;1740:9;1731:7;1727:23;1723:32;1720:52;;;1768:1;1765;1758:12;1720:52;1807:9;1794:23;1826:31;1851:5;1826:31;:::i;:::-;1876:5;-1:-1:-1;1933:2:22;1918:18;;1905:32;1981:6;1968:20;;1956:33;;1946:61;;2003:1;2000;1993:12;2044:367;2112:6;2120;2173:2;2161:9;2152:7;2148:23;2144:32;2141:52;;;2189:1;2186;2179:12;2141:52;2228:9;2215:23;2247:31;2272:5;2247:31;:::i;:::-;2297:5;2375:2;2360:18;;;;2347:32;;-1:-1:-1;;;2044:367:22:o;2609:226::-;2668:6;2721:2;2709:9;2700:7;2696:23;2692:32;2689:52;;;2737:1;2734;2727:12;2689:52;-1:-1:-1;2782:23:22;;2609:226;-1:-1:-1;2609:226:22:o;3032:529::-;3109:6;3117;3125;3178:2;3166:9;3157:7;3153:23;3149:32;3146:52;;;3194:1;3191;3184:12;3146:52;3233:9;3220:23;3252:31;3277:5;3252:31;:::i;:::-;3302:5;-1:-1:-1;3359:2:22;3344:18;;3331:32;3372:33;3331:32;3372:33;:::i;:::-;3424:7;-1:-1:-1;3483:2:22;3468:18;;3455:32;3496:33;3455:32;3496:33;:::i;:::-;3548:7;3538:17;;;3032:529;;;;;:::o;3566:347::-;3617:8;3627:6;3681:3;3674:4;3666:6;3662:17;3658:27;3648:55;;3699:1;3696;3689:12;3648:55;-1:-1:-1;3722:20:22;;3765:18;3754:30;;3751:50;;;3797:1;3794;3787:12;3751:50;3834:4;3826:6;3822:17;3810:29;;3886:3;3879:4;3870:6;3862;3858:19;3854:30;3851:39;3848:59;;;3903:1;3900;3893:12;3848:59;3566:347;;;;;:::o;3918:564::-;4034:6;4042;4050;4094:9;4085:7;4081:23;4124:3;4120:2;4116:12;4113:32;;;4141:1;4138;4131:12;4113:32;4165:3;4161:2;4157:12;4154:32;;;4182:1;4179;4172:12;4154:32;;4205:9;4195:19;;4265:3;4254:9;4250:19;4237:33;4293:18;4285:6;4282:30;4279:50;;;4325:1;4322;4315:12;4279:50;4364:58;4414:7;4405:6;4394:9;4390:22;4364:58;:::i;:::-;3918:564;;4441:8;;-1:-1:-1;4338:84:22;;-1:-1:-1;;;;3918:564:22:o;4676:459::-;4718:3;4756:5;4750:12;4783:6;4778:3;4771:19;4808:1;4818:139;4832:6;4829:1;4826:13;4818:139;;;4940:4;4925:13;;;4921:24;;4915:31;4895:11;;;4891:22;;4884:63;4847:12;4818:139;;;4822:3;5002:1;4995:4;4986:6;4981:3;4977:16;4973:27;4966:38;5124:4;5054:66;5049:2;5041:6;5037:15;5033:88;5028:3;5024:98;5020:109;5013:116;;;4676:459;;;;:::o;5140:1314::-;5537:66;5529:6;5525:79;5514:9;5507:98;5641:3;5636:2;5625:9;5621:18;5614:31;5488:4;5668:46;5709:3;5698:9;5694:19;5686:6;5668:46;:::i;:::-;5762:9;5754:6;5750:22;5745:2;5734:9;5730:18;5723:50;5796:33;5822:6;5814;5796:33;:::i;:::-;5860:2;5845:18;;5838:34;;;-1:-1:-1;;;;;5909:55:22;;5903:3;5888:19;;5881:84;5996:3;5981:19;;5974:35;;;6046:22;;;6040:3;6025:19;;6018:51;6118:13;;6140:22;;;6190:2;6216:15;;;;-1:-1:-1;6178:15:22;;;;-1:-1:-1;6259:169:22;6273:6;6270:1;6267:13;6259:169;;;6334:13;;6322:26;;6377:2;6403:15;;;;6368:12;;;;6295:1;6288:9;6259:169;;;-1:-1:-1;6445:3:22;;5140:1314;-1:-1:-1;;;;;;;;;;;5140:1314:22:o;6459:621::-;6556:6;6564;6617:2;6605:9;6596:7;6592:23;6588:32;6585:52;;;6633:1;6630;6623:12;6585:52;6673:9;6660:23;6706:18;6698:6;6695:30;6692:50;;;6738:1;6735;6728:12;6692:50;6761:22;;6814:4;6806:13;;6802:27;-1:-1:-1;6792:55:22;;6843:1;6840;6833:12;6792:55;6883:2;6870:16;6909:18;6901:6;6898:30;6895:50;;;6941:1;6938;6931:12;6895:50;6994:7;6989:2;6979:6;6976:1;6972:14;6968:2;6964:23;6960:32;6957:45;6954:65;;;7015:1;7012;7005:12;6954:65;7046:2;7038:11;;;;;7068:6;;-1:-1:-1;6459:621:22;-1:-1:-1;;;6459:621:22:o;7085:839::-;7245:4;7293:2;7282:9;7278:18;7323:2;7312:9;7305:21;7346:6;7381;7375:13;7412:6;7404;7397:22;7450:2;7439:9;7435:18;7428:25;;7512:2;7502:6;7499:1;7495:14;7484:9;7480:30;7476:39;7462:53;;7550:2;7542:6;7538:15;7571:1;7581:314;7595:6;7592:1;7589:13;7581:314;;;7684:66;7672:9;7664:6;7660:22;7656:95;7651:3;7644:108;7775:40;7808:6;7799;7793:13;7775:40;:::i;:::-;7765:50;-1:-1:-1;7850:2:22;7873:12;;;;7838:15;;;;;7617:1;7610:9;7581:314;;;-1:-1:-1;7912:6:22;;7085:839;-1:-1:-1;;;;;;7085:839:22:o;7929:387::-;8012:8;8022:6;8076:3;8069:4;8061:6;8057:17;8053:27;8043:55;;8094:1;8091;8084:12;8043:55;-1:-1:-1;8117:20:22;;8160:18;8149:30;;8146:50;;;8192:1;8189;8182:12;8146:50;8229:4;8221:6;8217:17;8205:29;;8289:3;8282:4;8272:6;8269:1;8265:14;8257:6;8253:27;8249:38;8246:47;8243:67;;;8306:1;8303;8296:12;8321:1452;8534:6;8542;8550;8558;8566;8574;8582;8635:3;8623:9;8614:7;8610:23;8606:33;8603:53;;;8652:1;8649;8642:12;8603:53;8692:9;8679:23;8725:18;8717:6;8714:30;8711:50;;;8757:1;8754;8747:12;8711:50;8780:22;;8833:4;8825:13;;8821:27;-1:-1:-1;8811:55:22;;8862:1;8859;8852:12;8811:55;8902:2;8889:16;8928:18;8920:6;8917:30;8914:50;;;8960:1;8957;8950:12;8914:50;9018:7;9011:4;9003;8995:6;8991:17;8987:2;8983:26;8979:37;8976:50;8973:70;;;9039:1;9036;9029:12;8973:70;9070:4;9062:13;;;;-1:-1:-1;9094:6:22;-1:-1:-1;9138:20:22;;9125:34;9184:18;9171:32;;9168:52;;;9216:1;9213;9206:12;9168:52;9255:92;9339:7;9328:8;9317:9;9313:24;9255:92;:::i;:::-;9366:8;;-1:-1:-1;9229:118:22;-1:-1:-1;;9470:2:22;9455:18;;9442:32;;-1:-1:-1;9551:4:22;9536:20;;9523:34;9582:18;9569:32;;9566:52;;;9614:1;9611;9604:12;9566:52;9653:60;9705:7;9694:8;9683:9;9679:24;9653:60;:::i;:::-;8321:1452;;;;-1:-1:-1;8321:1452:22;;-1:-1:-1;8321:1452:22;;;;9627:86;;-1:-1:-1;;;8321:1452:22:o;9778:184::-;9830:77;9827:1;9820:88;9927:4;9924:1;9917:15;9951:4;9948:1;9941:15;9967:125;10032:9;;;10053:10;;;10050:36;;;10066:18;;:::i;10328:184::-;10398:6;10451:2;10439:9;10430:7;10426:23;10422:32;10419:52;;;10467:1;10464;10457:12;10419:52;-1:-1:-1;10490:16:22;;10328:184;-1:-1:-1;10328:184:22:o;10517:128::-;10584:9;;;10605:11;;;10602:37;;;10619:18;;:::i;11205:184::-;11257:77;11254:1;11247:88;11354:4;11351:1;11344:15;11378:4;11375:1;11368:15;11394:168;11467:9;;;11498;;11515:15;;;11509:22;;11495:37;11485:71;;11536:18;;:::i;11567:274::-;11607:1;11633;11623:189;;11668:77;11665:1;11658:88;11769:4;11766:1;11759:15;11797:4;11794:1;11787:15;11623:189;-1:-1:-1;11826:9:22;;11567:274::o;11846:191::-;11881:3;11912:66;11905:5;11902:77;11899:103;;11982:18;;:::i;:::-;-1:-1:-1;12022:1:22;12018:13;;11846:191::o;12042:216::-;12106:9;;;12134:11;;;12081:3;12164:9;;12192:10;;12188:19;;12217:10;;12209:19;;12185:44;12182:70;;;12232:18;;:::i;:::-;12182:70;;12042:216;;;;:::o;13391:1029::-;13651:2;13663:21;;;13636:18;;13719:22;;;13603:4;13798:6;13772:2;13757:18;;13603:4;13832:562;13846:6;13843:1;13840:13;13832:562;;;13921:6;13908:20;13941:31;13966:5;13941:31;:::i;:::-;-1:-1:-1;;;;;13997:54:22;13985:67;;14105:2;14093:15;;14080:29;14122:33;14080:29;14122:33;:::i;:::-;-1:-1:-1;;;;;14189:56:22;14184:2;14175:12;;14168:78;14305:2;14293:15;;;14280:29;14266:12;;;14259:51;14339:4;14367:17;;;;14330:14;;;;13868:1;13861:9;13832:562;;;-1:-1:-1;14411:3:22;13391:1029;-1:-1:-1;;;;;13391:1029:22:o;14425:891::-;14685:2;14697:21;;;14670:18;;14753:22;;;14637:4;14832:6;14806:2;14791:18;;14637:4;14866:424;14880:6;14877:1;14874:13;14866:424;;;14955:6;14942:20;14975:31;15000:5;14975:31;:::i;:::-;-1:-1:-1;;;;;15031:54:22;15019:67;;15164:2;15152:15;;;15139:29;15188:12;;;15181:29;15239:2;15265:15;;;;15230:12;;;;14902:1;14895:9;14866:424;","linkReferences":{},"immutableReferences":{"1331":[{"start":11251,"length":32}],"1333":[{"start":11286,"length":32}],"1335":[{"start":11366,"length":32}],"1337":[{"start":11404,"length":32}],"1339":[{"start":11218,"length":32}],"5391":[{"start":2143,"length":32},{"start":3578,"length":32},{"start":5998,"length":32},{"start":6723,"length":32}]}},"methodIdentifiers":{"MIN_ORDER_SIZE()":"d3f82d8e","NATIVE()":"a0cf0aea","TERMINATION_DELAY()":"36807d4c","WITHDRAW_EPOCH()":"62fe8ee1","deposit(address,uint160)":"03fde255","depositFor(address,address,uint160)":"4e3250cf","depositNative()":"db6b5246","depositNativeFor(address)":"91a775b7","eip712Domain()":"84b0196e","factory()":"c45a0155","isTerminated()":"d1cc9976","maintenanceAccrued(address)":"62b629f9","maintenanceAddress()":"719d5f83","maintenanceBps()":"2e673446","multicall(bytes[])":"ac9650d8","operatorAccrued(address)":"7e122f53","operatorAddress()":"127effb2","operatorAdmin()":"a4e0c181","operatorBps()":"c4109253","owner()":"8da5cb5b","setOperatorAdmin(address)":"6de07157","setOperatorFee(address,uint16)":"26ac1b1c","setSettleEpochCap(address,uint256)":"54222c98","setWithdrawEpochCap(address,uint256)":"2d2cfb66","settleBatch((address,address,int256)[],(address,uint256)[],uint256,bytes)":"e0a273bc","settleEpochCap(address)":"4d51462e","settleFees(address)":"a78842ee","settledInEpoch(address,uint256)":"9cd5adbe","terminate()":"0c08bf88","terminatedAt()":"9e3bc208","tradeBalance(address,address)":"19d5f0c3","usedSettleNonces(uint256)":"4565fe4a","usedWithdrawNonces(address,uint256)":"892d16be","version()":"54fd4d50","withdraw((address,address,uint256,uint256,uint256),bytes)":"4e5c6e4e","withdrawEpochCap(address)":"426aabc2","withdrawTerminated(address)":"1aba2337","withdrawnInEpoch(address,uint256)":"742960c1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.34+commit.80d5c536\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalBps\",\"type\":\"uint256\"}],\"name\":\"FEE_TOO_HIGH\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"required\",\"type\":\"uint160\"}],\"name\":\"INSUFFICIENT_BALANCE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_SIGNER\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"}],\"name\":\"MINIMUM_ORDER_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NOT_A_CLONE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NOT_TERMINATED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OPERATOR_ADMIN_IS_SIGNER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SETTLE_NONCE_ALREADY_USED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SETTLE_NOT_CONSERVED\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attempted\",\"type\":\"uint256\"}],\"name\":\"SETTLE_RATE_LIMITED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TERMINATED\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"readyAt\",\"type\":\"uint256\"}],\"name\":\"TERMINATION_DELAY_PENDING\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNAUTHORIZED_CALLER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WITHDRAW_NONCE_ALREADY_USED\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attempted\",\"type\":\"uint256\"}],\"name\":\"WITHDRAW_RATE_LIMITED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WITHDRAW_VOUCHER_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS_OPERATOR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS_OPERATOR_ADMIN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZERO_AMOUNT\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"maintenanceRecipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maintenanceAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operatorRecipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorAmount\",\"type\":\"uint256\"}],\"name\":\"FeesSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"NetSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"OperatorAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"bps\",\"type\":\"uint16\"}],\"name\":\"OperatorFeeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"SettleEpochCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Terminated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TerminatedWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"WithdrawEpochCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"MIN_ORDER_SIZE\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TERMINATION_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAW_EPOCH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"_amount\",\"type\":\"uint160\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"_amount\",\"type\":\"uint160\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"depositNativeFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTerminated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"maintenanceAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maintenanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maintenanceBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"operatorAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setOperatorAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_bps\",\"type\":\"uint16\"}],\"name\":\"setOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setSettleEpochCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setWithdrawEpochCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"internalType\":\"struct MidribV3.SettleDelta[]\",\"name\":\"_deltas\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"grossVolume\",\"type\":\"uint256\"}],\"internalType\":\"struct MidribV3.TokenVolume[]\",\"name\":\"_volumes\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"settleBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"settleEpochCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"settleFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"settledInEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"terminate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"terminatedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"tradeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"usedSettleNonces\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"used\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"usedWithdrawNonces\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"used\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"_version\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct MidribV3.WithdrawalVoucher\",\"name\":\"_v\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawEpochCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"withdrawTerminated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"withdrawnInEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aspens Technical Team\",\"details\":\"Under the optimistic shadow ledger, trading happens off-chain inside the TEE: orders never touch the chain. The contract only ever sees these fund movements \\u2014 deposits, TEE-signed net settlement (`settleBatch`), TEE-signed voucher withdrawals (`withdraw`), and fee settlement. There is no on-chain order machinery (no open / fill / lock / cancel, no ERC-7683 settler conformance, no Permit2).Immutable-args layout (packed, set by {MidribFactory.createInstance}), by byte offset: owner/signer at 0 (20), factory at 20 (20), maintenanceAddress at 40 (20), maintenanceBps at 60 (uint16, 2), operatorAdmin at 62 (20). The maintenance fee (Aspens-controlled) is baked in immutably for this instance; the operator fee (stack-controlled) lives in mutable storage, set by `operatorAdmin`. `operatorAdmin` also gates the per-epoch withdrawal and settlement caps and `terminate()`. It can never be the TEE signer: `MidribFactory.createInstance` and `setOperatorAdmin` both refuse that pairing, so the caps that bound a compromised TEE are never raisable by it.Token compatibility assumptions: This contract is only safe to use against ERC-20 tokens that satisfy ALL of the following. Markets must be configured against compliant tokens; the contract does NOT detect or refuse non-compliant ones. - Standard `transfer` / `transferFrom` semantics: the sender's balance drops by exactly the transfer amount, with no re-entrant or opportunistically-reverting transfer hooks. - No fee-on-transfer behavior. The `balanceBefore` / `balanceAfter` reconciliation in `_deposit` assumes the received amount equals the transferred amount. - No rebasing / share-based balance model. Balances must be stable between reads. - No transfer blocklists that can lock a user's funds after deposit. Token gating happens off-chain at the arborter / matching-engine market-config layer. See the SDK README \\\"Token Assumptions\\\" section and the admin-console Add-Token tooltip.The chain's NATIVE asset (ETH/FLR) is additionally supported as a first-class balance under the `NATIVE` sentinel key: deposited via `depositNative`/`depositNativeFor` (payable), withdrawn by the same TEE voucher flow (paid out as raw value), and settled/fee-skimmed by `settleBatch`/`settleFees` exactly like any token address.\",\"errors\":{\"FEE_TOO_HIGH(uint256)\":[{\"details\":\"A fee (maintenance alone, or maintenance + operator combined) exceeded DENOMINATOR (100%). `totalBps` is the rejected total.\"}],\"INSUFFICIENT_BALANCE(uint256,uint160)\":[{\"details\":\"A balance is insufficient for the requested movement. `available` is the balance on hand; `required` the amount the caller asked for.\"}],\"INVALID_SIGNER()\":[{\"details\":\"A TEE-signed payload (settleBatch / withdrawal voucher) did not recover to the instance owner (the TEE).\"}],\"MINIMUM_ORDER_AMOUNT(uint160)\":[{\"details\":\"A deposit was below `MIN_ORDER_SIZE` (the dust guard). `amount` is the rejected value.\"}],\"NOT_A_CLONE()\":[{\"details\":\"A deposit was attempted on the shared implementation contract rather than on a factory-minted clone. The implementation reads its owner from calldata the caller controls, so funds held there could be withdrawn by anyone; it must never custody anything.\"}],\"NOT_TERMINATED()\":[{\"details\":\"`withdrawTerminated` was called before the instance was `terminate()`d. The permissionless, voucher-free reclaim path only opens after termination.\"}],\"OPERATOR_ADMIN_IS_SIGNER()\":[{\"details\":\"An operator admin equal to the instance's TEE signer was supplied (`createInstance` / `setOperatorAdmin`). The admin gates the caps that bound the TEE, so it must be a key the TEE does not hold.\"}],\"Reentrancy()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SETTLE_NONCE_ALREADY_USED()\":[{\"details\":\"A `settleBatch` nonce was already consumed (replay).\"}],\"SETTLE_NOT_CONSERVED()\":[{\"details\":\"A `settleBatch`'s per-token net deltas did not sum to exactly the negated contract-computed fee (would create or destroy value).\"}],\"SETTLE_RATE_LIMITED(uint256,uint256)\":[{\"details\":\"A `settleBatch` would credit more of a token in the current epoch than its settlement cap allows. `attempted` is the resulting cumulative epoch total of positive deltas.\"}],\"TERMINATED()\":[{\"details\":\"A trade operation (deposit / `settleBatch` / voucher `withdraw`) was called after the instance was `terminate()`d, or `terminate()` was called a second time. Once terminated, the only fund movement left is `withdrawTerminated`.\"}],\"TERMINATION_DELAY_PENDING(uint256)\":[{\"details\":\"`withdrawTerminated` was called inside `TERMINATION_DELAY` of `terminate()`. `readyAt` is the first timestamp at which it succeeds.\"}],\"UNAUTHORIZED_CALLER()\":[{\"details\":\"An owner/admin-gated instance function was called by a non-owner.\"}],\"WITHDRAW_NONCE_ALREADY_USED()\":[{\"details\":\"A withdrawal voucher's `(account, nonce)` pair was already consumed (replay).\"}],\"WITHDRAW_RATE_LIMITED(uint256,uint256)\":[{\"details\":\"A withdrawal would exceed the per-token per-epoch cap (a TEE-bug blast-radius backstop). `attempted` is the resulting cumulative epoch total.\"}],\"WITHDRAW_VOUCHER_EXPIRED()\":[{\"details\":\"A withdrawal voucher was submitted after its `expiry`.\"}],\"ZERO_ADDRESS_OPERATOR()\":[{\"details\":\"A non-zero operator fee was set with a zero recipient.\"}],\"ZERO_ADDRESS_OPERATOR_ADMIN()\":[{\"details\":\"A zero address was supplied for the operator admin.\"}],\"ZERO_AMOUNT()\":[{\"details\":\"A deposit or withdrawal amount was zero.\"}]},\"events\":{\"FeesSettled(address,address,uint256,address,uint256)\":{\"details\":\"Emitted by `settleFees`: accrued maintenance + operator fees for a token paid out to their respective recipients' `tradeBalance`.\"},\"NetSettled(address,address,int256)\":{\"details\":\"Emitted per account in a `settleBatch`: net change applied to `tradeBalance[user][tokenContract]` (off-chain shadow-ledger net settlement).\"},\"OperatorAdminSet(address,address)\":{\"details\":\"Emitted when an instance's operator admin (the stack-admin key gating the operator fee) is rotated.\"},\"OperatorFeeSet(address,uint16)\":{\"details\":\"Emitted when an instance's operator fee (stack-admin-controlled) is set or rotated.\"},\"SettleEpochCapSet(address,uint256)\":{\"details\":\"Emitted when a token's per-epoch settlement cap is set on an instance. `cap == 0` means unlimited. Mirrors the Solana `SettleEpochCapSet` event.\"},\"Terminated(address)\":{\"details\":\"Emitted once when the instance is `terminate()`d (the venue-teardown kill switch). `caller` is the operator admin that flipped it. After this, all trade operations revert and, once `TERMINATION_DELAY` has passed, only `withdrawTerminated` moves funds.\"},\"TerminatedWithdrawal(address,address,uint256)\":{\"details\":\"Emitted on a voucher-free reclaim via `withdrawTerminated`: `account` pulled its full on-chain `tradeBalance` of `tokenContract` after termination.\"},\"TokenDeposited(address,address,uint160)\":{\"details\":\"Emitted when a token is deposited into the Midrib contract\"},\"WithdrawEpochCapSet(address,uint256)\":{\"details\":\"Emitted when a token's per-epoch withdrawal cap is set on an instance. `cap == 0` means unlimited. Mirrors the Solana `WithdrawEpochCapSet` event so the admin surface is auditable from the logs on both chains.\"},\"Withdrawn(address,address,uint256,uint256)\":{\"details\":\"Emitted on a TEE-voucher-authorized withdrawal. Carries the voucher `nonce` so the off-chain listener fold is idempotent on `(account, nonce)`.\"}},\"kind\":\"dev\",\"methods\":{\"deposit(address,uint160)\":{\"params\":{\"_amount\":\"amount of tokens we want to deposit\",\"_token\":\"contract address of the token we are depositing\"}},\"depositFor(address,address,uint160)\":{\"details\":\"Enables the Flare FCE on-chain deposit path (see infra/stacks/fcc/extension/contracts/AspensInstructionSender.sol): the relayer holds the user's tokens transiently, approves this contract, and calls `depositFor` so custody AND the credited tradeBalance both land here \\u2014 keeping `settleBatch`/`withdraw` unchanged \\u2014 while the cosigned instruction names the real depositor. Unlike `deposit`, tokens are pulled from `msg.sender` (the relayer), not from `_account`; the credit + event are against `_account`. Same fee-on-transfer-safe accounting as `_deposit`; `_deposit` itself is untouched.\",\"params\":{\"_account\":\"beneficiary whose tradeBalance is credited\",\"_amount\":\"amount to pull from msg.sender (>= MIN_ORDER_SIZE)\",\"_token\":\"token being deposited\"}},\"depositNativeFor(address)\":{\"params\":{\"_account\":\"beneficiary whose NATIVE tradeBalance is credited\"}},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"factory()\":{\"returns\":{\"_factory\":\"the deploying factory address\"}},\"multicall(bytes[])\":{\"details\":\"Apply `delegatecall` with the current contract to each calldata in `data`, and store the `abi.encode` formatted results of each `delegatecall` into `results`. If any of the `delegatecall`s reverts, the entire context is reverted, and the error is bubbled up. By default, this function directly returns the results and terminates the call context. If you need to add before and after actions to the multicall, please override this function.\"},\"owner()\":{\"returns\":{\"_owner\":\"the instance owner / TEE signer address\"}},\"setOperatorAdmin(address)\":{\"details\":\"Refuses the TEE signer as the new admin: the admin gates the caps that bound a compromised TEE and `terminate()`, so handing it to the signer would let the TEE lift its own limits.\",\"params\":{\"_newAdmin\":\"new operator admin (non-zero, not the TEE signer)\"}},\"setOperatorFee(address,uint16)\":{\"params\":{\"_bps\":\"operator fee in basis points\",\"_recipient\":\"operator fee recipient (required when `_bps > 0`)\"}},\"setSettleEpochCap(address,uint256)\":{\"details\":\"Gated to the operator admin, never the TEE signer: this cap bounds what a compromised TEE can move between accounts by signing batches, so the TEE must not be able to raise it. Writes only the cap; the current epoch's tally is untouched, so re-arming cannot wipe it.\",\"params\":{\"_cap\":\"cumulative positive-delta total settleable per `WITHDRAW_EPOCH` (`0` = unlimited)\",\"_token\":\"token whose cap to set\"}},\"setWithdrawEpochCap(address,uint256)\":{\"details\":\"Gated to the operator admin \\u2014 the stack's own key, which can never be the TEE signer (see `setOperatorAdmin`), so the TEE cannot raise the cap that bounds its own vouchers. Rotate with `setOperatorAdmin`.\",\"params\":{\"_cap\":\"cumulative amount withdrawable per `WITHDRAW_EPOCH` (`0` = unlimited)\",\"_token\":\"token whose cap to set\"}},\"settleBatch((address,address,int256)[],(address,uint256)[],uint256,bytes)\":{\"details\":\"Off-chain shadow-ledger net settlement. In the optimistic model funds are NOT locked per order; matched trades accumulate as net deltas off-chain and are reflected on-chain here in a single batch. Safety: - signed by the instance owner (the TEE); - per token, the contract computes `fee = grossVolume*maintenanceBps/DENOMINATOR (floor) + grossVolume*operatorBps/DENOMINATOR (floor)` and requires the trader deltas to sum to exactly `-fee` \\u2014 the fee is the conservation sink. Non-bypassable: under- OR over-paying the computed fee reverts SETTLE_NOT_CONSERVED, so the on-chain bps is enforced against the reported volume; - the skim accrues to `maintenanceAccrued`/`operatorAccrued`, paid out later (slower cadence) by `settleFees`; - no account's `tradeBalance` may go negative (no overdraw / mint); - per token, the sum of the POSITIVE deltas (what the batch credits to recipients) counts against `settleEpochCap` for the current epoch, cumulatively across batches; over the cap reverts SETTLE_RATE_LIMITED; - one-shot per `_nonce` (replay-protected).\",\"params\":{\"_deltas\":\"per-(user,token) signed NET-OF-FEE balance changes\",\"_nonce\":\"unique batch nonce\",\"_signature\":\"owner EIP-712 signature over (deltasHash, volumesHash, nonce)\",\"_volumes\":\"per-token gross matched volume (drives the fee computation)\"}},\"settleFees(address)\":{\"params\":{\"_token\":\"token whose accrued fees to pay out\"}},\"terminate()\":{\"details\":\"Gated to the operator admin ONLY \\u2014 the stack's own, non-TEE key. It releases the funds even when the TEE / signer key is gone, the venue-teardown case in which a voucher can never be produced again. The TEE signer cannot call it: a terminate it could trigger would let a compromised TEE swap the capped voucher exit for the uncapped `withdrawTerminated` one. One-way and set once: no un-terminate, and a second call reverts instead of restarting the delay.\"},\"version()\":{\"returns\":{\"_version\":\"The version number\"}},\"withdraw((address,address,uint256,uint256,uint256),bytes)\":{\"details\":\"In the optimistic shadow-ledger model a self-service withdrawal is unsafe: on-chain `tradeBalance` still includes funds reserved behind resting orders (reservations are off-chain), so a user could drain collateral a later `settleBatch` is obligated to pay out. The TEE \\u2014 the authority on the withdrawable balance \\u2014 signs a voucher instead; the contract enforces only bounded backstops: - signed by the instance owner (the TEE), like `settleBatch`; - a non-zero amount (a zero voucher would only burn a nonce); - not past `expiry`; one-shot per `(account, nonce)` (replay-proof); - hard cap: never pays more of a token than `tradeBalance` holds (no mint); - per-token per-epoch rate limit (TEE-bug blast-radius backstop). Anyone may submit it (gas payer need not be the recipient): funds always go to `_v.account`, so a relayer can pay gas for a gasless withdrawal.\",\"params\":{\"_signature\":\"owner EIP-712 signature over the voucher fields\",\"_v\":\"the signed voucher\"}},\"withdrawTerminated(address)\":{\"details\":\"Reverts `TERMINATION_DELAY_PENDING(readyAt)` until `block.timestamp >= terminatedAt + TERMINATION_DELAY`. Deliberately NOT epoch-rate-limited: the caller withdraws only what the contract already records as theirs and no TEE signature is involved, so a cap could only strand funds \\u2014 the opposite of recovery. Balance is zeroed before the transfer (CEI; `nonReentrant` also guards), so a token can be reclaimed only once.\",\"params\":{\"_token\":\"token address, or the `NATIVE` sentinel, to reclaim.\"}}},\"stateVariables\":{\"DENOMINATOR\":{\"details\":\"Basis-point denominator (100% = 10_000). Matches MidribFactory + the Solana program.\"},\"MIN_ORDER_SIZE\":{\"details\":\"Minimum deposit amount \\u2014 a dust guard inherited from V2.\"},\"NATIVE\":{\"details\":\"Sentinel \\\"token address\\\" keying the chain's NATIVE asset (ETH/FLR) in `tradeBalance`, vouchers, `settleBatch` deltas/volumes, and fee accrual. Purely a mapping key \\u2014 no code lives at it and no ERC-20 call is ever made against it. Native value can ONLY enter via `depositNative`/`depositNativeFor` (there is no `receive()`), so `address(this).balance` always equals the sum of sentinel-keyed trade balances plus sentinel-keyed accrued fees.\"},\"TERMINATION_DELAY\":{\"details\":\"Fixed wait between `terminate()` and the first `withdrawTerminated`.\"},\"VERSION\":{\"details\":\"Current version number\"},\"WITHDRAW_EPOCH\":{\"details\":\"Window for the per-token withdrawal AND settlement rate-limit accounting. One epoch clock for both caps.\"},\"__self\":{\"details\":\"Address of the shared implementation this code was deployed as. Immutables live in the bytecode, so inside a clone's delegatecall this still holds the IMPLEMENTATION address while `address(this)` is the clone; the two agree only when the implementation itself is being called. That call shape is unsafe to custody funds under: the immutable args (owner/TEE signer among them) are read from the tail of calldata, which a direct caller controls, so anyone could forge the owner and drain whatever the implementation held. `onlyClone` therefore refuses every deposit path on the implementation, which keeps its balances at zero and leaves nothing for a forged owner to withdraw.\"},\"maintenanceAccrued\":{\"details\":\"Per-token fees skimmed in `settleBatch` but not yet paid out. Kept in two pools so a later operator bps/recipient change can't mis-attribute fees already accrued at the old rate. Drained by `settleFees`.\"},\"operatorAddress\":{\"details\":\"Operator fee (stack-controlled) recipient + rate, in basis points. Mutable; set/rotated by `operatorAdmin` via `setOperatorFee`. Skimmed in ADDITION to the immutable maintenance fee. Zero until configured.\"},\"operatorAdminOverride\":{\"details\":\"Optional override of the baked-in operator admin (immutable arg at byte 62), letting the stack admin rotate the key that gates the operator fee, the per-epoch withdrawal and settlement caps, and `terminate()`. `0` = use the baked value. Read the effective admin via `operatorAdmin()`.\"},\"settleEpochCap\":{\"details\":\"Per-token cap on the value `settleBatch` may credit to accounts per epoch \\u2014 the SUM OF POSITIVE deltas, i.e. what moves TO recipients. Without it one TEE-signed batch could move every account's balance to a single address, bounded by nothing: the withdrawal cap only bounds vouchers. `0` (the default) means unlimited. Set by the operator admin only (`setSettleEpochCap`).\"},\"settledInEpoch\":{\"details\":\"Cumulative positive-delta total settled per `(token, epoch)`, where `epoch = block.timestamp / WITHDRAW_EPOCH` (the withdrawal cap's clock). Recorded whether or not a cap is armed.\"},\"terminatedAt\":{\"details\":\"The venue-teardown kill switch: the `block.timestamp` at which `terminate()` ran, `0` while live. Once set, every trade operation (deposit / `settleBatch` / voucher `withdraw`) reverts, and after `TERMINATION_DELAY` the only fund movement left is the permissionless, voucher-free `withdrawTerminated`, by which each account reclaims its on-chain `tradeBalance` with NO TEE signature required. Set once: there is no un-terminate, and a second `terminate()` reverts rather than restarting the delay. `isTerminated()` reads it as a flag.\"},\"tradeBalance\":{\"details\":\"settled on-chain balance: holder => token => amount\"},\"usedSettleNonces\":{\"details\":\"Nonces already consumed by `settleBatch` (TEE-signed net settlement).\"},\"usedWithdrawNonces\":{\"details\":\"`(account, nonce)` pairs already consumed by a withdrawal voucher. Per-account so users' voucher nonces are independent.\"},\"withdrawEpochCap\":{\"details\":\"Per-token cumulative withdrawal cap per epoch \\u2014 a blast-radius backstop against a buggy or compromised TEE. `0` (the default) means unlimited; the operator admin \\u2014 never the TEE signer \\u2014 raises caps from a conservative start as confidence grows (`setWithdrawEpochCap`).\"},\"withdrawnInEpoch\":{\"details\":\"Cumulative amount withdrawn per `(token, epoch)`, where `epoch = block.timestamp / WITHDRAW_EPOCH`.\"}},\"title\":\"Midrib V3\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(address,uint160)\":{\"notice\":\"Allows a user to deposit tokens into this contract.\"},\"depositFor(address,address,uint160)\":{\"notice\":\"Deposit on behalf of `_account`, pulling the tokens from the CALLER.\"},\"depositNative()\":{\"notice\":\"Deposit the chain's native asset (ETH/FLR), credited under the NATIVE sentinel key. The native analogue of `deposit`.\"},\"depositNativeFor(address)\":{\"notice\":\"Native-asset analogue of `depositFor` (the Flare FCE relayer path): the VALUE comes from the caller, while the credit + event go to `_account`.\"},\"factory()\":{\"notice\":\"The factory that deployed this instance (immutable arg at byte 20).\"},\"isTerminated()\":{\"notice\":\"Whether `terminate()` has run on this instance.\"},\"maintenanceAddress()\":{\"notice\":\"Maintenance fee recipient \\u2014 Aspens-controlled, immutable for this instance.\"},\"maintenanceBps()\":{\"notice\":\"Maintenance fee in basis points \\u2014 Aspens-controlled, immutable for this instance.\"},\"operatorAdmin()\":{\"notice\":\"Effective operator admin: the storage override if rotated, else the baked-in immutable arg (byte 62). Gates `setOperatorFee` / `setOperatorAdmin` / `setWithdrawEpochCap` / `setSettleEpochCap` / `terminate`. Never zero and never the TEE signer.\"},\"owner()\":{\"notice\":\"The instance owner \\u2014 the TEE signer (immutable arg at byte 0). Authorizes `settleBatch` and withdrawal vouchers.\"},\"setOperatorAdmin(address)\":{\"notice\":\"Rotate the operator admin (current operator admin only).\"},\"setOperatorFee(address,uint16)\":{\"notice\":\"Set or rotate the operator fee (stack admin only). Skimmed IN ADDITION to the maintenance fee; the combined fee may not exceed DENOMINATOR (100%). A zero `_bps` disables the operator fee.\"},\"setSettleEpochCap(address,uint256)\":{\"notice\":\"Set the per-epoch settlement cap for a token: the most `settleBatch` may credit to accounts (the sum of its positive deltas) in that token per `WITHDRAW_EPOCH`, across all batches. `0` disables the cap (unlimited).\"},\"setWithdrawEpochCap(address,uint256)\":{\"notice\":\"Set the per-epoch withdrawal cap for a token. `0` disables the cap (unlimited). Caps bound the blast radius of a buggy or compromised TEE; start conservative and raise as confidence grows.\"},\"settleBatch((address,address,int256)[],(address,uint256)[],uint256,bytes)\":{\"notice\":\"Apply a TEE-signed batch of net balance changes to `tradeBalance`, skimming the maintenance + operator fees the contract computes from the reported per-token gross matched volume.\"},\"settleFees(address)\":{\"notice\":\"Pay out the accrued maintenance + operator fees for a token to their configured recipients' `tradeBalance` (from which they withdraw by voucher). Intended to run on a slower cadence than `settleBatch`. Permissionless \\u2014 it only ever moves accrued fees to the on-chain configured addresses.\"},\"terminate()\":{\"notice\":\"EMERGENCY: permanently terminate this instance. Records `terminatedAt`, which makes every trade operation (deposits, `settleBatch`, voucher `withdraw`) revert from here on, and opens `withdrawTerminated` \\u2014 after `TERMINATION_DELAY` \\u2014 so each account can reclaim its on-chain `tradeBalance` WITHOUT a TEE voucher.\"},\"version()\":{\"notice\":\"Get current version of the contract\"},\"withdraw((address,address,uint256,uint256,uint256),bytes)\":{\"notice\":\"Withdraw tokens against a TEE-signed voucher.\"},\"withdrawTerminated(address)\":{\"notice\":\"After termination and `TERMINATION_DELAY`, reclaim the caller's entire on-chain `tradeBalance` of `_token` to the caller. Permissionless \\u2014 each account can only pull its own recorded balance \\u2014 and needs NO TEE signature, so it survives loss of the signer key.\"}},\"notice\":\"Optimistic shadow-ledger settlement contract for the Aspens stack.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"chains/evm/src/MidribV3.sol\":\"MidribV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":5000},\"remappings\":[\":bitcoinprism-evm/=chains/evm/lib/oif-contracts/lib/bitcoinprism-evm/\",\":clones-with-immutable-args/=chains/evm/lib/clones-with-immutable-args/src/\",\":ds-test/=chains/evm/lib/clones-with-immutable-args/lib/ds-test/src/\",\":erc4626-tests/=chains/evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=chains/evm/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=chains/evm/lib/forge-std/src/\",\":halmos-cheatcodes/=chains/evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":oif-contracts/=chains/evm/lib/oif-contracts/\",\":openzeppelin-contracts-upgradeable/=chains/evm/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=chains/evm/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=chains/evm/lib/openzeppelin-foundry-upgrades/src/\",\":permit2/=chains/evm/lib/permit2/\",\":solady/=chains/evm/lib/solady/src/\",\":soledge/=chains/evm/lib/oif-contracts/lib/the-compact/lib/soledge/src/\",\":solmate/=chains/evm/lib/permit2/lib/solmate/src/\",\":the-compact/=chains/evm/lib/oif-contracts/lib/the-compact/\"]},\"sources\":{\"chains/evm/lib/clones-with-immutable-args/src/Clone.sol\":{\"keccak256\":\"0xf75bde15306c97dfc1f265130e5d3dbdcbacc7a42ee4b0adbc09e76b04efd59e\",\"license\":\"BSD\",\"urls\":[\"bzz-raw://517e7dc10088420ebbdcf879c3ab7f7e0c7c6063596e186309bb158895ece712\",\"dweb:/ipfs/QmYcwmBbPXg833XofAVx7X2qFjWZpAQH1DBXTKcVQSKTGM\"]},\"chains/evm/lib/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75\",\"dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF\"]},\"chains/evm/lib/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351\",\"dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ\"]},\"chains/evm/lib/solady/src/utils/Multicallable.sol\":{\"keccak256\":\"0xccd9f4b1c6dbc1592a2c68f10ef9b9798ab03279c39142f7266f6fd8cfcc0fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a54a9ede45f3537604184f48031279f493eb0075fb51b42b2c37c86540023ef\",\"dweb:/ipfs/QmfCovmCBLJZtPYJyfZEpbgTuQgT1r2DsDJVbRkxamsbZT\"]},\"chains/evm/lib/solady/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98\",\"dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi\"]},\"chains/evm/lib/solady/src/utils/SafeCastLib.sol\":{\"keccak256\":\"0x184c2be02a160a07f7e27fea5753d878c5015c0632faa115ed2f4e90614df284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c721441b505ec68ecfcc08cf8019342f6f304e94165af3e02db726377de2055a\",\"dweb:/ipfs/Qmcwe7wcjeGs7px92YR4XCFB6YS1x8T1Aq9FoDC7LKC4BA\"]},\"chains/evm/lib/solady/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0x960d5b7ca568a090c4a7785ddfd88f6ce135ced94f5c79c34e5519a71772a817\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dd81d9b7c0e8cd1ba3b84b8d3b3c937e3b942b626e4d5ab4ad454a07666396\",\"dweb:/ipfs/QmcLh9t8qgojjnziKzDfZXNtbsmvsQMRgd9nHds9ZmP668\"]},\"chains/evm/src/MidribV3.sol\":{\"keccak256\":\"0x59b7c26bdb81682cbf5e8371f14c7f9f2ad926d53fe53ce9c511f2f81ca10ffe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://6f3c71d37c59febce56d6beb4e3fd394d8f838668653e70839f341bc1d0e13fa\",\"dweb:/ipfs/QmY9sq3gngLyyxBtPJogVjDVgLhjoQXSWZfsASo8oJ2aZ8\"]},\"chains/evm/src/interfaces/IMinimalErc20.sol\":{\"keccak256\":\"0x5a34550af787ce671c59414f813621ae56327e90b1d6073edd30fc7d3107bb3f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b62cf4b600df271955dfdbd45fef785becf6d910bcf7bb8b586cdfc30a5c2b2\",\"dweb:/ipfs/QmZbJ5zW71QzN73NeLVfixFznBnEvHEtqqRj8Jm1mLAMUh\"]},\"chains/evm/src/libraries/LibString.sol\":{\"keccak256\":\"0x34bce717d04e252a623fd1a27cd6a61e77565a448292224b10ec06beb646d3f3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3d138d27208395ef9122c6c043ea41381e53d3b3c1989d8c7873fbf0ebc79096\",\"dweb:/ipfs/QmedpQ96QxJPdhnbkvbsCDNfBDmeZo5TpM45DA4CH4ffww\"]},\"chains/evm/src/libraries/MidribErrors.sol\":{\"keccak256\":\"0xe0d33baff5a69bba1b42c7e9c5902753e6a4b4874d885335c8b2e32a0ee54803\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://21e2142dbf13ece76687b4c891cd8437726f0387d2fed4751f8ffb426b77aea1\",\"dweb:/ipfs/QmYdDzqPhBJw1xdostyerkefZTuFJAqZFQ2ZdRHBompVFD\"]},\"chains/evm/src/libraries/MidribEvents.sol\":{\"keccak256\":\"0x2d744fa82b7a43193520f471f85c6477562ea14da9df49a4b94cc410644a3864\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://abcc30dfbefff3ccfe2dbe37867c42097ffd93fe5bf4c424c62a0a0de04bb189\",\"dweb:/ipfs/QmcKfkhvMHNKLAyEWQ66h5qVmVUpKYQtn2at3euXUU5ez1\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.34+commit.80d5c536"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"totalBps","type":"uint256"}],"type":"error","name":"FEE_TOO_HIGH"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint160","name":"required","type":"uint160"}],"type":"error","name":"INSUFFICIENT_BALANCE"},{"inputs":[],"type":"error","name":"INVALID_SIGNER"},{"inputs":[{"internalType":"uint160","name":"amount","type":"uint160"}],"type":"error","name":"MINIMUM_ORDER_AMOUNT"},{"inputs":[],"type":"error","name":"NOT_A_CLONE"},{"inputs":[],"type":"error","name":"NOT_TERMINATED"},{"inputs":[],"type":"error","name":"OPERATOR_ADMIN_IS_SIGNER"},{"inputs":[],"type":"error","name":"Reentrancy"},{"inputs":[],"type":"error","name":"SETTLE_NONCE_ALREADY_USED"},{"inputs":[],"type":"error","name":"SETTLE_NOT_CONSERVED"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"attempted","type":"uint256"}],"type":"error","name":"SETTLE_RATE_LIMITED"},{"inputs":[],"type":"error","name":"TERMINATED"},{"inputs":[{"internalType":"uint256","name":"readyAt","type":"uint256"}],"type":"error","name":"TERMINATION_DELAY_PENDING"},{"inputs":[],"type":"error","name":"UNAUTHORIZED_CALLER"},{"inputs":[],"type":"error","name":"WITHDRAW_NONCE_ALREADY_USED"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"attempted","type":"uint256"}],"type":"error","name":"WITHDRAW_RATE_LIMITED"},{"inputs":[],"type":"error","name":"WITHDRAW_VOUCHER_EXPIRED"},{"inputs":[],"type":"error","name":"ZERO_ADDRESS_OPERATOR"},{"inputs":[],"type":"error","name":"ZERO_ADDRESS_OPERATOR_ADMIN"},{"inputs":[],"type":"error","name":"ZERO_AMOUNT"},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"maintenanceRecipient","type":"address","indexed":true},{"internalType":"uint256","name":"maintenanceAmount","type":"uint256","indexed":false},{"internalType":"address","name":"operatorRecipient","type":"address","indexed":true},{"internalType":"uint256","name":"operatorAmount","type":"uint256","indexed":false}],"type":"event","name":"FeesSettled","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"int256","name":"delta","type":"int256","indexed":false}],"type":"event","name":"NetSettled","anonymous":false},{"inputs":[{"internalType":"address","name":"oldAdmin","type":"address","indexed":true},{"internalType":"address","name":"newAdmin","type":"address","indexed":true}],"type":"event","name":"OperatorAdminSet","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint16","name":"bps","type":"uint16","indexed":false}],"type":"event","name":"OperatorFeeSet","anonymous":false},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"uint256","name":"cap","type":"uint256","indexed":false}],"type":"event","name":"SettleEpochCapSet","anonymous":false},{"inputs":[{"internalType":"address","name":"caller","type":"address","indexed":true}],"type":"event","name":"Terminated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"TerminatedWithdrawal","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"uint160","name":"amount","type":"uint160","indexed":false}],"type":"event","name":"TokenDeposited","anonymous":false},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"uint256","name":"cap","type":"uint256","indexed":false}],"type":"event","name":"WithdrawEpochCapSet","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"tokenContract","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false}],"type":"event","name":"Withdrawn","anonymous":false},{"inputs":[],"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_ORDER_SIZE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NATIVE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TERMINATION_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WITHDRAW_EPOCH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint160","name":"_amount","type":"uint160"}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint160","name":"_amount","type":"uint160"}],"stateMutability":"nonpayable","type":"function","name":"depositFor"},{"inputs":[],"stateMutability":"payable","type":"function","name":"depositNative"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositNativeFor"},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"factory","outputs":[{"internalType":"address","name":"_factory","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isTerminated","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"maintenanceAccrued","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maintenanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maintenanceBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"stateMutability":"payable","type":"function","name":"multicall","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"operatorAccrued","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operatorAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operatorBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"owner","outputs":[{"internalType":"address","name":"_owner","type":"address"}]},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOperatorAdmin"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint16","name":"_bps","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setOperatorFee"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setSettleEpochCap"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setWithdrawEpochCap"},{"inputs":[{"internalType":"struct MidribV3.SettleDelta[]","name":"_deltas","type":"tuple[]","components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}]},{"internalType":"struct MidribV3.TokenVolume[]","name":"_volumes","type":"tuple[]","components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"grossVolume","type":"uint256"}]},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"settleBatch"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"settleEpochCap","outputs":[{"internalType":"uint256","name":"cap","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"settleFees"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"settledInEpoch","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"terminate"},{"inputs":[],"stateMutability":"view","type":"function","name":"terminatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"tradeBalance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function","name":"usedSettleNonces","outputs":[{"internalType":"bool","name":"used","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function","name":"usedWithdrawNonces","outputs":[{"internalType":"bool","name":"used","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"uint8","name":"_version","type":"uint8"}]},{"inputs":[{"internalType":"struct MidribV3.WithdrawalVoucher","name":"_v","type":"tuple","components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"withdrawEpochCap","outputs":[{"internalType":"uint256","name":"cap","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawTerminated"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawnInEpoch","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"deposit(address,uint160)":{"params":{"_amount":"amount of tokens we want to deposit","_token":"contract address of the token we are depositing"}},"depositFor(address,address,uint160)":{"details":"Enables the Flare FCE on-chain deposit path (see infra/stacks/fcc/extension/contracts/AspensInstructionSender.sol): the relayer holds the user's tokens transiently, approves this contract, and calls `depositFor` so custody AND the credited tradeBalance both land here — keeping `settleBatch`/`withdraw` unchanged — while the cosigned instruction names the real depositor. Unlike `deposit`, tokens are pulled from `msg.sender` (the relayer), not from `_account`; the credit + event are against `_account`. Same fee-on-transfer-safe accounting as `_deposit`; `_deposit` itself is untouched.","params":{"_account":"beneficiary whose tradeBalance is credited","_amount":"amount to pull from msg.sender (>= MIN_ORDER_SIZE)","_token":"token being deposited"}},"depositNativeFor(address)":{"params":{"_account":"beneficiary whose NATIVE tradeBalance is credited"}},"eip712Domain()":{"details":"See: https://eips.ethereum.org/EIPS/eip-5267"},"factory()":{"returns":{"_factory":"the deploying factory address"}},"multicall(bytes[])":{"details":"Apply `delegatecall` with the current contract to each calldata in `data`, and store the `abi.encode` formatted results of each `delegatecall` into `results`. If any of the `delegatecall`s reverts, the entire context is reverted, and the error is bubbled up. By default, this function directly returns the results and terminates the call context. If you need to add before and after actions to the multicall, please override this function."},"owner()":{"returns":{"_owner":"the instance owner / TEE signer address"}},"setOperatorAdmin(address)":{"details":"Refuses the TEE signer as the new admin: the admin gates the caps that bound a compromised TEE and `terminate()`, so handing it to the signer would let the TEE lift its own limits.","params":{"_newAdmin":"new operator admin (non-zero, not the TEE signer)"}},"setOperatorFee(address,uint16)":{"params":{"_bps":"operator fee in basis points","_recipient":"operator fee recipient (required when `_bps > 0`)"}},"setSettleEpochCap(address,uint256)":{"details":"Gated to the operator admin, never the TEE signer: this cap bounds what a compromised TEE can move between accounts by signing batches, so the TEE must not be able to raise it. Writes only the cap; the current epoch's tally is untouched, so re-arming cannot wipe it.","params":{"_cap":"cumulative positive-delta total settleable per `WITHDRAW_EPOCH` (`0` = unlimited)","_token":"token whose cap to set"}},"setWithdrawEpochCap(address,uint256)":{"details":"Gated to the operator admin — the stack's own key, which can never be the TEE signer (see `setOperatorAdmin`), so the TEE cannot raise the cap that bounds its own vouchers. Rotate with `setOperatorAdmin`.","params":{"_cap":"cumulative amount withdrawable per `WITHDRAW_EPOCH` (`0` = unlimited)","_token":"token whose cap to set"}},"settleBatch((address,address,int256)[],(address,uint256)[],uint256,bytes)":{"details":"Off-chain shadow-ledger net settlement. In the optimistic model funds are NOT locked per order; matched trades accumulate as net deltas off-chain and are reflected on-chain here in a single batch. Safety: - signed by the instance owner (the TEE); - per token, the contract computes `fee = grossVolume*maintenanceBps/DENOMINATOR (floor) + grossVolume*operatorBps/DENOMINATOR (floor)` and requires the trader deltas to sum to exactly `-fee` — the fee is the conservation sink. Non-bypassable: under- OR over-paying the computed fee reverts SETTLE_NOT_CONSERVED, so the on-chain bps is enforced against the reported volume; - the skim accrues to `maintenanceAccrued`/`operatorAccrued`, paid out later (slower cadence) by `settleFees`; - no account's `tradeBalance` may go negative (no overdraw / mint); - per token, the sum of the POSITIVE deltas (what the batch credits to recipients) counts against `settleEpochCap` for the current epoch, cumulatively across batches; over the cap reverts SETTLE_RATE_LIMITED; - one-shot per `_nonce` (replay-protected).","params":{"_deltas":"per-(user,token) signed NET-OF-FEE balance changes","_nonce":"unique batch nonce","_signature":"owner EIP-712 signature over (deltasHash, volumesHash, nonce)","_volumes":"per-token gross matched volume (drives the fee computation)"}},"settleFees(address)":{"params":{"_token":"token whose accrued fees to pay out"}},"terminate()":{"details":"Gated to the operator admin ONLY — the stack's own, non-TEE key. It releases the funds even when the TEE / signer key is gone, the venue-teardown case in which a voucher can never be produced again. The TEE signer cannot call it: a terminate it could trigger would let a compromised TEE swap the capped voucher exit for the uncapped `withdrawTerminated` one. One-way and set once: no un-terminate, and a second call reverts instead of restarting the delay."},"version()":{"returns":{"_version":"The version number"}},"withdraw((address,address,uint256,uint256,uint256),bytes)":{"details":"In the optimistic shadow-ledger model a self-service withdrawal is unsafe: on-chain `tradeBalance` still includes funds reserved behind resting orders (reservations are off-chain), so a user could drain collateral a later `settleBatch` is obligated to pay out. The TEE — the authority on the withdrawable balance — signs a voucher instead; the contract enforces only bounded backstops: - signed by the instance owner (the TEE), like `settleBatch`; - a non-zero amount (a zero voucher would only burn a nonce); - not past `expiry`; one-shot per `(account, nonce)` (replay-proof); - hard cap: never pays more of a token than `tradeBalance` holds (no mint); - per-token per-epoch rate limit (TEE-bug blast-radius backstop). Anyone may submit it (gas payer need not be the recipient): funds always go to `_v.account`, so a relayer can pay gas for a gasless withdrawal.","params":{"_signature":"owner EIP-712 signature over the voucher fields","_v":"the signed voucher"}},"withdrawTerminated(address)":{"details":"Reverts `TERMINATION_DELAY_PENDING(readyAt)` until `block.timestamp >= terminatedAt + TERMINATION_DELAY`. Deliberately NOT epoch-rate-limited: the caller withdraws only what the contract already records as theirs and no TEE signature is involved, so a cap could only strand funds — the opposite of recovery. Balance is zeroed before the transfer (CEI; `nonReentrant` also guards), so a token can be reclaimed only once.","params":{"_token":"token address, or the `NATIVE` sentinel, to reclaim."}}},"version":1},"userdoc":{"kind":"user","methods":{"deposit(address,uint160)":{"notice":"Allows a user to deposit tokens into this contract."},"depositFor(address,address,uint160)":{"notice":"Deposit on behalf of `_account`, pulling the tokens from the CALLER."},"depositNative()":{"notice":"Deposit the chain's native asset (ETH/FLR), credited under the NATIVE sentinel key. The native analogue of `deposit`."},"depositNativeFor(address)":{"notice":"Native-asset analogue of `depositFor` (the Flare FCE relayer path): the VALUE comes from the caller, while the credit + event go to `_account`."},"factory()":{"notice":"The factory that deployed this instance (immutable arg at byte 20)."},"isTerminated()":{"notice":"Whether `terminate()` has run on this instance."},"maintenanceAddress()":{"notice":"Maintenance fee recipient — Aspens-controlled, immutable for this instance."},"maintenanceBps()":{"notice":"Maintenance fee in basis points — Aspens-controlled, immutable for this instance."},"operatorAdmin()":{"notice":"Effective operator admin: the storage override if rotated, else the baked-in immutable arg (byte 62). Gates `setOperatorFee` / `setOperatorAdmin` / `setWithdrawEpochCap` / `setSettleEpochCap` / `terminate`. Never zero and never the TEE signer."},"owner()":{"notice":"The instance owner — the TEE signer (immutable arg at byte 0). Authorizes `settleBatch` and withdrawal vouchers."},"setOperatorAdmin(address)":{"notice":"Rotate the operator admin (current operator admin only)."},"setOperatorFee(address,uint16)":{"notice":"Set or rotate the operator fee (stack admin only). Skimmed IN ADDITION to the maintenance fee; the combined fee may not exceed DENOMINATOR (100%). A zero `_bps` disables the operator fee."},"setSettleEpochCap(address,uint256)":{"notice":"Set the per-epoch settlement cap for a token: the most `settleBatch` may credit to accounts (the sum of its positive deltas) in that token per `WITHDRAW_EPOCH`, across all batches. `0` disables the cap (unlimited)."},"setWithdrawEpochCap(address,uint256)":{"notice":"Set the per-epoch withdrawal cap for a token. `0` disables the cap (unlimited). Caps bound the blast radius of a buggy or compromised TEE; start conservative and raise as confidence grows."},"settleBatch((address,address,int256)[],(address,uint256)[],uint256,bytes)":{"notice":"Apply a TEE-signed batch of net balance changes to `tradeBalance`, skimming the maintenance + operator fees the contract computes from the reported per-token gross matched volume."},"settleFees(address)":{"notice":"Pay out the accrued maintenance + operator fees for a token to their configured recipients' `tradeBalance` (from which they withdraw by voucher). Intended to run on a slower cadence than `settleBatch`. Permissionless — it only ever moves accrued fees to the on-chain configured addresses."},"terminate()":{"notice":"EMERGENCY: permanently terminate this instance. Records `terminatedAt`, which makes every trade operation (deposits, `settleBatch`, voucher `withdraw`) revert from here on, and opens `withdrawTerminated` — after `TERMINATION_DELAY` — so each account can reclaim its on-chain `tradeBalance` WITHOUT a TEE voucher."},"version()":{"notice":"Get current version of the contract"},"withdraw((address,address,uint256,uint256,uint256),bytes)":{"notice":"Withdraw tokens against a TEE-signed voucher."},"withdrawTerminated(address)":{"notice":"After termination and `TERMINATION_DELAY`, reclaim the caller's entire on-chain `tradeBalance` of `_token` to the caller. Permissionless — each account can only pull its own recorded balance — and needs NO TEE signature, so it survives loss of the signer key."}},"version":1}},"settings":{"remappings":["bitcoinprism-evm/=chains/evm/lib/oif-contracts/lib/bitcoinprism-evm/","clones-with-immutable-args/=chains/evm/lib/clones-with-immutable-args/src/","ds-test/=chains/evm/lib/clones-with-immutable-args/lib/ds-test/src/","erc4626-tests/=chains/evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=chains/evm/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=chains/evm/lib/forge-std/src/","halmos-cheatcodes/=chains/evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","oif-contracts/=chains/evm/lib/oif-contracts/","openzeppelin-contracts-upgradeable/=chains/evm/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=chains/evm/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=chains/evm/lib/openzeppelin-foundry-upgrades/src/","permit2/=chains/evm/lib/permit2/","solady/=chains/evm/lib/solady/src/","soledge/=chains/evm/lib/oif-contracts/lib/the-compact/lib/soledge/src/","solmate/=chains/evm/lib/permit2/lib/solmate/src/","the-compact/=chains/evm/lib/oif-contracts/lib/the-compact/"],"optimizer":{"enabled":true,"runs":5000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"chains/evm/src/MidribV3.sol":"MidribV3"},"evmVersion":"london","libraries":{}},"sources":{"chains/evm/lib/clones-with-immutable-args/src/Clone.sol":{"keccak256":"0xf75bde15306c97dfc1f265130e5d3dbdcbacc7a42ee4b0adbc09e76b04efd59e","urls":["bzz-raw://517e7dc10088420ebbdcf879c3ab7f7e0c7c6063596e186309bb158895ece712","dweb:/ipfs/QmYcwmBbPXg833XofAVx7X2qFjWZpAQH1DBXTKcVQSKTGM"],"license":"BSD"},"chains/evm/lib/solady/src/utils/ECDSA.sol":{"keccak256":"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478","urls":["bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75","dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF"],"license":"MIT"},"chains/evm/lib/solady/src/utils/EIP712.sol":{"keccak256":"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839","urls":["bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351","dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ"],"license":"MIT"},"chains/evm/lib/solady/src/utils/Multicallable.sol":{"keccak256":"0xccd9f4b1c6dbc1592a2c68f10ef9b9798ab03279c39142f7266f6fd8cfcc0fd4","urls":["bzz-raw://8a54a9ede45f3537604184f48031279f493eb0075fb51b42b2c37c86540023ef","dweb:/ipfs/QmfCovmCBLJZtPYJyfZEpbgTuQgT1r2DsDJVbRkxamsbZT"],"license":"MIT"},"chains/evm/lib/solady/src/utils/ReentrancyGuard.sol":{"keccak256":"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8","urls":["bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98","dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi"],"license":"MIT"},"chains/evm/lib/solady/src/utils/SafeCastLib.sol":{"keccak256":"0x184c2be02a160a07f7e27fea5753d878c5015c0632faa115ed2f4e90614df284","urls":["bzz-raw://c721441b505ec68ecfcc08cf8019342f6f304e94165af3e02db726377de2055a","dweb:/ipfs/Qmcwe7wcjeGs7px92YR4XCFB6YS1x8T1Aq9FoDC7LKC4BA"],"license":"MIT"},"chains/evm/lib/solady/src/utils/SafeTransferLib.sol":{"keccak256":"0x960d5b7ca568a090c4a7785ddfd88f6ce135ced94f5c79c34e5519a71772a817","urls":["bzz-raw://b2dd81d9b7c0e8cd1ba3b84b8d3b3c937e3b942b626e4d5ab4ad454a07666396","dweb:/ipfs/QmcLh9t8qgojjnziKzDfZXNtbsmvsQMRgd9nHds9ZmP668"],"license":"MIT"},"chains/evm/src/MidribV3.sol":{"keccak256":"0x59b7c26bdb81682cbf5e8371f14c7f9f2ad926d53fe53ce9c511f2f81ca10ffe","urls":["bzz-raw://6f3c71d37c59febce56d6beb4e3fd394d8f838668653e70839f341bc1d0e13fa","dweb:/ipfs/QmY9sq3gngLyyxBtPJogVjDVgLhjoQXSWZfsASo8oJ2aZ8"],"license":"BUSL-1.1"},"chains/evm/src/interfaces/IMinimalErc20.sol":{"keccak256":"0x5a34550af787ce671c59414f813621ae56327e90b1d6073edd30fc7d3107bb3f","urls":["bzz-raw://1b62cf4b600df271955dfdbd45fef785becf6d910bcf7bb8b586cdfc30a5c2b2","dweb:/ipfs/QmZbJ5zW71QzN73NeLVfixFznBnEvHEtqqRj8Jm1mLAMUh"],"license":"BUSL-1.1"},"chains/evm/src/libraries/LibString.sol":{"keccak256":"0x34bce717d04e252a623fd1a27cd6a61e77565a448292224b10ec06beb646d3f3","urls":["bzz-raw://3d138d27208395ef9122c6c043ea41381e53d3b3c1989d8c7873fbf0ebc79096","dweb:/ipfs/QmedpQ96QxJPdhnbkvbsCDNfBDmeZo5TpM45DA4CH4ffww"],"license":"BUSL-1.1"},"chains/evm/src/libraries/MidribErrors.sol":{"keccak256":"0xe0d33baff5a69bba1b42c7e9c5902753e6a4b4874d885335c8b2e32a0ee54803","urls":["bzz-raw://21e2142dbf13ece76687b4c891cd8437726f0387d2fed4751f8ffb426b77aea1","dweb:/ipfs/QmYdDzqPhBJw1xdostyerkefZTuFJAqZFQ2ZdRHBompVFD"],"license":"BUSL-1.1"},"chains/evm/src/libraries/MidribEvents.sol":{"keccak256":"0x2d744fa82b7a43193520f471f85c6477562ea14da9df49a4b94cc410644a3864","urls":["bzz-raw://abcc30dfbefff3ccfe2dbe37867c42097ffd93fe5bf4c424c62a0a0de04bb189","dweb:/ipfs/QmcKfkhvMHNKLAyEWQ66h5qVmVUpKYQtn2at3euXUU5ez1"],"license":"BUSL-1.1"}},"version":1},"id":15}