{"matchId":"56004145","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2026-10-12T17:07:16Z","creationBytecode":{"onchainBytecode":"0x6101406040526001600655348015610015575f80fd5b50604051611902380380611902833981016040819052610034916101a7565b6001600160a01b03808516608052831660a081905260408051638fb56bef60e01b81529051638fb56bef916004808201926020929091908290030181865afa158015610082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a691906101ec565b6001600160a01b0390811660c0523360e05261010083905261012082905260405163095ea7b360e01b815284821660048201525f1960248201529085169063095ea7b3906044016020604051808303815f875af1158015610109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012d919061020e565b5069d3c21bcecceda10000005f81815530808252600160205260408083208490555190927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161017f91815260200190565b60405180910390a35050505061022d565b6001600160a01b03811681146101a4575f80fd5b50565b5f805f80608085870312156101ba575f80fd5b84516101c581610190565b60208601519094506101d681610190565b6040860151606090960151949790965092505050565b5f602082840312156101fc575f80fd5b815161020781610190565b9392505050565b5f6020828403121561021e575f80fd5b81518015158114610207575f80fd5b60805160a05160c05160e05161010051610120516116336102cf5f395f8181610498015261110e01525f81816102f60152818161112f015261123501525f818161031d015261083501525f8181610344015261062601525f81816104710152818161057a015261120c01525f81816103f1015281816105d00152818161097d01528181610b4801528181610e6e0152818161107c015261130101526116335ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063ef6506db907f0000000000000000000000000000000000000000000000000000000000000000906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e820000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d000000000000000000000000000000000000000000000000000000000013d62000000000000000000000000000000000000000000000000000000000000186a0","recompiledBytecode":"0x6101406040526001600655348015610015575f80fd5b50604051611902380380611902833981016040819052610034916101a7565b6001600160a01b03808516608052831660a081905260408051638fb56bef60e01b81529051638fb56bef916004808201926020929091908290030181865afa158015610082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a691906101ec565b6001600160a01b0390811660c0523360e05261010083905261012082905260405163095ea7b360e01b815284821660048201525f1960248201529085169063095ea7b3906044016020604051808303815f875af1158015610109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012d919061020e565b5069d3c21bcecceda10000005f81815530808252600160205260408083208490555190927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161017f91815260200190565b60405180910390a35050505061022d565b6001600160a01b03811681146101a4575f80fd5b50565b5f805f80608085870312156101ba575f80fd5b84516101c581610190565b60208601519094506101d681610190565b6040860151606090960151949790965092505050565b5f602082840312156101fc575f80fd5b815161020781610190565b9392505050565b5f6020828403121561021e575f80fd5b81518015158114610207575f80fd5b60805160a05160c05160e05161010051610120516116336102cf5f395f8181610498015261110e01525f81816102f60152818161112f015261123501525f818161031d015261083501525f8181610344015261062601525f81816104710152818161057a015261120c01525f81816103f1015281816105d00152818161097d01528181610b4801528181610e6e0152818161107c015261130101526116335ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063ef6506db907f0000000000000000000000000000000000000000000000000000000000000000906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"1411:7578:0:-:0;;;2618:1;2594:25;;3306:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3406:9:0;;;;;3425:18;;;;;;3460:15;;;-1:-1:-1;;;3460:15:0;;;;:13;;:15;;;;;;;;;;;;;;;3425:18;3460:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3453:22:0;;;;;3493:10;3485:18;;3513:22;;;;3545:24;;;;3579:49;;-1:-1:-1;;;3579:49:0;;1293:32:1;;;3579:49:0;;;1275:51:1;-1:-1:-1;;1342:18:1;;;1335:34;3579:11:0;;;;;;1248:18:1;;3579:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1947:12:0;3638:11;:26;;;3692:4;3674:24;;;:9;:24;;;;;;:39;;;3728:49;3692:4;;3728:49;;;;1808:25:1;;1796:2;1781:18;;1662:177;3728:49:0;;;;;;;;3306:478;;;;1411:7578;;14:142:1;-1:-1:-1;;;;;100:31:1;;90:42;;80:70;;146:1;143;136:12;80:70;14:142;:::o;161:668::-;292:6;300;308;316;369:3;357:9;348:7;344:23;340:33;337:53;;;386:1;383;376:12;337:53;418:9;412:16;437:42;473:5;437:42;:::i;:::-;548:2;533:18;;527:25;498:5;;-1:-1:-1;561:44:1;527:25;561:44;:::i;:::-;697:2;682:18;;676:25;793:2;778:18;;;772:25;161:668;;624:7;;-1:-1:-1;161:668:1;-1:-1:-1;;;161:668:1:o;834:262::-;904:6;957:2;945:9;936:7;932:23;928:32;925:52;;;973:1;970;963:12;925:52;1005:9;999:16;1024:42;1060:5;1024:42;:::i;:::-;1085:5;834:262;-1:-1:-1;;;834:262:1:o;1380:277::-;1447:6;1500:2;1488:9;1479:7;1475:23;1471:32;1468:52;;;1516:1;1513;1506:12;1468:52;1548:9;1542:16;1601:5;1594:13;1587:21;1580:5;1577:32;1567:60;;1623:1;1620;1613:12;1662:177;1411:7578:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa164736f6c634300081a000a","offset":6390}},"transformations":[{"type":"insert","offset":6402,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e820000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d000000000000000000000000000000000000000000000000000000000013d62000000000000000000000000000000000000000000000000000000000000186a0"}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000013d62081565b6101d27f0000000000000000000000004b91078b2374c956a65f7af0999cae0a935e682181565b6101d27f000000000000000000000000f9e2eec3b610ec6781f7438ac5fb4bc049d81cc181565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8281565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f0000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d81565b61024e7f00000000000000000000000000000000000000000000000000000000000186a081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f0000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000f9e2eec3b610ec6781f7438ac5fb4bc049d81cc173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004b91078b2374c956a65f7af0999cae0a935e6821161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8216906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8273ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8273ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e8273ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000186a07f000000000000000000000000000000000000000000000000000000000013d6206115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d169063ef6506db907f000000000000000000000000000000000000000000000000000000000013d620906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e82169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a","recompiledBytecode":"0x608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063ef6506db907f0000000000000000000000000000000000000000000000000000000000000000906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"1411:7578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7160:918;;;;;;:::i;:::-;;:::i;:::-;;;582:42:1;570:55;;;552:74;;540:2;525:18;7160:918:0;;;;;;;;1437:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2537:27::-;;;;;;;;;1265:25:1;;;1253:2;1238:18;2537:27:0;1119:177:1;8314:203:0;;;;;;:::i;:::-;;:::i;:::-;;;1771:14:1;;1764:22;1746:41;;1734:2;1719:18;8314:203:0;1606:187:1;2353:26:0;;;;;;8523:276;;;;;;:::i;:::-;;:::i;1581:36::-;;1611:6;1581:36;;1539:35;;1572:2;1539:35;;;;;2349:4:1;2337:17;;;2319:36;;2307:2;2292:18;1539:35:0;2177:184:1;2570:18:0;;;;;;;;;1697:41;;1736:2;1697:41;;2385:44;;;;;;:::i;:::-;;;;;;;;;;;;;;2271:34;;;;;2148:30;;;;;2044:29;;;;;1908:51;;1947:12;1908:51;;4003:405;;;;;;:::i;:::-;;:::i;:::-;;1494:39;;;;;;;;;;;;;;;;;;;;;8171:137;;;;;;:::i;:::-;;:::i;1623:37::-;;1657:3;1623:37;;1829:73;;1860:42;1829:73;;1966:30;;;;;4511:661;;;;;;:::i;:::-;;:::i;5295:646::-;;;;;;:::i;:::-;;:::i;2435:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2506:25;;;;;;2002:36;;;;;2311:35;;;;;7160:918;7217:14;7247:3;:15;;;7266:1;7247:20;7243:578;;-1:-1:-1;7292:3:0;7243:578;;;7326:7;7347:12;7373:13;7453:66;7450:1;7443:77;7590:2;7587:1;7584;7581;7576:3;7569:5;7558:35;7552:41;;7618:16;7610:24;;7666:1;7660:8;7651:17;;7700:2;7699:3;:17;;;;7706:4;7714:2;7706:10;;7699:17;:46;;;-1:-1:-1;7728:17:0;7720:25;;7699:46;7695:69;;;-1:-1:-1;7762:1:0;;7160:918;-1:-1:-1;;;;7160:918:0:o;7695:69::-;7803:5;-1:-1:-1;;;7243:578:0;7847:20;;;;;:50;;;7889:7;7871:26;;:6;:26;;;7847:50;:76;;;;7919:3;7901:22;;:6;:22;;;7847:76;:110;;;;7953:4;7943:14;;:6;:14;;;7847:110;:137;;;-1:-1:-1;7961:23:0;;;7979:4;7961:23;7847:137;:196;;;;8015:3;8005:13;;:6;:13;;;:37;;;;-1:-1:-1;8022:15:0;;;;:20;;8005:37;7830:241;;;-1:-1:-1;8069:1:0;;7160:918;-1:-1:-1;7160:918:0:o;7830:241::-;7160:918;;;:::o;8314:203::-;8408:10;8382:4;8398:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;8452:37;8382:4;;8398:30;;8452:37;;;;8431:6;1265:25:1;;1253:2;1238:18;;1119:177;8452:37:0;;;;;;;;-1:-1:-1;8506:4:0;8314:203;;;;;:::o;8523:276::-;8633:15;;;8605:4;8633:15;;;:9;:15;;;;;;;;8649:10;8633:27;;;;;;;;8679:17;8674:22;;8670:68;;8728:10;8732:6;8728:1;:10;:::i;:::-;8698:15;;;;;;;:9;:15;;;;;;;;8714:10;8698:27;;;;;;;:40;8670:68;8748:23;8754:4;8760:2;8764:6;8748:5;:23::i;:::-;-1:-1:-1;8788:4:0;;8523:276;-1:-1:-1;;;;8523:276:0:o;4003:405::-;4059:10;:19;4073:5;4059:19;;4055:42;;4087:10;;;;;;;;;;;;;;4055:42;4111:6;;;;4107:34;;;4126:15;;;;;;;;;;;;;;4107:34;4155:9;4168:1;4155:14;4151:39;;4178:12;;;;;;;;;;;;;;4151:39;4200:6;:13;;;;4209:4;4200:13;;;4231:54;;;;;4248:10;4231:54;;;4233:74:1;4268:4:0;4323:18:1;;;4316:83;4415:18;;;4408:34;;;4231:16:0;:3;:16;;;;4206:18:1;;4231:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4223:63;;;;;;4296:10;:22;;;1947:12;4328;:27;;;4370:31;;;4909:25:1;;;4965:2;4950:18;;4943:34;;;;4370:31:0;;4882:18:1;4370:31:0;;;;;;;4003:405;:::o;8171:137::-;8235:4;8251:29;8257:10;8269:2;8273:6;8251:5;:29::i;:::-;-1:-1:-1;8297:4:0;8171:137;;;;:::o;4511:661::-;4615:16;3214:5;;3223:1;3214:10;3210:34;;3233:11;;;;;;;;;;;;;;3210:34;3262:1;3254:5;:9;4652:6:::1;::::0;::::1;;4647:31;;4667:11;;;;;;;;;;;;;;4647:31;4692:5;4701:1;4692:10:::0;4688:35:::1;;4711:12;;;;;;;;;;;;;;4688:35;4741:50;::::0;;;;4758:10:::1;4741:50;::::0;::::1;4233:74:1::0;4778:4:0::1;4323:18:1::0;;;4316:83;4415:18;;;4408:34;;;4741:3:0::1;:16;;::::0;::::1;::::0;4206:18:1;;4741:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4733:59;;;::::0;::::1;;4802:11;1611:6;4816:15;1657:3;4816:5:::0;:15:::1;:::i;:::-;:21;;;;:::i;:::-;4802:35:::0;-1:-1:-1;4847:11:0::1;4861;4802:35:::0;4861:5;:11:::1;:::i;:::-;4847:25;;4928:3;4915:10;;:16;;;;:::i;:::-;4908:3;4893:12;;:18;;;;:::i;:::-;:39;;;;:::i;:::-;4882:50:::0;-1:-1:-1;4946:13:0;;;:39:::1;;;4974:11;4963:8;:22;4946:39;4942:62;;;4994:10;;;;;;;;;;;;;;4942:62;5028:3;5014:10;;:17;;;;;;;:::i;:::-;;;;;;;;5057:8;5041:12;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5075:42:0::1;::::0;-1:-1:-1;5089:4:0::1;5096:10;5108:8:::0;5075:5:::1;:42::i;:::-;5127:38;5138:5;5145:3;5150:4;5156:8;5127:10;:38::i;:::-;-1:-1:-1::0;;3292:1:0;3284:5;:9;4511:661;;-1:-1:-1;;4511:661:0:o;5295:646::-;5400:14;3214:5;;3223:1;3214:10;3210:34;;3233:11;;;;;;;;;;;;;;3210:34;3262:1;3254:5;:9;5435:6:::1;::::0;::::1;;5430:31;;5450:11;;;;;;;;;;;;;;5430:31;5475:7;5486:1;5475:12:::0;5471:37:::1;;5496:12;;;;;;;;;;;;;;5471:37;5518:41;5524:10;5544:4;5551:7;5518:5;:41::i;:::-;5569:13;5624:7;5609:12;;:22;;;;:::i;:::-;5598:7;5585:10;;:20;;;;:::i;:::-;:47;;;;:::i;:::-;5569:63:::0;-1:-1:-1;5642:11:0::1;1611:6;5656:15;1657:3;5569:63:::0;5656:15:::1;:::i;:::-;:21;;;;:::i;:::-;5642:35:::0;-1:-1:-1;5696:11:0::1;5642:35:::0;5696:5;:11:::1;:::i;:::-;5687:20:::0;-1:-1:-1;5721:11:0;;;:33:::1;;;5745:9;5736:6;:18;5721:33;5717:56;;;5763:10;;;;;;;;;;;;;;5717:56;5797:5;5783:10;;:19;;;;;;;:::i;:::-;;;;;;;;5828:7;5812:12;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5853:32:0::1;::::0;;;;5866:10:::1;5853:32;::::0;::::1;5744:74:1::0;5834:18;;;5827:34;;;5853:3:0::1;:12;;::::0;::::1;::::0;5717:18:1;;5853:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5845:41;;;::::0;::::1;;5896:38;5907:5;5914:3;5919:5;5926:7;5896:10;:38::i;8805:182::-:0;8881:15;;;;;;;:9;:15;;;;;:25;;8900:6;;8881:15;:25;;8900:6;;8881:25;:::i;:::-;;;;-1:-1:-1;;8916:13:0;;;;;;;:9;:13;;;;;:23;;8933:6;;8916:13;:23;;8933:6;;8916:23;:::i;:::-;;;;;;;;8969:2;8954:26;;8963:4;8954:26;;;8973:6;8954:26;;;;1265:25:1;;1253:2;1238:18;;1119:177;8954:26:0;;;;;;;;8805:182;;;:::o;6036:870::-;6128:16;1657:3;6147:18;1736:2;6147:3;:18;:::i;:::-;:28;;;;:::i;:::-;6128:47;-1:-1:-1;6185:14:0;6202;6128:47;6202:3;:14;:::i;:::-;6185:31;;6226:14;6243:25;6257:10;6243:13;:25::i;:::-;6226:42;-1:-1:-1;6282:20:0;;;6278:162;;6318:18;6328:8;6318:18;;:::i;:::-;;;6428:1;6417:12;;6278:162;6453:10;;6449:51;;6473:26;;;;;1860:42;6473:26;;;5744:74:1;5834:18;;;5827:34;;;6473:3:0;:12;;;;;5717:18:1;;6473:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6465:35;;;;;;6514:12;;6510:313;;6563:22;6575:10;6563:9;:22;:::i;:::-;6550:9;:35;;6542:73;;;;;;;6074:2:1;6542:73:0;;;6056:21:1;6113:2;6093:18;;;6086:30;6152:27;6132:18;;;6125:55;6197:18;;6542:73:0;;;;;;;;6633:48;;;;;:14;5762:55:1;;;6633:48:0;;;5744:74:1;5834:18;;;5827:34;;;6633:7:0;:14;;;;6653:9;;5717:18:1;;6633:48:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6633:48:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6629:184;;6729:30;;;;;:12;5762:55:1;;;6729:30:0;;;5744:74:1;5834:18;;;5827:34;;;6729:3:0;:12;;;;5717:18:1;;6729:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6721:39;;;;;;6629:184;;;;;6837:62;;;6693:14:1;;6686:22;6668:41;;6740:2;6725:18;;6718:34;;;6768:18;;;6761:34;;;6826:2;6811:18;;6804:34;;;6869:3;6854:19;;6847:35;;;6837:62:0;;;;6843:10;;6837:62;;6655:3:1;6640:19;6837:62:0;;;;;;;6118:788;;;6036:870;;;;:::o;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;215:186;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:1:o;637:477::-;786:2;775:9;768:21;749:4;818:6;812:13;861:6;856:2;845:9;841:18;834:34;920:6;915:2;907:6;903:15;898:2;887:9;883:18;877:50;976:1;971:2;962:6;951:9;947:22;943:31;936:42;1105:2;1035:66;1030:2;1022:6;1018:15;1014:88;1003:9;999:104;995:113;987:121;;;637:477;;;;:::o;1301:300::-;1369:6;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;1567:2;1552:18;;;;1539:32;;-1:-1:-1;;;1301:300:1:o;1798:374::-;1875:6;1883;1891;1944:2;1932:9;1923:7;1919:23;1915:32;1912:52;;;1960:1;1957;1950:12;1912:52;1983:29;2002:9;1983:29;:::i;:::-;1973:39;;2031:38;2065:2;2054:9;2050:18;2031:38;:::i;:::-;1798:374;;2021:48;;-1:-1:-1;;;2138:2:1;2123:18;;;;2110:32;;1798:374::o;2366:226::-;2425:6;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;-1:-1:-1;2539:23:1;;2366:226;-1:-1:-1;2366:226:1:o;2844:346::-;2912:6;2920;2973:2;2961:9;2952:7;2948:23;2944:32;2941:52;;;2989:1;2986;2979:12;2941:52;-1:-1:-1;;3034:23:1;;;3154:2;3139:18;;;3126:32;;-1:-1:-1;2844:346:1:o;3195:260::-;3263:6;3271;3324:2;3312:9;3303:7;3299:23;3295:32;3292:52;;;3340:1;3337;3330:12;3292:52;3363:29;3382:9;3363:29;:::i;:::-;3353:39;;3411:38;3445:2;3434:9;3430:18;3411:38;:::i;:::-;3401:48;;3195:260;;;;;:::o;3709:184::-;3761:77;3758:1;3751:88;3858:4;3855:1;3848:15;3882:4;3879:1;3872:15;3898:128;3965:9;;;3986:11;;;3983:37;;;4000:18;;:::i;4453:277::-;4520:6;4573:2;4561:9;4552:7;4548:23;4544:32;4541:52;;;4589:1;4586;4579:12;4541:52;4621:9;4615:16;4674:5;4667:13;4660:21;4653:5;4650:32;4640:60;;4696:1;4693;4686:12;4988:168;5061:9;;;5092;;5109:15;;;5103:22;;5089:37;5079:71;;5130:18;;:::i;5161:274::-;5201:1;5227;5217:189;;5262:77;5259:1;5252:88;5363:4;5360:1;5353:15;5391:4;5388:1;5381:15;5217:189;-1:-1:-1;5420:9:1;;5161:274::o;5440:125::-;5505:9;;;5526:10;;;5523:36;;;5539:18;;:::i;6226:184::-;6296:6;6349:2;6337:9;6328:7;6324:23;6320:32;6317:52;;;6365:1;6362;6355:12;6317:52;-1:-1:-1;6388:16:1;;6226:184;-1:-1:-1;6226:184:1:o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa164736f6c634300081a000a","offset":5671}},"immutableReferences":{"77":[{"start":1009,"length":32},{"start":1488,"length":32},{"start":2429,"length":32},{"start":2888,"length":32},{"start":3694,"length":32},{"start":4220,"length":32},{"start":4865,"length":32}],"80":[{"start":1137,"length":32},{"start":1402,"length":32},{"start":4620,"length":32}],"82":[{"start":836,"length":32},{"start":1574,"length":32}],"85":[{"start":797,"length":32},{"start":2101,"length":32}],"88":[{"start":758,"length":32},{"start":4399,"length":32},{"start":4661,"length":32}],"90":[{"start":1176,"length":32},{"start":4366,"length":32}]},"transformations":[{"id":"88","type":"replace","offset":758,"reason":"immutable"},{"id":"85","type":"replace","offset":797,"reason":"immutable"},{"id":"82","type":"replace","offset":836,"reason":"immutable"},{"id":"77","type":"replace","offset":1009,"reason":"immutable"},{"id":"80","type":"replace","offset":1137,"reason":"immutable"},{"id":"90","type":"replace","offset":1176,"reason":"immutable"},{"id":"80","type":"replace","offset":1402,"reason":"immutable"},{"id":"77","type":"replace","offset":1488,"reason":"immutable"},{"id":"82","type":"replace","offset":1574,"reason":"immutable"},{"id":"85","type":"replace","offset":2101,"reason":"immutable"},{"id":"77","type":"replace","offset":2429,"reason":"immutable"},{"id":"77","type":"replace","offset":2888,"reason":"immutable"},{"id":"77","type":"replace","offset":3694,"reason":"immutable"},{"id":"77","type":"replace","offset":4220,"reason":"immutable"},{"id":"90","type":"replace","offset":4366,"reason":"immutable"},{"id":"88","type":"replace","offset":4399,"reason":"immutable"},{"id":"80","type":"replace","offset":4620,"reason":"immutable"},{"id":"88","type":"replace","offset":4661,"reason":"immutable"},{"id":"77","type":"replace","offset":4865,"reason":"immutable"}],"transformationValues":{"immutables":{"77":"0x0000000000000000000000002b69099e59b05901faa1dd164fabf098bf831e82","80":"0x0000000000000000000000000457276d7b036818b3eddc1a4a3fceda61e9314d","82":"0x000000000000000000000000f9e2eec3b610ec6781f7438ac5fb4bc049d81cc1","85":"0x0000000000000000000000004b91078b2374c956a65f7af0999cae0a935e6821","88":"0x000000000000000000000000000000000000000000000000000000000013d620","90":"0x00000000000000000000000000000000000000000000000000000000000186a0"}}},"deployment":{"transactionHash":"0x024953f9c2e3be0cb042525c13717e10c32a4427e5b22c87a23f760a46818611","blockNumber":"11900274","transactionIndex":"131","deployer":"0x4b91078b2374c956A65F7Af0999CaE0a935E6821"},"sources":{"test/trial/TrialVenue.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\ninterface IERC20Min {\n    function transfer(address to, uint256 amount) external returns (bool);\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n    function approve(address spender, uint256 amount) external returns (bool);\n}\n\ninterface IStackerMin {\n    function credit(address trader, uint256 imdAmount) external returns (uint256 shares);\n    function SIMD() external view returns (address);\n}\n\n/// @title TrialVenue\n/// @notice The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue\n/// that follows every listing rule. It is a constant-product pool between IMD and its own token,\n/// TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1%\n/// fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc\n/// Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the\n/// pool once.\n///\n/// The trader is the caller when it is a plain wallet, else the active caller its router reports\n/// through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that\n/// cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the\n/// cashback in plain IMD. The gas for `credit` is checked before the call.\ncontract TrialVenue {\n    string public constant name = \"imd/acc trial token\";\n    string public constant symbol = \"TRIAL\";\n    uint8 public constant decimals = 18;\n\n    uint256 public constant BPS = 10_000;\n    uint256 public constant FEE_BPS = 100; // 1% of each trade's IMD side\n    uint256 public constant CASHBACK_BPS = 50; // to the trader, as staked IMD\n    uint256 public constant BURN_BPS = 50; // burned\n    address public constant BURN = 0x000000000000000000000000000000000000dEaD;\n    uint256 public constant TRIAL_SUPPLY = 1_000_000e18;\n\n    IERC20Min public immutable IMD;\n    IStackerMin public immutable stacker;\n    address public immutable SIMD;\n    /// @notice The only power the owner has: seeding the pool once.\n    address public immutable owner;\n    /// @notice Gas forwarded to `credit`, and the gas kept for the rest of the trade.\n    uint256 public immutable creditGas;\n    uint256 public immutable gasReserve;\n\n    uint256 public totalSupply;\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    uint256 public reserveImd;\n    uint256 public reserveTrial;\n    bool public seeded;\n    uint256 private _lock = 1;\n\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n    event Seeded(uint256 imd, uint256 trial);\n    event Trade(\n        address indexed caller,\n        address indexed trader,\n        bool buy,\n        uint256 imd,\n        uint256 trial,\n        uint256 cashback,\n        uint256 burned\n    );\n\n    error NotOwner();\n    error AlreadySeeded();\n    error NotSeeded();\n    error Slippage();\n    error ZeroAmount();\n    error Reentrant();\n\n    modifier nonReentrant() {\n        if (_lock != 1) revert Reentrant();\n        _lock = 2;\n        _;\n        _lock = 1;\n    }\n\n    constructor(IERC20Min imd, IStackerMin stacker_, uint256 creditGas_, uint256 gasReserve_) {\n        IMD = imd;\n        stacker = stacker_;\n        SIMD = stacker_.SIMD();\n        owner = msg.sender;\n        creditGas = creditGas_;\n        gasReserve = gasReserve_;\n        imd.approve(address(stacker_), type(uint256).max);\n        totalSupply = TRIAL_SUPPLY;\n        balanceOf[address(this)] = TRIAL_SUPPLY;\n        emit Transfer(address(0), address(this), TRIAL_SUPPLY);\n    }\n\n    // ------------------------------------------------------------------ pool\n\n    /// @notice Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way\n    /// to take liquidity out.\n    function seed(uint256 imdAmount) external {\n        if (msg.sender != owner) revert NotOwner();\n        if (seeded) revert AlreadySeeded();\n        if (imdAmount == 0) revert ZeroAmount();\n        seeded = true;\n        require(IMD.transferFrom(msg.sender, address(this), imdAmount));\n        reserveImd = imdAmount;\n        reserveTrial = TRIAL_SUPPLY;\n        emit Seeded(imdAmount, TRIAL_SUPPLY);\n    }\n\n    /// @notice Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned.\n    function buy(uint256 imdIn, uint256 minTrialOut)\n        external\n        nonReentrant\n        returns (uint256 trialOut)\n    {\n        if (!seeded) revert NotSeeded();\n        if (imdIn == 0) revert ZeroAmount();\n        require(IMD.transferFrom(msg.sender, address(this), imdIn));\n        uint256 fee = imdIn * FEE_BPS / BPS;\n        uint256 net = imdIn - fee;\n        trialOut = reserveTrial * net / (reserveImd + net);\n        if (trialOut == 0 || trialOut < minTrialOut) revert Slippage();\n        reserveImd += net;\n        reserveTrial -= trialOut;\n        _move(address(this), msg.sender, trialOut);\n        _settleFee(imdIn, fee, true, trialOut);\n    }\n\n    /// @notice Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half\n    /// burned.\n    function sell(uint256 trialIn, uint256 minImdOut)\n        external\n        nonReentrant\n        returns (uint256 imdOut)\n    {\n        if (!seeded) revert NotSeeded();\n        if (trialIn == 0) revert ZeroAmount();\n        _move(msg.sender, address(this), trialIn);\n        uint256 gross = reserveImd * trialIn / (reserveTrial + trialIn);\n        uint256 fee = gross * FEE_BPS / BPS;\n        imdOut = gross - fee;\n        if (imdOut == 0 || imdOut < minImdOut) revert Slippage();\n        reserveImd -= gross;\n        reserveTrial += trialIn;\n        require(IMD.transfer(msg.sender, imdOut));\n        _settleFee(gross, fee, false, trialIn);\n    }\n\n    /// @dev Splits a trade's fee: the cashback to the resolved trader, the rest burned.\n    function _settleFee(uint256 imd, uint256 fee, bool isBuy, uint256 trial) internal {\n        uint256 cashback = fee * CASHBACK_BPS / FEE_BPS;\n        uint256 burned = fee - cashback;\n        address trader = resolveTrader(msg.sender);\n        if (trader == address(0)) {\n            burned += cashback; // no valid trader: the cashback is burned, never paid to a router\n            cashback = 0;\n        }\n        if (burned > 0) require(IMD.transfer(BURN, burned));\n        if (cashback > 0) {\n            require(gasleft() >= creditGas + gasReserve, \"imd/acc: insufficient gas\");\n            try stacker.credit{gas: creditGas}(trader, cashback) {}\n            catch {\n                require(IMD.transfer(trader, cashback)); // plain IMD: the trade never reverts\n            }\n        }\n        emit Trade(msg.sender, trader, isBuy, imd, trial, cashback, burned);\n    }\n\n    /// @notice The trader of a trade made by `who`: `who` itself when it has no code, else\n    /// the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes\n    /// read). Zero when no valid trader can be resolved.\n    function resolveTrader(address who) public view returns (address trader) {\n        if (who.code.length == 0) {\n            trader = who;\n        } else {\n            bool ok;\n            uint256 size;\n            uint256 value;\n            assembly (\"memory-safe\") {\n                mstore(0, 0xd737d0c700000000000000000000000000000000000000000000000000000000) // msgSender()\n                ok := staticcall(30000, who, 0, 4, 0, 32)\n                size := returndatasize()\n                value := mload(0)\n            }\n            if (!ok || size != 32 || value > type(uint160).max) return address(0);\n            trader = address(uint160(value));\n        }\n        if (\n            trader == address(0) || trader == address(stacker) || trader == address(IMD)\n                || trader == SIMD || trader == address(this)\n                || (trader == who && who.code.length != 0)\n        ) return address(0);\n    }\n\n    // ------------------------------------------------------------------ TRIAL token\n\n    function transfer(address to, uint256 amount) external returns (bool) {\n        _move(msg.sender, to, amount);\n        return true;\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        emit Approval(msg.sender, spender, amount);\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        uint256 a = allowance[from][msg.sender];\n        if (a != type(uint256).max) allowance[from][msg.sender] = a - amount;\n        _move(from, to, amount);\n        return true;\n    }\n\n    function _move(address from, address to, uint256 amount) internal {\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        emit Transfer(from, to, amount);\n    }\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.26+commit.8a97fa7a","compilerSettings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"none","useLiteralContent":false},"libraries":{},"optimizer":{"runs":10000,"enabled":true},"evmVersion":"cancun","remappings":["forge-std/=lib/forge-std/src/","solady/=lib/solady/src/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"]},"name":"TrialVenue","fullyQualifiedName":"test/trial/TrialVenue.sol:TrialVenue"},"abi":[{"type":"constructor","inputs":[{"name":"imd","type":"address","internalType":"contract IERC20Min"},{"name":"stacker_","type":"address","internalType":"contract IStackerMin"},{"name":"creditGas_","type":"uint256","internalType":"uint256"},{"name":"gasReserve_","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"AlreadySeeded","type":"error","inputs":[]},{"name":"NotOwner","type":"error","inputs":[]},{"name":"NotSeeded","type":"error","inputs":[]},{"name":"Reentrant","type":"error","inputs":[]},{"name":"Slippage","type":"error","inputs":[]},{"name":"ZeroAmount","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Seeded","type":"event","inputs":[{"name":"imd","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"trial","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Trade","type":"event","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"trader","type":"address","indexed":true,"internalType":"address"},{"name":"buy","type":"bool","indexed":false,"internalType":"bool"},{"name":"imd","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"trial","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"cashback","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"burned","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"BURN","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"BURN_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"CASHBACK_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FEE_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IMD","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20Min"}],"stateMutability":"view"},{"name":"SIMD","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"TRIAL_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"buy","type":"function","inputs":[{"name":"imdIn","type":"uint256","internalType":"uint256"},{"name":"minTrialOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"trialOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"creditGas","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"gasReserve","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"reserveImd","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"reserveTrial","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"resolveTrader","type":"function","inputs":[{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"trader","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"seed","type":"function","inputs":[{"name":"imdAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"seeded","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"sell","type":"function","inputs":[{"name":"trialIn","type":"uint256","internalType":"uint256"},{"name":"minImdOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"imdOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"stacker","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStackerMin"}],"stateMutability":"view"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IERC20Min","name":"imd","type":"address"},{"internalType":"contract IStackerMin","name":"stacker_","type":"address"},{"internalType":"uint256","name":"creditGas_","type":"uint256"},{"internalType":"uint256","name":"gasReserve_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadySeeded","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotSeeded","type":"error"},{"inputs":[],"name":"Reentrant","type":"error"},{"inputs":[],"name":"Slippage","type":"error"},{"inputs":[],"name":"ZeroAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"imd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"trial","type":"uint256"}],"name":"Seeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"imd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"trial","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cashback","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burned","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURN_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CASHBACK_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IMD","outputs":[{"internalType":"contract IERC20Min","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIMD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"imdIn","type":"uint256"},{"internalType":"uint256","name":"minTrialOut","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"trialOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creditGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveImd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveTrial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"resolveTrader","outputs":[{"internalType":"address","name":"trader","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"imdAmount","type":"uint256"}],"name":"seed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"trialIn","type":"uint256"},{"internalType":"uint256","name":"minImdOut","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"imdOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stacker","outputs":[{"internalType":"contract IStackerMin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"title":"TrialVenue","version":1},"userdoc":{"kind":"user","methods":{"buy(uint256,uint256)":{"notice":"Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned."},"creditGas()":{"notice":"Gas forwarded to `credit`, and the gas kept for the rest of the trade."},"owner()":{"notice":"The only power the owner has: seeding the pool once."},"resolveTrader(address)":{"notice":"The trader of a trade made by `who`: `who` itself when it has no code, else the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes read). Zero when no valid trader can be resolved."},"seed(uint256)":{"notice":"Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way to take liquidity out."},"sell(uint256,uint256)":{"notice":"Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half burned."}},"notice":"The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue that follows every listing rule. It is a constant-product pool between IMD and its own token, TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1% fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the pool once. The trader is the caller when it is a plain wallet, else the active caller its router reports through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the cashback in plain IMD. The gas for `credit` is checked before the call.","version":1}},"settings":{"compilationTarget":{"test/trial/TrialVenue.sol":"TrialVenue"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"none"},"optimizer":{"enabled":true,"runs":10000},"remappings":[":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",":forge-std/=lib/forge-std/src/",":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",":solady/=lib/solady/src/"]},"sources":{"test/trial/TrialVenue.sol":{"keccak256":"0x56d09fe3ee134ef67649a9a9e57d70f2281edf2ab866773259e7e8953f4b3630","license":"MIT","urls":["bzz-raw://5329d71b39dd71f7b14ed34442fe65f86f2eb6053312ff981445641c2e277c94","dweb:/ipfs/QmQdyg2GgXwCvXrz6TPmyzTYJ6FMVARmW4Ww6787rBed3W"]}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":92,"label":"totalSupply","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"1","type":"t_mapping(t_address,t_uint256)","astId":96,"label":"balanceOf","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":102,"label":"allowance","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"3","type":"t_uint256","astId":104,"label":"reserveImd","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"4","type":"t_uint256","astId":106,"label":"reserveTrial","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"5","type":"t_bool","astId":108,"label":"seeded","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"6","type":"t_uint256","astId":111,"label":"_lock","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue that follows every listing rule. It is a constant-product pool between IMD and its own token, TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1% fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the pool once. The trader is the caller when it is a plain wallet, else the active caller its router reports through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the cashback in plain IMD. The gas for `credit` is checked before the call.","methods":{"owner()":{"notice":"The only power the owner has: seeding the pool once."},"creditGas()":{"notice":"Gas forwarded to `credit`, and the gas kept for the rest of the trade."},"seed(uint256)":{"notice":"Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way to take liquidity out."},"buy(uint256,uint256)":{"notice":"Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned."},"sell(uint256,uint256)":{"notice":"Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half burned."},"resolveTrader(address)":{"notice":"The trader of a trade made by `who`: `who` itself when it has no code, else the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes read). Zero when no valid trader can be resolved."}},"version":1},"devdoc":{"kind":"dev","title":"TrialVenue","methods":{},"version":1},"sourceIds":{"test/trial/TrialVenue.sol":{"id":0}},"additionalInput":null,"stdJsonInput":{"sources":{"test/trial/TrialVenue.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\ninterface IERC20Min {\n    function transfer(address to, uint256 amount) external returns (bool);\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n    function approve(address spender, uint256 amount) external returns (bool);\n}\n\ninterface IStackerMin {\n    function credit(address trader, uint256 imdAmount) external returns (uint256 shares);\n    function SIMD() external view returns (address);\n}\n\n/// @title TrialVenue\n/// @notice The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue\n/// that follows every listing rule. It is a constant-product pool between IMD and its own token,\n/// TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1%\n/// fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc\n/// Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the\n/// pool once.\n///\n/// The trader is the caller when it is a plain wallet, else the active caller its router reports\n/// through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that\n/// cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the\n/// cashback in plain IMD. The gas for `credit` is checked before the call.\ncontract TrialVenue {\n    string public constant name = \"imd/acc trial token\";\n    string public constant symbol = \"TRIAL\";\n    uint8 public constant decimals = 18;\n\n    uint256 public constant BPS = 10_000;\n    uint256 public constant FEE_BPS = 100; // 1% of each trade's IMD side\n    uint256 public constant CASHBACK_BPS = 50; // to the trader, as staked IMD\n    uint256 public constant BURN_BPS = 50; // burned\n    address public constant BURN = 0x000000000000000000000000000000000000dEaD;\n    uint256 public constant TRIAL_SUPPLY = 1_000_000e18;\n\n    IERC20Min public immutable IMD;\n    IStackerMin public immutable stacker;\n    address public immutable SIMD;\n    /// @notice The only power the owner has: seeding the pool once.\n    address public immutable owner;\n    /// @notice Gas forwarded to `credit`, and the gas kept for the rest of the trade.\n    uint256 public immutable creditGas;\n    uint256 public immutable gasReserve;\n\n    uint256 public totalSupply;\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    uint256 public reserveImd;\n    uint256 public reserveTrial;\n    bool public seeded;\n    uint256 private _lock = 1;\n\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n    event Seeded(uint256 imd, uint256 trial);\n    event Trade(\n        address indexed caller,\n        address indexed trader,\n        bool buy,\n        uint256 imd,\n        uint256 trial,\n        uint256 cashback,\n        uint256 burned\n    );\n\n    error NotOwner();\n    error AlreadySeeded();\n    error NotSeeded();\n    error Slippage();\n    error ZeroAmount();\n    error Reentrant();\n\n    modifier nonReentrant() {\n        if (_lock != 1) revert Reentrant();\n        _lock = 2;\n        _;\n        _lock = 1;\n    }\n\n    constructor(IERC20Min imd, IStackerMin stacker_, uint256 creditGas_, uint256 gasReserve_) {\n        IMD = imd;\n        stacker = stacker_;\n        SIMD = stacker_.SIMD();\n        owner = msg.sender;\n        creditGas = creditGas_;\n        gasReserve = gasReserve_;\n        imd.approve(address(stacker_), type(uint256).max);\n        totalSupply = TRIAL_SUPPLY;\n        balanceOf[address(this)] = TRIAL_SUPPLY;\n        emit Transfer(address(0), address(this), TRIAL_SUPPLY);\n    }\n\n    // ------------------------------------------------------------------ pool\n\n    /// @notice Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way\n    /// to take liquidity out.\n    function seed(uint256 imdAmount) external {\n        if (msg.sender != owner) revert NotOwner();\n        if (seeded) revert AlreadySeeded();\n        if (imdAmount == 0) revert ZeroAmount();\n        seeded = true;\n        require(IMD.transferFrom(msg.sender, address(this), imdAmount));\n        reserveImd = imdAmount;\n        reserveTrial = TRIAL_SUPPLY;\n        emit Seeded(imdAmount, TRIAL_SUPPLY);\n    }\n\n    /// @notice Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned.\n    function buy(uint256 imdIn, uint256 minTrialOut)\n        external\n        nonReentrant\n        returns (uint256 trialOut)\n    {\n        if (!seeded) revert NotSeeded();\n        if (imdIn == 0) revert ZeroAmount();\n        require(IMD.transferFrom(msg.sender, address(this), imdIn));\n        uint256 fee = imdIn * FEE_BPS / BPS;\n        uint256 net = imdIn - fee;\n        trialOut = reserveTrial * net / (reserveImd + net);\n        if (trialOut == 0 || trialOut < minTrialOut) revert Slippage();\n        reserveImd += net;\n        reserveTrial -= trialOut;\n        _move(address(this), msg.sender, trialOut);\n        _settleFee(imdIn, fee, true, trialOut);\n    }\n\n    /// @notice Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half\n    /// burned.\n    function sell(uint256 trialIn, uint256 minImdOut)\n        external\n        nonReentrant\n        returns (uint256 imdOut)\n    {\n        if (!seeded) revert NotSeeded();\n        if (trialIn == 0) revert ZeroAmount();\n        _move(msg.sender, address(this), trialIn);\n        uint256 gross = reserveImd * trialIn / (reserveTrial + trialIn);\n        uint256 fee = gross * FEE_BPS / BPS;\n        imdOut = gross - fee;\n        if (imdOut == 0 || imdOut < minImdOut) revert Slippage();\n        reserveImd -= gross;\n        reserveTrial += trialIn;\n        require(IMD.transfer(msg.sender, imdOut));\n        _settleFee(gross, fee, false, trialIn);\n    }\n\n    /// @dev Splits a trade's fee: the cashback to the resolved trader, the rest burned.\n    function _settleFee(uint256 imd, uint256 fee, bool isBuy, uint256 trial) internal {\n        uint256 cashback = fee * CASHBACK_BPS / FEE_BPS;\n        uint256 burned = fee - cashback;\n        address trader = resolveTrader(msg.sender);\n        if (trader == address(0)) {\n            burned += cashback; // no valid trader: the cashback is burned, never paid to a router\n            cashback = 0;\n        }\n        if (burned > 0) require(IMD.transfer(BURN, burned));\n        if (cashback > 0) {\n            require(gasleft() >= creditGas + gasReserve, \"imd/acc: insufficient gas\");\n            try stacker.credit{gas: creditGas}(trader, cashback) {}\n            catch {\n                require(IMD.transfer(trader, cashback)); // plain IMD: the trade never reverts\n            }\n        }\n        emit Trade(msg.sender, trader, isBuy, imd, trial, cashback, burned);\n    }\n\n    /// @notice The trader of a trade made by `who`: `who` itself when it has no code, else\n    /// the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes\n    /// read). Zero when no valid trader can be resolved.\n    function resolveTrader(address who) public view returns (address trader) {\n        if (who.code.length == 0) {\n            trader = who;\n        } else {\n            bool ok;\n            uint256 size;\n            uint256 value;\n            assembly (\"memory-safe\") {\n                mstore(0, 0xd737d0c700000000000000000000000000000000000000000000000000000000) // msgSender()\n                ok := staticcall(30000, who, 0, 4, 0, 32)\n                size := returndatasize()\n                value := mload(0)\n            }\n            if (!ok || size != 32 || value > type(uint160).max) return address(0);\n            trader = address(uint160(value));\n        }\n        if (\n            trader == address(0) || trader == address(stacker) || trader == address(IMD)\n                || trader == SIMD || trader == address(this)\n                || (trader == who && who.code.length != 0)\n        ) return address(0);\n    }\n\n    // ------------------------------------------------------------------ TRIAL token\n\n    function transfer(address to, uint256 amount) external returns (bool) {\n        _move(msg.sender, to, amount);\n        return true;\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        emit Approval(msg.sender, spender, amount);\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        uint256 a = allowance[from][msg.sender];\n        if (a != type(uint256).max) allowance[from][msg.sender] = a - amount;\n        _move(from, to, amount);\n        return true;\n    }\n\n    function _move(address from, address to, uint256 amount) internal {\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        emit Transfer(from, to, amount);\n    }\n}\n"}},"language":"Solidity","settings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"none","useLiteralContent":false},"libraries":{},"optimizer":{"runs":10000,"enabled":true},"evmVersion":"cancun","remappings":["forge-std/=lib/forge-std/src/","solady/=lib/solady/src/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"]}},"stdJsonOutput":{"sources":{"test/trial/TrialVenue.sol":{"id":0}},"contracts":{"test/trial/TrialVenue.sol":{"TrialVenue":{"abi":[{"type":"constructor","inputs":[{"name":"imd","type":"address","internalType":"contract IERC20Min"},{"name":"stacker_","type":"address","internalType":"contract IStackerMin"},{"name":"creditGas_","type":"uint256","internalType":"uint256"},{"name":"gasReserve_","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"AlreadySeeded","type":"error","inputs":[]},{"name":"NotOwner","type":"error","inputs":[]},{"name":"NotSeeded","type":"error","inputs":[]},{"name":"Reentrant","type":"error","inputs":[]},{"name":"Slippage","type":"error","inputs":[]},{"name":"ZeroAmount","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Seeded","type":"event","inputs":[{"name":"imd","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"trial","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Trade","type":"event","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"trader","type":"address","indexed":true,"internalType":"address"},{"name":"buy","type":"bool","indexed":false,"internalType":"bool"},{"name":"imd","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"trial","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"cashback","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"burned","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"BURN","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"BURN_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"CASHBACK_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FEE_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IMD","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20Min"}],"stateMutability":"view"},{"name":"SIMD","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"TRIAL_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"buy","type":"function","inputs":[{"name":"imdIn","type":"uint256","internalType":"uint256"},{"name":"minTrialOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"trialOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"creditGas","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"gasReserve","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"reserveImd","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"reserveTrial","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"resolveTrader","type":"function","inputs":[{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"trader","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"seed","type":"function","inputs":[{"name":"imdAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"seeded","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"sell","type":"function","inputs":[{"name":"trialIn","type":"uint256","internalType":"uint256"},{"name":"minImdOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"imdOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"stacker","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStackerMin"}],"stateMutability":"view"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20Min\",\"name\":\"imd\",\"type\":\"address\"},{\"internalType\":\"contract IStackerMin\",\"name\":\"stacker_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"creditGas_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadySeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Slippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"imd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"trial\",\"type\":\"uint256\"}],\"name\":\"Seeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"buy\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"imd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"trial\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cashback\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burned\",\"type\":\"uint256\"}],\"name\":\"Trade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CASHBACK_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMD\",\"outputs\":[{\"internalType\":\"contract IERC20Min\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SIMD\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRIAL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"imdIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTrialOut\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"trialOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveImd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveTrial\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"resolveTrader\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"imdAmount\",\"type\":\"uint256\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seeded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"trialIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minImdOut\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"imdOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stacker\",\"outputs\":[{\"internalType\":\"contract IStackerMin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"TrialVenue\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"buy(uint256,uint256)\":{\"notice\":\"Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned.\"},\"creditGas()\":{\"notice\":\"Gas forwarded to `credit`, and the gas kept for the rest of the trade.\"},\"owner()\":{\"notice\":\"The only power the owner has: seeding the pool once.\"},\"resolveTrader(address)\":{\"notice\":\"The trader of a trade made by `who`: `who` itself when it has no code, else the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes read). Zero when no valid trader can be resolved.\"},\"seed(uint256)\":{\"notice\":\"Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way to take liquidity out.\"},\"sell(uint256,uint256)\":{\"notice\":\"Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half burned.\"}},\"notice\":\"The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue that follows every listing rule. It is a constant-product pool between IMD and its own token, TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1% fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the pool once. The trader is the caller when it is a plain wallet, else the active caller its router reports through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the cashback in plain IMD. The gas for `credit` is checked before the call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/trial/TrialVenue.sol\":\"TrialVenue\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"test/trial/TrialVenue.sol\":{\"keccak256\":\"0x56d09fe3ee134ef67649a9a9e57d70f2281edf2ab866773259e7e8953f4b3630\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5329d71b39dd71f7b14ed34442fe65f86f2eb6053312ff981445641c2e277c94\",\"dweb:/ipfs/QmQdyg2GgXwCvXrz6TPmyzTYJ6FMVARmW4Ww6787rBed3W\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"The positive case for the imd/acc ProjectRegistry trial on Sepolia: a small trading venue that follows every listing rule. It is a constant-product pool between IMD and its own token, TRIAL (this contract), and its liquidity can never be withdrawn by anyone. Every trade pays a 1% fee on its IMD side: 0.5% is the trader's cashback, credited as staked IMD through the imd/acc Stacker, and 0.5% is burned (sent to 0x...dEaD). Nothing goes to the owner, who can only seed the pool once. The trader is the caller when it is a plain wallet, else the active caller its router reports through `msgSender()`; a caller that resolves to no valid trader gets no cashback, and that cashback is burned instead (never paid to a router). If `credit` fails, the trader is paid the cashback in plain IMD. The gas for `credit` is checked before the call.","methods":{"owner()":{"notice":"The only power the owner has: seeding the pool once."},"creditGas()":{"notice":"Gas forwarded to `credit`, and the gas kept for the rest of the trade."},"seed(uint256)":{"notice":"Locks `imdAmount` IMD and the whole TRIAL supply into the pool, once. There is no way to take liquidity out."},"buy(uint256,uint256)":{"notice":"Pay `imdIn` IMD for TRIAL. 1% of `imdIn` is the fee: half cashback, half burned."},"sell(uint256,uint256)":{"notice":"Sell `trialIn` TRIAL for IMD. 1% of the IMD paid out is the fee: half cashback, half burned."},"resolveTrader(address)":{"notice":"The trader of a trade made by `who`: `who` itself when it has no code, else the active caller its router reports through `msgSender()` (bounded gas, at most 32 bytes read). Zero when no valid trader can be resolved."}},"version":1},"devdoc":{"kind":"dev","title":"TrialVenue","methods":{},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":92,"label":"totalSupply","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"1","type":"t_mapping(t_address,t_uint256)","astId":96,"label":"balanceOf","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":102,"label":"allowance","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"3","type":"t_uint256","astId":104,"label":"reserveImd","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"4","type":"t_uint256","astId":106,"label":"reserveTrial","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"5","type":"t_bool","astId":108,"label":"seeded","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"},{"slot":"6","type":"t_uint256","astId":111,"label":"_lock","offset":0,"contract":"test/trial/TrialVenue.sol:TrialVenue"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"6101406040526001600655348015610015575f80fd5b50604051611902380380611902833981016040819052610034916101a7565b6001600160a01b03808516608052831660a081905260408051638fb56bef60e01b81529051638fb56bef916004808201926020929091908290030181865afa158015610082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a691906101ec565b6001600160a01b0390811660c0523360e05261010083905261012082905260405163095ea7b360e01b815284821660048201525f1960248201529085169063095ea7b3906044016020604051808303815f875af1158015610109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012d919061020e565b5069d3c21bcecceda10000005f81815530808252600160205260408083208490555190927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161017f91815260200190565b60405180910390a35050505061022d565b6001600160a01b03811681146101a4575f80fd5b50565b5f805f80608085870312156101ba575f80fd5b84516101c581610190565b60208601519094506101d681610190565b6040860151606090960151949790965092505050565b5f602082840312156101fc575f80fd5b815161020781610190565b9392505050565b5f6020828403121561021e575f80fd5b81518015158114610207575f80fd5b60805160a05160c05160e05161010051610120516116336102cf5f395f8181610498015261110e01525f81816102f60152818161112f015261123501525f818161031d015261083501525f8181610344015261062601525f81816104710152818161057a015261120c01525f81816103f1015281816105d00152818161097d01528181610b4801528181610e6e0152818161107c015261130101526116335ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063ef6506db907f0000000000000000000000000000000000000000000000000000000000000000906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"1411:7578:0:-:0;;;2618:1;2594:25;;3306:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3406:9:0;;;;;3425:18;;;;;;3460:15;;;-1:-1:-1;;;3460:15:0;;;;:13;;:15;;;;;;;;;;;;;;;3425:18;3460:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3453:22:0;;;;;3493:10;3485:18;;3513:22;;;;3545:24;;;;3579:49;;-1:-1:-1;;;3579:49:0;;1293:32:1;;;3579:49:0;;;1275:51:1;-1:-1:-1;;1342:18:1;;;1335:34;3579:11:0;;;;;;1248:18:1;;3579:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1947:12:0;3638:11;:26;;;3692:4;3674:24;;;:9;:24;;;;;;:39;;;3728:49;3692:4;;3728:49;;;;1808:25:1;;1796:2;1781:18;;1662:177;3728:49:0;;;;;;;;3306:478;;;;1411:7578;;14:142:1;-1:-1:-1;;;;;100:31:1;;90:42;;80:70;;146:1;143;136:12;80:70;14:142;:::o;161:668::-;292:6;300;308;316;369:3;357:9;348:7;344:23;340:33;337:53;;;386:1;383;376:12;337:53;418:9;412:16;437:42;473:5;437:42;:::i;:::-;548:2;533:18;;527:25;498:5;;-1:-1:-1;561:44:1;527:25;561:44;:::i;:::-;697:2;682:18;;676:25;793:2;778:18;;;772:25;161:668;;624:7;;-1:-1:-1;161:668:1;-1:-1:-1;;;161:668:1:o;834:262::-;904:6;957:2;945:9;936:7;932:23;928:32;925:52;;;973:1;970;963:12;925:52;1005:9;999:16;1024:42;1060:5;1024:42;:::i;:::-;1085:5;834:262;-1:-1:-1;;;834:262:1:o;1380:277::-;1447:6;1500:2;1488:9;1479:7;1475:23;1471:32;1468:52;;;1516:1;1513;1506:12;1468:52;1548:9;1542:16;1601:5;1594:13;1587:21;1580:5;1577:32;1567:60;;1623:1;1620;1613:12;1662:177;1411:7578:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063931b95bb116100f3578063d0abb69311610093578063dd62ed3e1161006e578063dd62ed3e14610439578063e2417e1a14610463578063e6fd6bd51461046c578063eea7570e14610493575f80fd5b8063d0abb693146103ec578063d6febde814610413578063d79875eb14610426575f80fd5b8063a37a9fc0116100ce578063a37a9fc0146102ca578063a9059cbb146103c8578063bf333f2c146103db578063c0a2526c146103e3575f80fd5b8063931b95bb14610366578063955648371461037757806395d89b411461038c575f80fd5b8063313ce5671161015e57806370a082311161013957806370a08231146102d257806386cb90be146102f15780638da5cb5b146103185780638fb56bef1461033f575f80fd5b8063313ce567146102a3578063334041a6146102bd57806359cf0f00146102ca575f80fd5b8063095ea7b311610199578063095ea7b31461025c57806318160ddd1461027f57806323b872dd14610287578063249d39e91461029a575f80fd5b806304ccc04d146101bf57806306fdde03146101fc578063090b76c314610245575b5f80fd5b6101d26101cd366004611411565b6104ba565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102386040518060400160405280601381526020017f696d642f61636320747269616c20746f6b656e0000000000000000000000000081525081565b6040516101f39190611431565b61024e60045481565b6040519081526020016101f3565b61026f61026a366004611484565b6106fc565b60405190151581526020016101f3565b61024e5f5481565b61026f6102953660046114ac565b610775565b61024e61271081565b6102ab601281565b60405160ff90911681526020016101f3565b60055461026f9060ff1681565b61024e603281565b61024e6102e0366004611411565b60016020525f908152604090205481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e69d3c21bcecceda100000081565b61038a6103853660046114e6565b61081d565b005b6102386040518060400160405280600581526020017f545249414c00000000000000000000000000000000000000000000000000000081525081565b61026f6103d6366004611484565b610a41565b61024e606481565b6101d261dead81565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e6104213660046114fd565b610a56565b61024e6104343660046114fd565b610cb6565b61024e61044736600461151d565b600260209081525f928352604080842090915290825290205481565b61024e60035481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff163b5f036104e057508061055a565b5f805f7fd737d0c7000000000000000000000000000000000000000000000000000000005f5260205f60045f88617530fa92503d91505f519050821580610528575081602014155b80610546575073ffffffffffffffffffffffffffffffffffffffff81115b1561055557505f949350505050565b925050505b73ffffffffffffffffffffffffffffffffffffffff811615806105c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061061e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8061067457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610694575073ffffffffffffffffffffffffffffffffffffffff811630145b806106eb57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156106eb575073ffffffffffffffffffffffffffffffffffffffff82163b15155b156106f757505f919050565b919050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610807576107d6838261157b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b610812858585610f01565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff16156108c9576040517f4313f1c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610902576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156109c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e7919061158e565b6109ef575f80fd5b600381905569d3c21bcecceda100000060048190556040805183815260208101929092527f67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035910160405180910390a150565b5f610a4d338484610f01565b50600192915050565b5f600654600114610a93576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610ad4576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610b0d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc7919061158e565b610bcf575f80fd5b5f612710610bde6064866115ad565b610be891906115c4565b90505f610bf5828661157b565b905080600354610c0591906115fc565b81600454610c1391906115ad565b610c1d91906115c4565b9250821580610c2b57508383105b15610c62576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f828254610c7391906115fc565b925050819055508260045f828254610c8b919061157b565b90915550610c9c9050303385610f01565b610ca98583600186610fe1565b5050600160065592915050565b5f600654600114610cf3576040517fed3ba6a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055460ff16610d34576040517f0f473f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f03610d6d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d78333085610f01565b5f83600454610d8791906115fc565b84600354610d9591906115ad565b610d9f91906115c4565b90505f612710610db06064846115ad565b610dba91906115c4565b9050610dc6818361157b565b9250821580610dd457508383105b15610e0b576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160035f828254610e1c919061157b565b925050819055508460045f828254610e3491906115fc565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015610ec9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eed919061158e565b610ef5575f80fd5b610ca982825f88610fe1565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081208054839290610f3590849061157b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610f6e9084906115fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fd491815260200190565b60405180910390a3505050565b5f6064610fef6032866115ad565b610ff991906115c4565b90505f611006828661157b565b90505f611012336104ba565b905073ffffffffffffffffffffffffffffffffffffffff811661103f5761103983836115fc565b91505f92505b8115611103576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815261dead6004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156110d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fb919061158e565b611103575f80fd5b821561137a576111537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115fc565b5a10156111c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696d642f6163633a20696e73756666696369656e742067617300000000000000604482015260640160405180910390fd5b6040517fef6506db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063ef6506db907f0000000000000000000000000000000000000000000000000000000000000000906044016020604051808303815f8887f1935050505080156112b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112ae9181019061160f565b60015b611378576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b919061158e565b611373575f80fd5b61137a565b505b60408051861515815260208101899052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff82169033907f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c829829060a00160405180910390a350505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f7575f80fd5b5f60208284031215611421575f80fd5b61142a826113ee565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611495575f80fd5b61149e836113ee565b946020939093013593505050565b5f805f606084860312156114be575f80fd5b6114c7846113ee565b92506114d5602085016113ee565b929592945050506040919091013590565b5f602082840312156114f6575f80fd5b5035919050565b5f806040838503121561150e575f80fd5b50508035926020909101359150565b5f806040838503121561152e575f80fd5b611537836113ee565b9150611545602084016113ee565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561076f5761076f61154e565b5f6020828403121561159e575f80fd5b8151801515811461142a575f80fd5b808202811582820484141761076f5761076f61154e565b5f826115f7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561076f5761076f61154e565b5f6020828403121561161f575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"1411:7578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7160:918;;;;;;:::i;:::-;;:::i;:::-;;;582:42:1;570:55;;;552:74;;540:2;525:18;7160:918:0;;;;;;;;1437:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2537:27::-;;;;;;;;;1265:25:1;;;1253:2;1238:18;2537:27:0;1119:177:1;8314:203:0;;;;;;:::i;:::-;;:::i;:::-;;;1771:14:1;;1764:22;1746:41;;1734:2;1719:18;8314:203:0;1606:187:1;2353:26:0;;;;;;8523:276;;;;;;:::i;:::-;;:::i;1581:36::-;;1611:6;1581:36;;1539:35;;1572:2;1539:35;;;;;2349:4:1;2337:17;;;2319:36;;2307:2;2292:18;1539:35:0;2177:184:1;2570:18:0;;;;;;;;;1697:41;;1736:2;1697:41;;2385:44;;;;;;:::i;:::-;;;;;;;;;;;;;;2271:34;;;;;2148:30;;;;;2044:29;;;;;1908:51;;1947:12;1908:51;;4003:405;;;;;;:::i;:::-;;:::i;:::-;;1494:39;;;;;;;;;;;;;;;;;;;;;8171:137;;;;;;:::i;:::-;;:::i;1623:37::-;;1657:3;1623:37;;1829:73;;1860:42;1829:73;;1966:30;;;;;4511:661;;;;;;:::i;:::-;;:::i;5295:646::-;;;;;;:::i;:::-;;:::i;2435:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2506:25;;;;;;2002:36;;;;;2311:35;;;;;7160:918;7217:14;7247:3;:15;;;7266:1;7247:20;7243:578;;-1:-1:-1;7292:3:0;7243:578;;;7326:7;7347:12;7373:13;7453:66;7450:1;7443:77;7590:2;7587:1;7584;7581;7576:3;7569:5;7558:35;7552:41;;7618:16;7610:24;;7666:1;7660:8;7651:17;;7700:2;7699:3;:17;;;;7706:4;7714:2;7706:10;;7699:17;:46;;;-1:-1:-1;7728:17:0;7720:25;;7699:46;7695:69;;;-1:-1:-1;7762:1:0;;7160:918;-1:-1:-1;;;;7160:918:0:o;7695:69::-;7803:5;-1:-1:-1;;;7243:578:0;7847:20;;;;;:50;;;7889:7;7871:26;;:6;:26;;;7847:50;:76;;;;7919:3;7901:22;;:6;:22;;;7847:76;:110;;;;7953:4;7943:14;;:6;:14;;;7847:110;:137;;;-1:-1:-1;7961:23:0;;;7979:4;7961:23;7847:137;:196;;;;8015:3;8005:13;;:6;:13;;;:37;;;;-1:-1:-1;8022:15:0;;;;:20;;8005:37;7830:241;;;-1:-1:-1;8069:1:0;;7160:918;-1:-1:-1;7160:918:0:o;7830:241::-;7160:918;;;:::o;8314:203::-;8408:10;8382:4;8398:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;8452:37;8382:4;;8398:30;;8452:37;;;;8431:6;1265:25:1;;1253:2;1238:18;;1119:177;8452:37:0;;;;;;;;-1:-1:-1;8506:4:0;8314:203;;;;;:::o;8523:276::-;8633:15;;;8605:4;8633:15;;;:9;:15;;;;;;;;8649:10;8633:27;;;;;;;;8679:17;8674:22;;8670:68;;8728:10;8732:6;8728:1;:10;:::i;:::-;8698:15;;;;;;;:9;:15;;;;;;;;8714:10;8698:27;;;;;;;:40;8670:68;8748:23;8754:4;8760:2;8764:6;8748:5;:23::i;:::-;-1:-1:-1;8788:4:0;;8523:276;-1:-1:-1;;;;8523:276:0:o;4003:405::-;4059:10;:19;4073:5;4059:19;;4055:42;;4087:10;;;;;;;;;;;;;;4055:42;4111:6;;;;4107:34;;;4126:15;;;;;;;;;;;;;;4107:34;4155:9;4168:1;4155:14;4151:39;;4178:12;;;;;;;;;;;;;;4151:39;4200:6;:13;;;;4209:4;4200:13;;;4231:54;;;;;4248:10;4231:54;;;4233:74:1;4268:4:0;4323:18:1;;;4316:83;4415:18;;;4408:34;;;4231:16:0;:3;:16;;;;4206:18:1;;4231:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4223:63;;;;;;4296:10;:22;;;1947:12;4328;:27;;;4370:31;;;4909:25:1;;;4965:2;4950:18;;4943:34;;;;4370:31:0;;4882:18:1;4370:31:0;;;;;;;4003:405;:::o;8171:137::-;8235:4;8251:29;8257:10;8269:2;8273:6;8251:5;:29::i;:::-;-1:-1:-1;8297:4:0;8171:137;;;;:::o;4511:661::-;4615:16;3214:5;;3223:1;3214:10;3210:34;;3233:11;;;;;;;;;;;;;;3210:34;3262:1;3254:5;:9;4652:6:::1;::::0;::::1;;4647:31;;4667:11;;;;;;;;;;;;;;4647:31;4692:5;4701:1;4692:10:::0;4688:35:::1;;4711:12;;;;;;;;;;;;;;4688:35;4741:50;::::0;;;;4758:10:::1;4741:50;::::0;::::1;4233:74:1::0;4778:4:0::1;4323:18:1::0;;;4316:83;4415:18;;;4408:34;;;4741:3:0::1;:16;;::::0;::::1;::::0;4206:18:1;;4741:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4733:59;;;::::0;::::1;;4802:11;1611:6;4816:15;1657:3;4816:5:::0;:15:::1;:::i;:::-;:21;;;;:::i;:::-;4802:35:::0;-1:-1:-1;4847:11:0::1;4861;4802:35:::0;4861:5;:11:::1;:::i;:::-;4847:25;;4928:3;4915:10;;:16;;;;:::i;:::-;4908:3;4893:12;;:18;;;;:::i;:::-;:39;;;;:::i;:::-;4882:50:::0;-1:-1:-1;4946:13:0;;;:39:::1;;;4974:11;4963:8;:22;4946:39;4942:62;;;4994:10;;;;;;;;;;;;;;4942:62;5028:3;5014:10;;:17;;;;;;;:::i;:::-;;;;;;;;5057:8;5041:12;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5075:42:0::1;::::0;-1:-1:-1;5089:4:0::1;5096:10;5108:8:::0;5075:5:::1;:42::i;:::-;5127:38;5138:5;5145:3;5150:4;5156:8;5127:10;:38::i;:::-;-1:-1:-1::0;;3292:1:0;3284:5;:9;4511:661;;-1:-1:-1;;4511:661:0:o;5295:646::-;5400:14;3214:5;;3223:1;3214:10;3210:34;;3233:11;;;;;;;;;;;;;;3210:34;3262:1;3254:5;:9;5435:6:::1;::::0;::::1;;5430:31;;5450:11;;;;;;;;;;;;;;5430:31;5475:7;5486:1;5475:12:::0;5471:37:::1;;5496:12;;;;;;;;;;;;;;5471:37;5518:41;5524:10;5544:4;5551:7;5518:5;:41::i;:::-;5569:13;5624:7;5609:12;;:22;;;;:::i;:::-;5598:7;5585:10;;:20;;;;:::i;:::-;:47;;;;:::i;:::-;5569:63:::0;-1:-1:-1;5642:11:0::1;1611:6;5656:15;1657:3;5569:63:::0;5656:15:::1;:::i;:::-;:21;;;;:::i;:::-;5642:35:::0;-1:-1:-1;5696:11:0::1;5642:35:::0;5696:5;:11:::1;:::i;:::-;5687:20:::0;-1:-1:-1;5721:11:0;;;:33:::1;;;5745:9;5736:6;:18;5721:33;5717:56;;;5763:10;;;;;;;;;;;;;;5717:56;5797:5;5783:10;;:19;;;;;;;:::i;:::-;;;;;;;;5828:7;5812:12;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5853:32:0::1;::::0;;;;5866:10:::1;5853:32;::::0;::::1;5744:74:1::0;5834:18;;;5827:34;;;5853:3:0::1;:12;;::::0;::::1;::::0;5717:18:1;;5853:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5845:41;;;::::0;::::1;;5896:38;5907:5;5914:3;5919:5;5926:7;5896:10;:38::i;8805:182::-:0;8881:15;;;;;;;:9;:15;;;;;:25;;8900:6;;8881:15;:25;;8900:6;;8881:25;:::i;:::-;;;;-1:-1:-1;;8916:13:0;;;;;;;:9;:13;;;;;:23;;8933:6;;8916:13;:23;;8933:6;;8916:23;:::i;:::-;;;;;;;;8969:2;8954:26;;8963:4;8954:26;;;8973:6;8954:26;;;;1265:25:1;;1253:2;1238:18;;1119:177;8954:26:0;;;;;;;;8805:182;;;:::o;6036:870::-;6128:16;1657:3;6147:18;1736:2;6147:3;:18;:::i;:::-;:28;;;;:::i;:::-;6128:47;-1:-1:-1;6185:14:0;6202;6128:47;6202:3;:14;:::i;:::-;6185:31;;6226:14;6243:25;6257:10;6243:13;:25::i;:::-;6226:42;-1:-1:-1;6282:20:0;;;6278:162;;6318:18;6328:8;6318:18;;:::i;:::-;;;6428:1;6417:12;;6278:162;6453:10;;6449:51;;6473:26;;;;;1860:42;6473:26;;;5744:74:1;5834:18;;;5827:34;;;6473:3:0;:12;;;;;5717:18:1;;6473:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6465:35;;;;;;6514:12;;6510:313;;6563:22;6575:10;6563:9;:22;:::i;:::-;6550:9;:35;;6542:73;;;;;;;6074:2:1;6542:73:0;;;6056:21:1;6113:2;6093:18;;;6086:30;6152:27;6132:18;;;6125:55;6197:18;;6542:73:0;;;;;;;;6633:48;;;;;:14;5762:55:1;;;6633:48:0;;;5744:74:1;5834:18;;;5827:34;;;6633:7:0;:14;;;;6653:9;;5717:18:1;;6633:48:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6633:48:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6629:184;;6729:30;;;;;:12;5762:55:1;;;6729:30:0;;;5744:74:1;5834:18;;;5827:34;;;6729:3:0;:12;;;;5717:18:1;;6729:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6721:39;;;;;;6629:184;;;;;6837:62;;;6693:14:1;;6686:22;6668:41;;6740:2;6725:18;;6718:34;;;6768:18;;;6761:34;;;6826:2;6811:18;;6804:34;;;6869:3;6854:19;;6847:35;;;6837:62:0;;;;6843:10;;6837:62;;6655:3:1;6640:19;6837:62:0;;;;;;;6118:788;;;6036:870;;;;:::o;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;215:186;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:1:o;637:477::-;786:2;775:9;768:21;749:4;818:6;812:13;861:6;856:2;845:9;841:18;834:34;920:6;915:2;907:6;903:15;898:2;887:9;883:18;877:50;976:1;971:2;962:6;951:9;947:22;943:31;936:42;1105:2;1035:66;1030:2;1022:6;1018:15;1014:88;1003:9;999:104;995:113;987:121;;;637:477;;;;:::o;1301:300::-;1369:6;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;1567:2;1552:18;;;;1539:32;;-1:-1:-1;;;1301:300:1:o;1798:374::-;1875:6;1883;1891;1944:2;1932:9;1923:7;1919:23;1915:32;1912:52;;;1960:1;1957;1950:12;1912:52;1983:29;2002:9;1983:29;:::i;:::-;1973:39;;2031:38;2065:2;2054:9;2050:18;2031:38;:::i;:::-;1798:374;;2021:48;;-1:-1:-1;;;2138:2:1;2123:18;;;;2110:32;;1798:374::o;2366:226::-;2425:6;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;-1:-1:-1;2539:23:1;;2366:226;-1:-1:-1;2366:226:1:o;2844:346::-;2912:6;2920;2973:2;2961:9;2952:7;2948:23;2944:32;2941:52;;;2989:1;2986;2979:12;2941:52;-1:-1:-1;;3034:23:1;;;3154:2;3139:18;;;3126:32;;-1:-1:-1;2844:346:1:o;3195:260::-;3263:6;3271;3324:2;3312:9;3303:7;3299:23;3295:32;3292:52;;;3340:1;3337;3330:12;3292:52;3363:29;3382:9;3363:29;:::i;:::-;3353:39;;3411:38;3445:2;3434:9;3430:18;3411:38;:::i;:::-;3401:48;;3195:260;;;;;:::o;3709:184::-;3761:77;3758:1;3751:88;3858:4;3855:1;3848:15;3882:4;3879:1;3872:15;3898:128;3965:9;;;3986:11;;;3983:37;;;4000:18;;:::i;4453:277::-;4520:6;4573:2;4561:9;4552:7;4548:23;4544:32;4541:52;;;4589:1;4586;4579:12;4541:52;4621:9;4615:16;4674:5;4667:13;4660:21;4653:5;4650:32;4640:60;;4696:1;4693;4686:12;4988:168;5061:9;;;5092;;5109:15;;;5103:22;;5089:37;5079:71;;5130:18;;:::i;5161:274::-;5201:1;5227;5217:189;;5262:77;5259:1;5252:88;5363:4;5360:1;5353:15;5391:4;5388:1;5381:15;5217:189;-1:-1:-1;5420:9:1;;5161:274::o;5440:125::-;5505:9;;;5526:10;;;5523:36;;;5539:18;;:::i;6226:184::-;6296:6;6349:2;6337:9;6328:7;6324:23;6320:32;6317:52;;;6365:1;6362;6355:12;6317:52;-1:-1:-1;6388:16:1;;6226:184;-1:-1:-1;6226:184:1:o","linkReferences":{},"immutableReferences":{"77":[{"start":1009,"length":32},{"start":1488,"length":32},{"start":2429,"length":32},{"start":2888,"length":32},{"start":3694,"length":32},{"start":4220,"length":32},{"start":4865,"length":32}],"80":[{"start":1137,"length":32},{"start":1402,"length":32},{"start":4620,"length":32}],"82":[{"start":836,"length":32},{"start":1574,"length":32}],"85":[{"start":797,"length":32},{"start":2101,"length":32}],"88":[{"start":758,"length":32},{"start":4399,"length":32},{"start":4661,"length":32}],"90":[{"start":1176,"length":32},{"start":4366,"length":32}]}}}}}}},"signatures":{"function":[{"signature":"allowance(address,address)","signatureHash4":"0xdd62ed3e","signatureHash32":"0xdd62ed3e90e97b3d417db9c0c7522647811bafca5afc6694f143588d255fdfb4"},{"signature":"approve(address,uint256)","signatureHash4":"0x095ea7b3","signatureHash32":"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"},{"signature":"balanceOf(address)","signatureHash4":"0x70a08231","signatureHash32":"0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be"},{"signature":"BPS()","signatureHash4":"0x249d39e9","signatureHash32":"0x249d39e95dcf38deb6c884103e990949e9d7e5d370eee3d20091aba0a46aa824"},{"signature":"BURN()","signatureHash4":"0xc0a2526c","signatureHash32":"0xc0a2526c4d26b4a9ab1997a87f72a2602f724c8ed20819a3c8357687e62aad0a"},{"signature":"BURN_BPS()","signatureHash4":"0xa37a9fc0","signatureHash32":"0xa37a9fc043a15e1de891bbcb4642316d0e8ac5602dd31973b2b4aa4aa2ec83bf"},{"signature":"buy(uint256,uint256)","signatureHash4":"0xd6febde8","signatureHash32":"0xd6febde8e106f09efd155cebc8789e26a04bdc3a9c44367e4fa0cab9b08eb254"},{"signature":"CASHBACK_BPS()","signatureHash4":"0x59cf0f00","signatureHash32":"0x59cf0f00f91d57e72c914b4bd643ff679779ca4e6a047095f56d27a24a35bc68"},{"signature":"creditGas()","signatureHash4":"0x86cb90be","signatureHash32":"0x86cb90be3eacc16a19c6811eefc024671c317c8becddc2ae9b070221859a7ac9"},{"signature":"decimals()","signatureHash4":"0x313ce567","signatureHash32":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9"},{"signature":"FEE_BPS()","signatureHash4":"0xbf333f2c","signatureHash32":"0xbf333f2c393111a6a58aca7db441ba25f737c6fdea3027ad33d79d0a6220ff7f"},{"signature":"gasReserve()","signatureHash4":"0xeea7570e","signatureHash32":"0xeea7570e71d1f3bcd968443ce396847bac5599610a18e76db52705e4ed9ef08f"},{"signature":"IMD()","signatureHash4":"0xd0abb693","signatureHash32":"0xd0abb693fd6f7ee84ca3a8b7788ee1390e4f0db42fe430ffdd8d6a7e3e8363d6"},{"signature":"name()","signatureHash4":"0x06fdde03","signatureHash32":"0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796"},{"signature":"owner()","signatureHash4":"0x8da5cb5b","signatureHash32":"0x8da5cb5b36e7f68c1d2e56001220cdbdd3ba2616072f718acfda4a06441a807d"},{"signature":"reserveImd()","signatureHash4":"0xe2417e1a","signatureHash32":"0xe2417e1a09576f4cb9760c59c55e224f299c3aaf536251f0e4e8a28ceefd5d93"},{"signature":"reserveTrial()","signatureHash4":"0x090b76c3","signatureHash32":"0x090b76c371cbc8ac3dccf9171bab64bc0982c7718b4a71212be80c5fdb909015"},{"signature":"resolveTrader(address)","signatureHash4":"0x04ccc04d","signatureHash32":"0x04ccc04d56bb48fd17be45bf177de905e3612b7d23adaa051526a56f21b89e56"},{"signature":"seeded()","signatureHash4":"0x334041a6","signatureHash32":"0x334041a6f14bc1a38b54e122e498ba87c90e7c26669c1e7a8a153be6226ad70e"},{"signature":"seed(uint256)","signatureHash4":"0x95564837","signatureHash32":"0x95564837f810e24ab778098ec5770705ca108a0fcf1e51a436f69202d046c0e5"},{"signature":"sell(uint256,uint256)","signatureHash4":"0xd79875eb","signatureHash32":"0xd79875eb1489ed8e5731ccc3429d0eb54234baacf777e45c2589e85a7c857dde"},{"signature":"SIMD()","signatureHash4":"0x8fb56bef","signatureHash32":"0x8fb56bef298c77a73720a8f9a2dbca274d2deb7726cd0785ae5a94e5f6240811"},{"signature":"stacker()","signatureHash4":"0xe6fd6bd5","signatureHash32":"0xe6fd6bd5766a883a7d7b1c3fee9678bf3b5703d09907873e002523c151018930"},{"signature":"symbol()","signatureHash4":"0x95d89b41","signatureHash32":"0x95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec"},{"signature":"totalSupply()","signatureHash4":"0x18160ddd","signatureHash32":"0x18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932"},{"signature":"transfer(address,uint256)","signatureHash4":"0xa9059cbb","signatureHash32":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"},{"signature":"transferFrom(address,address,uint256)","signatureHash4":"0x23b872dd","signatureHash32":"0x23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b"},{"signature":"TRIAL_SUPPLY()","signatureHash4":"0x931b95bb","signatureHash32":"0x931b95bb403fa0bbccde9be5a1008e21b4be7847ab3408094c1c7af136c4e6ce"}],"event":[{"signature":"Approval(address,address,uint256)","signatureHash4":"0x8c5be1e5","signatureHash32":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"},{"signature":"Seeded(uint256,uint256)","signatureHash4":"0x67f9b61b","signatureHash32":"0x67f9b61bf7b39fd24dd60467083f89ea77979db358db2804069474590a36c035"},{"signature":"Trade(address,address,bool,uint256,uint256,uint256,uint256)","signatureHash4":"0x9adcf0ad","signatureHash32":"0x9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c82982"},{"signature":"Transfer(address,address,uint256)","signatureHash4":"0xddf252ad","signatureHash32":"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"}],"error":[{"signature":"AlreadySeeded()","signatureHash4":"0x4313f1c8","signatureHash32":"0x4313f1c8bc5ea67fdff2074bee21e45f0b4fa6c59c419a19880dca27bafc1f7c"},{"signature":"NotOwner()","signatureHash4":"0x30cd7471","signatureHash32":"0x30cd74712f59d478562d48e2d35de830db72c60a63dd08ae59199eec990b5bc4"},{"signature":"NotSeeded()","signatureHash4":"0x0f473f75","signatureHash32":"0x0f473f759f667df94c8367f58e002819308d118f555d892e37676fcaeb12ec57"},{"signature":"Reentrant()","signatureHash4":"0xed3ba6a6","signatureHash32":"0xed3ba6a62877a99990a32617b4e001f2c85c7886f010c9b166e8438fd38bcb40"},{"signature":"Slippage()","signatureHash4":"0x7dd37f70","signatureHash32":"0x7dd37f70bf4a037967b574f13ad5cb4535ea41ca496247d3b8266e5f92a204fa"},{"signature":"ZeroAmount()","signatureHash4":"0x1f2a2005","signatureHash32":"0x1f2a2005cb66a8e145327e8814e243a0996aec9bfe1e15a495778b1236dbd485"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"match","chainId":"11155111","address":"0xF2520B379021AE989Bb0eBBD350a0c8571256FEF"}