UNPKG

@airdao/astra-cl-periphery

Version:

🎚 Peripheral smart contracts for interacting with AstraDEX Concentrated Liquidity version

584 lines • 62.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "MockTimeSwapRouter", "sourceName": "contracts/test/MockTimeSwapRouter.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_SAMB", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "SAMB", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "astraCLSwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactInputParams", "name": "params", "type": "tuple" } ], "name": "exactInput", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactInputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactInputSingle", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactOutputParams", "name": "params", "type": "tuple" } ], "name": "exactOutput", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactOutputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactOutputSingle", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "refundAMB", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowedIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_time", "type": "uint256" } ], "name": "setTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "sweepTokenWithFee", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapSAMB", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "unwrapSAMBWithFee", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60c06040526000196000553480156200001757600080fd5b5060405162003089380380620030898339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f80620001096000398061014a52806106f6528061073652806108605280610a095280610b3352806115a0528061160052806116815250806103bb5280610f3b52806124c95250612f806000f3fe60806040526004361061012d5760003560e01c8063c04b8d59116100a5578063db3e219811610074578063e0e189a011610059578063e0e189a01461033d578063f28c049814610350578063f3995c6714610363576101d8565b8063db3e219814610317578063df2ab5bb1461032a576101d8565b8063c04b8d59146102d4578063c2e3140a146102e7578063c45a0155146102fa578063c53af3041461030f576101d8565b806390793ea8116100fc578063a4a78f0c116100e1578063a4a78f0c1461028e578063a98ce37f146102a1578063ac9650d8146102b4576101d8565b806390793ea81461025957806397e87d9d1461027b576101d8565b806311c17848146101dd5780633beb26c4146101fd578063414bf3891461021d5780634659a49414610246576101d8565b366101d8573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101e957600080fd5b506101d66101f83660046128aa565b610376565b34801561020957600080fd5b506101d6610218366004612b41565b6104c9565b61023061022b366004612a3a565b6104ce565b60405161023d9190612e4b565b60405180910390f35b6101d66102543660046127b8565b610640565b34801561026557600080fd5b5061026e6106f4565b60405161023d9190612c91565b6101d6610289366004612b88565b610718565b6101d661029c3660046127b8565b610930565b6101d66102af366004612b59565b610a05565b6102c76102c2366004612818565b610bcb565b60405161023d9190612d04565b6102306102e236600461298f565b610d25565b6101d66102f53660046127b8565b610e84565b34801561030657600080fd5b5061026e610f39565b6101d6610f5d565b610230610325366004612a3a565b610f6f565b6101d6610338366004612719565b6110ff565b6101d661034b36600461275a565b61121c565b61023061035e366004612a56565b611382565b6101d66103713660046127b8565b6114b6565b60008413806103855750600083135b61038e57600080fd5b600061039c82840184612a8e565b905060008060006103b0846000015161154e565b9250925092506103e27f000000000000000000000000000000000000000000000000000000000000000084848461157f565b5060008060008a13610423578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610454565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156104735761046e858760200151338461159e565b6104bd565b855161047e9061177c565b156104a357855161048e90611788565b865261049d81336000896117c3565b506104bd565b806000819055508394506104bd858760200151338461159e565b50505050505050505050565b600155565b60008160800135806104de61197f565b111561054b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6105f160a084013561056360808601606087016126f6565b610574610100870160e088016126f6565b604080518082019091528061058c60208a018a6126f6565b61059c60608b0160408c01612b1e565b6105ac60408c0160208d016126f6565b6040516020016105be93929190612c1b565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611985565b91508260c0013582101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612dcc565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b1580156106e057600080fd5b505af11580156104bd573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015610729575060648211155b61073257600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107bb57600080fd5b505afa1580156107cf573d6000803e3d6000fd5b505050506040513d60208110156107e557600080fd5b505190508481101561085857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610929577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050505060006127106109018584611b0b90919063ffffffff16565b8161090857fe5b049050801561091b5761091b8382611b2f565b61092785828403611b2f565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109c557600080fd5b505afa1580156109d9573d6000803e3d6000fd5b505050506040513d60208110156109ef57600080fd5b5051101561092757610927868686868686610640565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a8e57600080fd5b505afa158015610aa2573d6000803e3d6000fd5b505050506040513d6020811015610ab857600080fd5b5051905082811015610b2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610bc6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610ba457600080fd5b505af1158015610bb8573d6000803e3d6000fd5b50505050610bc68282611b2f565b505050565b60608167ffffffffffffffff81118015610be457600080fd5b50604051908082528060200260200182016040528015610c1857816020015b6060815260200190600190039081610c035790505b50905060005b82811015610d1e5760008030868685818110610c3657fe5b9050602002810190610c489190612e54565b604051610c56929190612c81565b600060405180830381855af49150503d8060008114610c91576040519150601f19603f3d011682016040523d82523d6000602084013e610c96565b606091505b509150915081610cfc57604481511015610caf57600080fd5b60048101905080806020019051810190610cc99190612925565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106319190612d82565b80848481518110610d0957fe5b60209081029190910101525050600101610c1e565b5092915050565b6000816040015180610d3561197f565b1115610da257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610db3856000015161177c565b9050610e0c856060015182610dcc578660200151610dce565b305b60006040518060400160405280610de88b60000151611c7d565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611985565b60608601528015610e2c578451309250610e2590611788565b8552610e39565b8460600151935050610e3f565b50610da4565b8360800151831015610e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612dcc565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d6020811015610f2357600080fd5b50511015610927576109278686868686866114b6565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715610f6d57610f6d3347611b2f565b565b6000816080013580610f7f61197f565b1115610fec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61109560a084013561100460808601606087016126f6565b611015610100870160e088016126f6565b604051806040016040528088602001602081019061103391906126f6565b61104360608b0160408c01612b1e565b61105060208c018c6126f6565b60405160200161106293929190612c1b565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506117c3565b91508260c001358211156110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612d95565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505190508281101561120557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561121657611216848383611c8c565b50505050565b60008211801561122d575060648211155b61123657600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d60208110156112c957600080fd5b505190508481101561133c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109275760006127106113518386611b0b565b8161135857fe5b049050801561136c5761136c878483611c8c565b6113798786838503611c8c565b50505050505050565b600081604001358061139261197f565b11156113ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611472606084013561141760408601602087016126f6565b604080518082019091526000908061142f8980612e54565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526117c3565b50600054915082608001358211156110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612d95565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b1580156106e057600080fd5b6000808061155c8482611e61565b9250611569846014611f61565b9050611576846017611e61565b91509193909250565b600061159585611590868686612051565b6120ce565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115f95750804710155b15611742577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561166657600080fd5b505af115801561167a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505050506040513d602081101561173a57600080fd5b506112169050565b73ffffffffffffffffffffffffffffffffffffffff83163014156117705761176b848383611c8c565b611216565b611216848484846120fe565b8051604211155b919050565b80516060906117bd9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016122db565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff84166117e4573093505b60008060006117f6856000015161154e565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118278587866124c2565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561184d8f612500565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615611872578d611898565b876118915773fffd8963efd1fc6a506488495d951d5263988d25611898565b6401000276a45b8d6040516020016118a99190612e03565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016118d8959493929190612cb2565b6040805180830381600087803b1580156118f157600080fd5b505af1158015611905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119299190612887565b9150915060008361193e578183600003611944565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611970578b811461197057600080fd5b50505050505050949350505050565b60015490565b600073ffffffffffffffffffffffffffffffffffffffff84166119a6573093505b60008060006119b8856000015161154e565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806119e98686866124c2565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b85611a0f8f612500565b73ffffffffffffffffffffffffffffffffffffffff8e1615611a31578d611a57565b87611a505773fffd8963efd1fc6a506488495d951d5263988d25611a57565b6401000276a45b8d604051602001611a689190612e03565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611a97959493929190612cb2565b6040805180830381600087803b158015611ab057600080fd5b505af1158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae89190612887565b9150915082611af75781611af9565b805b6000039b9a5050505050505050505050565b6000821580611b2657505081810281838281611b2357fe5b04145b6117bd57600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310611ba657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b69565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c08576040519150601f19603f3d011682016040523d82523d6000602084013e611c0d565b606091505b5050905080610bc657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60606117bd826000602b6122db565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611d6157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611d24565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611dc3576040519150601f19603f3d011682016040523d82523d6000602084013e611dc8565b606091505b5091509150818015611df6575080511580611df65750808060200190516020811015611df357600080fd5b50515b61092957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600081826014011015611ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015611f4857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015611fd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561204857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b612059612668565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115612091579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006120da8383612532565b90503373ffffffffffffffffffffffffffffffffffffffff8216146117bd57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106121db57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161219e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461223d576040519150601f19603f3d011682016040523d82523d6000602084013e612242565b606091505b5091509150818015612270575080511580612270575080806020019051602081101561226d57600080fd5b50515b61092757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608182601f01101561234f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156123c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561243257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561245157604051915060008252602082016040526124b9565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561248a578051835260209283019201612472565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60006124f87f00000000000000000000000000000000000000000000000000000000000000006124f3868686612051565b612532565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061252e57600080fd5b5090565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061257457600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561178381612f4e565b600082601f8301126126a3578081fd5b81356126b66126b182612ee2565b612ebe565b8181528460208386010111156126ca578283fd5b816020850160208301379081016020019190915292915050565b6000610100828403121561063a578081fd5b600060208284031215612707578081fd5b813561271281612f4e565b9392505050565b60008060006060848603121561272d578182fd5b833561273881612f4e565b925060208401359150604084013561274f81612f4e565b809150509250925092565b600080600080600060a08688031215612771578081fd5b853561277c81612f4e565b945060208601359350604086013561279381612f4e565b92506060860135915060808601356127aa81612f4e565b809150509295509295909350565b60008060008060008060c087890312156127d0578081fd5b86356127db81612f4e565b95506020870135945060408701359350606087013560ff811681146127fe578182fd5b9598949750929560808101359460a0909101359350915050565b6000806020838503121561282a578182fd5b823567ffffffffffffffff80821115612841578384fd5b818501915085601f830112612854578384fd5b813581811115612862578485fd5b8660208083028501011115612875578485fd5b60209290920196919550909350505050565b60008060408385031215612899578182fd5b505080516020909101519092909150565b600080600080606085870312156128bf578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128e4578384fd5b818701915087601f8301126128f7578384fd5b813581811115612905578485fd5b886020828501011115612916578485fd5b95989497505060200194505050565b600060208284031215612936578081fd5b815167ffffffffffffffff81111561294c578182fd5b8201601f8101841361295c578182fd5b805161296a6126b182612ee2565b81815285602083850101111561297e578384fd5b611595826020830160208601612f22565b6000602082840312156129a0578081fd5b813567ffffffffffffffff808211156129b7578283fd5b9083019060a082860312156129ca578283fd5b60405160a0810181811083821117156129df57fe5b6040528235828111156129f0578485fd5b6129fc87828601612693565b825250612a0b60208401612688565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a4c578081fd5b61271283836126e4565b600060208284031215612a67578081fd5b813567ffffffffffffffff811115612a7d578182fd5b820160a08185031215612712578182fd5b600060208284031215612a9f578081fd5b813567ffffffffffffffff80821115612ab6578283fd5b9083019060408286031215612ac9578283fd5b604051604081018181108382111715612ade57fe5b604052823582811115612aef578485fd5b612afb87828601612693565b82525060208301359250612b0e83612f4e565b6020810192909252509392505050565b600060208284031215612b2f578081fd5b813562ffffff81168114612712578182fd5b600060208284031215612b52578081fd5b5035919050565b60008060408385031215612b6b578182fd5b823591506020830135612b7d81612f4e565b809150509250929050565b60008060008060808587031215612b9d578182fd5b843593506020850135612baf81612f4e565b9250604085013591506060850135612bc681612f4e565b939692955090935050565b60008151808452612be9816020860160208601612f22565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612cf960a0830184612bd1565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d75577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d63858351612bd1565b94509285019290850190600101612d29565b5092979650505050505050565b6000602082526127126020830184612bd1565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612e1f6060840182612bd1565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e88578283fd5b83018035915067ffffffffffffffff821115612ea2578283fd5b602001915036819003821315612eb757600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612eda57fe5b604052919050565b600067ffffffffffffffff821115612ef657fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612f3d578181015183820152602001612f25565b838111156112165750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f7057600080fd5b5056fea164736f6c6343000706000a", "deployedBytecode": "0x60806040526004361061012d5760003560e01c8063c04b8d59116100a5578063db3e219811610074578063e0e189a011610059578063e0e189a01461033d578063f28c049814610350578063f3995c6714610363576101d8565b8063db3e219814610317578063df2ab5bb1461032a576101d8565b8063c04b8d59146102d4578063c2e3140a146102e7578063c45a0155146102fa578063c53af3041461030f576101d8565b806390793ea8116100fc578063a4a78f0c116100e1578063a4a78f0c1461028e578063a98ce37f146102a1578063ac9650d8146102b4576101d8565b806390793ea81461025957806397e87d9d1461027b576101d8565b806311c17848146101dd5780633beb26c4146101fd578063414bf3891461021d5780634659a49414610246576101d8565b366101d8573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101e957600080fd5b506101d66101f83660046128aa565b610376565b34801561020957600080fd5b506101d6610218366004612b41565b6104c9565b61023061022b366004612a3a565b6104ce565b60405161023d9190612e4b565b60405180910390f35b6101d66102543660046127b8565b610640565b34801561026557600080fd5b5061026e6106f4565b60405161023d9190612c91565b6101d6610289366004612b88565b610718565b6101d661029c3660046127b8565b610930565b6101d66102af366004612b59565b610a05565b6102c76102c2366004612818565b610bcb565b60405161023d9190612d04565b6102306102e236600461298f565b610d25565b6101d66102f53660046127b8565b610e84565b34801561030657600080fd5b5061026e610f39565b6101d6610f5d565b610230610325366004612a3a565b610f6f565b6101d6610338366004612719565b6110ff565b6101d661034b36600461275a565b61121c565b61023061035e366004612a56565b611382565b6101d66103713660046127b8565b6114b6565b60008413806103855750600083135b61038e57600080fd5b600061039c82840184612a8e565b905060008060006103b0846000015161154e565b9250925092506103e27f000000000000000000000000000000000000000000000000000000000000000084848461157f565b5060008060008a13610423578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610454565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156104735761046e858760200151338461159e565b6104bd565b855161047e9061177c565b156104a357855161048e90611788565b865261049d81336000896117c3565b506104bd565b806000819055508394506104bd858760200151338461159e565b50505050505050505050565b600155565b60008160800135806104de61197f565b111561054b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6105f160a084013561056360808601606087016126f6565b610574610100870160e088016126f6565b604080518082019091528061058c60208a018a6126f6565b61059c60608b0160408c01612b1e565b6105ac60408c0160208d016126f6565b6040516020016105be93929190612c1b565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611985565b91508260c0013582101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612dcc565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b1580156106e057600080fd5b505af11580156104bd573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015610729575060648211155b61073257600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107bb57600080fd5b505afa1580156107cf573d6000803e3d6000fd5b505050506040513d60208110156107e557600080fd5b505190508481101561085857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610929577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050505060006127106109018584611b0b90919063ffffffff16565b8161090857fe5b049050801561091b5761091b8382611b2f565b61092785828403611b2f565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109c557600080fd5b505afa1580156109d9573d6000803e3d6000fd5b505050506040513d60208110156109ef57600080fd5b5051101561092757610927868686868686610640565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a8e57600080fd5b505afa158015610aa2573d6000803e3d6000fd5b505050506040513d6020811015610ab857600080fd5b5051905082811015610b2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610bc6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610ba457600080fd5b505af1158015610bb8573d6000803e3d6000fd5b50505050610bc68282611b2f565b505050565b60608167ffffffffffffffff81118015610be457600080fd5b50604051908082528060200260200182016040528015610c1857816020015b6060815260200190600190039081610c035790505b50905060005b82811015610d1e5760008030868685818110610c3657fe5b9050602002810190610c489190612e54565b604051610c56929190612c81565b600060405180830381855af49150503d8060008114610c91576040519150601f19603f3d011682016040523d82523d6000602084013e610c96565b606091505b509150915081610cfc57604481511015610caf57600080fd5b60048101905080806020019051810190610cc99190612925565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106319190612d82565b80848481518110610d0957fe5b60209081029190910101525050600101610c1e565b5092915050565b6000816040015180610d3561197f565b1115610da257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610db3856000015161177c565b9050610e0c856060015182610dcc578660200151610dce565b305b60006040518060400160405280610de88b60000151611c7d565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611985565b60608601528015610e2c578451309250610e2590611788565b8552610e39565b8460600151935050610e3f565b50610da4565b8360800151831015610e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612dcc565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d6020811015610f2357600080fd5b50511015610927576109278686868686866114b6565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715610f6d57610f6d3347611b2f565b565b6000816080013580610f7f61197f565b1115610fec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61109560a084013561100460808601606087016126f6565b611015610100870160e088016126f6565b604051806040016040528088602001602081019061103391906126f6565b61104360608b0160408c01612b1e565b61105060208c018c6126f6565b60405160200161106293929190612c1b565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506117c3565b91508260c001358211156110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612d95565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505190508281101561120557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561121657611216848383611c8c565b50505050565b60008211801561122d575060648211155b61123657600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d60208110156112c957600080fd5b505190508481101561133c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109275760006127106113518386611b0b565b8161135857fe5b049050801561136c5761136c878483611c8c565b6113798786838503611c8c565b50505050505050565b600081604001358061139261197f565b11156113ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611472606084013561141760408601602087016126f6565b604080518082019091526000908061142f8980612e54565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526117c3565b50600054915082608001358211156110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190612d95565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b1580156106e057600080fd5b6000808061155c8482611e61565b9250611569846014611f61565b9050611576846017611e61565b91509193909250565b600061159585611590868686612051565b6120ce565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115f95750804710155b15611742577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561166657600080fd5b505af115801561167a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561171057600080fd5b505af11580156117245