[ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "WETH", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenA", "type": "address" }, { "internalType": "address", "name": "tokenB", "type": "address" }, { "internalType": "uint256", "name": "amountADesired", "type": "uint256" }, { "internalType": "uint256", "name": "amountBDesired", "type": "uint256" }, { "internalType": "uint256", "name": "amountAMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountBMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "addLiquidity", "outputs": [ { "internalType": "uint256", "name": "amountA", "type": "uint256" }, { "internalType": "uint256", "name": "amountB", "type": "uint256" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountTokenDesired", "type": "uint256" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "addLiquidityETH", "outputs": [ { "internalType": "uint256", "name": "amountToken", "type": "uint256" }, { "internalType": "uint256", "name": "amountETH", "type": "uint256" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" } ], "name": "getAmountsOut", "outputs": [ { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "address", "name": "token2", "type": "address" } ], "name": "getPair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountA", "type": "uint256" }, { "internalType": "uint256", "name": "reserveA", "type": "uint256" }, { "internalType": "uint256", "name": "reserveB", "type": "uint256" } ], "name": "quote", "outputs": [ { "internalType": "uint256", "name": "amountB", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenA", "type": "address" }, { "internalType": "address", "name": "tokenB", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountAMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountBMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "removeLiquidity", "outputs": [ { "internalType": "uint256", "name": "amountA", "type": "uint256" }, { "internalType": "uint256", "name": "amountB", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "removeLiquidityETH", "outputs": [ { "internalType": "uint256", "name": "amountToken", "type": "uint256" }, { "internalType": "uint256", "name": "amountETH", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "removeLiquidityETHSupportingFeeOnTransferTokens", "outputs": [ { "internalType": "uint256", "name": "amountETH", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bool", "name": "approveMax", "type": "bool" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "removeLiquidityETHWithPermit", "outputs": [ { "internalType": "uint256", "name": "amountToken", "type": "uint256" }, { "internalType": "uint256", "name": "amountETH", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bool", "name": "approveMax", "type": "bool" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", "outputs": [ { "internalType": "uint256", "name": "amountETH", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenA", "type": "address" }, { "internalType": "address", "name": "tokenB", "type": "address" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "amountAMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountBMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bool", "name": "approveMax", "type": "bool" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "removeLiquidityWithPermit", "outputs": [ { "internalType": "uint256", "name": "amountA", "type": "uint256" }, { "internalType": "uint256", "name": "amountB", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountOutMin", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMin", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMin", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60c060405234801561001057600080fd5b5060405162004679380380620046798339818101604052604081101561003557600080fd5b8101908080519060200190929190805190602001909291905050508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505060805160601c60a05160601c6144eb6200018e6000398060fe5280610d9c5280610dda5280611077528061126552806113985280611460528061198b5280611a425280611b355280611c4c5280611d3b5280611dbc52806125f752806129ca5280612a235280612a575280612ad8525080610e835280611197528061143e528061167a5280611dfb52806122305280612532528061255b52806125d55280612775528061283c5280612a01528061339b52806136bc5280613de05280613f08528061401e52506144eb6000f3fe6080604052600436106100f75760003560e01c8063b4822be31161008a578063ded9382a11610059578063ded9382a146109f5578063e6a4390514610ad7578063e8e3370014610b88578063f305d71914610c6e57610153565b8063b4822be314610718578063baa2abde146107e5578063c45a0155146108b9578063d06ca61f1461091057610153565b8063ac3893ba116100c6578063ac3893ba146104cd578063ad5c4648146105b1578063ad615dec14610608578063af2979eb1461066b57610153565b806302751cec146101585780632195995c1461020c57806352aa4c221461030e5780635b0d5984146103f257610153565b36610153577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461015157fe5b005b600080fd5b34801561016457600080fd5b506101ef600480360360c081101561017b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1c565b604051808381526020018281526020019250505060405180910390f35b34801561021857600080fd5b506102f1600480360361016081101561023057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610e79565b604051808381526020018281526020019250505060405180910390f35b34801561031a57600080fd5b506103f0600480360360c081101561033157600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561036257600080fd5b82018360208201111561037457600080fd5b8035906020019184602083028401116401000000008311171561039657600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ffe565b005b3480156103fe57600080fd5b506104b7600480360361014081101561041657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611436565b6040518082815260200191505060405180910390f35b3480156104d957600080fd5b506105af600480360360c08110156104f057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561052157600080fd5b82018360208201111561053357600080fd5b8035906020019184602083028401116401000000008311171561055557600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115d0565b005b3480156105bd57600080fd5b506105c6611989565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061457600080fd5b506106556004803603606081101561062b57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506119ad565b6040518082815260200191505060405180910390f35b34801561067757600080fd5b50610702600480360360c081101561068e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119c3565b6040518082815260200191505060405180910390f35b6107e3600480360360a081101561072e57600080fd5b81019080803590602001909291908035906020019064010000000081111561075557600080fd5b82018360208201111561076757600080fd5b8035906020019184602083028401116401000000008311171561078957600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bd3565b005b3480156107f157600080fd5b5061089c600480360360e081101561080857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121af565b604051808381526020018281526020019250505060405180910390f35b3480156108c557600080fd5b506108ce612530565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091c57600080fd5b5061099e6004803603604081101561093357600080fd5b81019080803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184602083028401116401000000008311171561098e57600080fd5b9091929391929390505050612554565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109e15780820151818401526020810190506109c6565b505050509050019250505060405180910390f35b348015610a0157600080fd5b50610aba6004803603610140811015610a1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506125cb565b604051808381526020018281526020019250505060405180910390f35b348015610ae357600080fd5b50610b4660048036036040811015610afa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061276e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9457600080fd5b50610c4a6004803603610100811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127a3565b60405180848152602001838152602001828152602001935050505060405180910390f35b610cf8600480360360c0811015610c8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612948565b60405180848152602001838152602001828152602001935050505060405180910390f35b6000808242811015610d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b610dc5897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6121af565b8093508194505050610dd8898685612c9d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050610e6d8583612e79565b50965096945050505050565b6000806000610ea97f00000000000000000000000000000000000000000000000000000000000000008f8f612fd8565b9050600087610eb8578c610eda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b158015610fbd57600080fd5b505af1158015610fd1573d6000803e3d6000fd5b50505050610fe48f8f8f8f8f8f8f6121af565b809450819550505050509b509b9950505050505050505050565b8042811015611075576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600189899050038181106110be57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616d656c6f74526f757465723a20494e56414c49445f50415448000000000081525060200191505060405180910390fd5b6112158686600081811061117457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361120f7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111c357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b60018181106111ed57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612fd8565b8b613133565b611261868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050503085613344565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d602081101561132a57600080fd5b8101908080519060200190929190505050905087811015611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061443b6029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b5050505061142b8582612e79565b505050505050505050565b6000806114847f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000612fd8565b9050600086611493578b6114b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848c8b8b8b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561159857600080fd5b505af11580156115ac573d6000803e3d6000fd5b505050506115be8d8d8d8d8d8d6119c3565b925050509a9950505050505050505050565b8042811015611647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b6116f88686600081811061165757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336116f27f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106116a657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b60018181106116d057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612fd8565b8b613133565b600086866001898990500381811061170c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117a557600080fd5b505afa1580156117b9573d6000803e3d6000fd5b505050506040513d60208110156117cf57600080fd5b8101908080519060200190929190505050905061182e878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508686613344565b8761192782898960018c8c90500381811061184557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118de57600080fd5b505afa1580156118f2573d6000803e3d6000fd5b505050506040513d602081101561190857600080fd5b81019080805190602001909291905050506138a990919063ffffffff16565b101561197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061443b6029913960400191505060405180910390fd5b505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006119ba84848461392c565b90509392505050565b60008142811015611a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b611a6b887f000000000000000000000000000000000000000000000000000000000000000089898930896121af565b905080925050611b3388858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d6020811015611b1d57600080fd5b8101908080519060200190929190505050612c9d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b50505050611bc88483612e79565b509695505050505050565b8042811015611c4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1686866000818110611c8e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616d656c6f74526f757465723a20494e56414c49445f50415448000000000081525060200191505060405180910390fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611e737f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110611e2757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110611e5157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612fd8565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611edd57600080fd5b505af1158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b8101908080519060200190929190505050611f1e57fe5b6000878760018a8a905003818110611f3257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fcb57600080fd5b505afa158015611fdf573d6000803e3d6000fd5b505050506040513d6020811015611ff557600080fd5b81019080805190602001909291905050509050612054888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508787613344565b8861214d828a8a60018d8d90500381811061206b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561210457600080fd5b505afa158015612118573d6000803e3d6000fd5b505050506040513d602081101561212e57600080fd5b81019080805190602001909291905050506138a990919063ffffffff16565b10156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061443b6029913960400191505060405180910390fd5b505050505050505050565b6000808242811015612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b60006122567f00000000000000000000000000000000000000000000000000000000000000008c8c612fd8565b90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33838c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561231357600080fd5b505af1158015612327573d6000803e3d6000fd5b505050506040513d602081101561233d57600080fd5b8101908080519060200190929190505050506000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156123d057600080fd5b505af11580156123e4573d6000803e3d6000fd5b505050506040513d60408110156123fa57600080fd5b8101908080519060200190929190805190602001909291905050509150915060006124258e8e613a10565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612462578183612465565b82825b80975081985050508a8710156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143a66024913960400191505060405180910390fd5b8986101561251f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806144176024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606125c27f000000000000000000000000000000000000000000000000000000000000000085858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613b87565b90509392505050565b600080600061261b7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612fd8565b905060008761262a578c61264c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b505050506127558e8e8e8e8e8e610d1c565b809450819550505050509a509a98505050505050505050565b600061279b7f00000000000000000000000000000000000000000000000000000000000000008484612fd8565b905092915050565b6000806000834281101561281f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b61282d8c8c8c8c8c8c613dc3565b809450819550505060006128627f00000000000000000000000000000000000000000000000000000000000000008e8e612fd8565b90506128708d338388613133565b61287c8c338387613133565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156128fb57600080fd5b505af115801561290f573d6000803e3d6000fd5b505050506040513d602081101561292557600080fd5b810190808051906020019092919050505092505050985098509895505050505050565b600080600083428110156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616d656c6f74526f757465723a20455850495245440000000000000000000081525060200191505060405180910390fd5b6129f28a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613dc3565b80945081955050506000612a477f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612fd8565b9050612a558b338388613133565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b7d57600080fd5b505af1158015612b91573d6000803e3d6000fd5b505050506040513d6020811015612ba757600080fd5b8101908080519060200190929190505050612bbe57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612c3d57600080fd5b505af1158015612c51573d6000803e3d6000fd5b505050506040513d6020811015612c6757600080fd5b8101908080519060200190929190505050925083341115612c8f57612c8e33853403612e79565b5b505096509650969350505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d765780518252602082019150602081019050602083039250612d53565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612dd8576040519150601f19603f3d011682016040523d82523d6000602084013e612ddd565b606091505b5091509150818015612e1d5750600081511480612e1c5750808060200190516020811015612e0a57600080fd5b81019080805190602001909291905050505b5b612e72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614489602d913960400191505060405180910390fd5b5050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81118015612eab57600080fd5b506040519080825280601f01601f191660200182016040528015612ede5781602001600182028036833780820191505090505b506040518082805190602001908083835b60208310612f125780518252602082019150602081019050602083039250612eef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612f74576040519150601f19603f3d011682016040523d82523d6000602084013e612f79565b606091505b5050905080612fd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806143726034913960400191505060405180910390fd5b505050565b6000806000612fe78585613a10565b91509150858282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060405160200180807fff000000000000000000000000000000000000000000000000000000000000008152506001018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001807fa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1815250602001925050506040516020818303038152906040528051906020012060001c925050509392505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613240578051825260208201915060208101905060208303925061321d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146132a2576040519150601f19603f3d011682016040523d82523d6000602084013e6132a7565b606091505b50915091508180156132e757506000815114806132e657508080602001905160208110156132d457600080fd5b81019080805190602001909291905050505b5b61333c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806143416031913960400191505060405180910390fd5b505050505050565b60005b60018451038110156138a35760008085838151811061336257fe5b602002602001015186600185018151811061337957fe5b60200260200101519150915060006133918383613a10565b50905060006133c17f00000000000000000000000000000000000000000000000000000000000000008585612fd8565b905060008060008373ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561340e57600080fd5b505afa158015613422573d6000803e3d6000fd5b505050506040513d608081101561343857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146134cb57808280925081935050505b6000613597838973ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561354e57600080fd5b505afa158015613562573d6000803e3d6000fd5b505050506040513d602081101561357857600080fd5b81019080805190602001909291905050506138a990919063ffffffff16565b90508473ffffffffffffffffffffffffffffffffffffffff1663f140a35a828a6040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561361e57600080fd5b505afa158015613632573d6000803e3d6000fd5b505050506040513d602081101561364857600080fd5b810190808051906020019092919050505093505050506000808473ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461369c578260006136a0565b6000835b91509150600060028c510389106136b7578a6136f9565b6136f87f0000000000000000000000000000000000000000000000000000000000000000888e60028d01815181106136eb57fe5b6020026020010151612fd8565b5b90508473ffffffffffffffffffffffffffffffffffffffff16636e1fdd7f848484600067ffffffffffffffff8111801561373257600080fd5b506040519080825280601f01601f1916602001820160405280156137655781602001600182028036833780820191505090505b508f6040518663ffffffff1660e01b8152600401808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561382657808201518184015260208101905061380b565b50505050905090810190601f1680156138535780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561387657600080fd5b505af115801561388a573d6000803e3d6000fd5b5050505050505050505050508080600101915050613347565b50505050565b6000828284039150811115613926576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000808411613986576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806144646025913960400191505060405180910390fd5b6000831180156139965750600082115b6139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806143ef6028913960400191505060405180910390fd5b826139ff838661417790919063ffffffff16565b81613a0657fe5b0490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143ca6025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613ad2578284613ad5565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a205a45524f5f41444452455353000081525060200191505060405180910390fd5b9250929050565b6060600282511015613c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a20494e56414c49445f50415448000081525060200191505060405180910390fd5b815167ffffffffffffffff81118015613c1957600080fd5b50604051908082528060200260200182016040528015613c485781602001602082028036833780820191505090505b5090508281600081518110613c5957fe5b60200260200101818152505060005b6001835103811015613dbb576000613caa86858481518110613c8657fe5b6020026020010151866001860181518110613c9d57fe5b6020026020010151612fd8565b90508073ffffffffffffffffffffffffffffffffffffffff1663f140a35a848481518110613cd457fe5b6020026020010151868581518110613ce857fe5b60200260200101516040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613d5757600080fd5b505afa158015613d6b573d6000803e3d6000fd5b505050506040513d6020811015613d8157600080fd5b8101908080519060200190929190505050836001840181518110613da157fe5b602002602001018181525050508080600101915050613c68565b509392505050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613eaf57600080fd5b505afa158015613ec3573d6000803e3d6000fd5b505050506040513d6020811015613ed957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415614016577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539689896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015613fd957600080fd5b505af1158015613fed573d6000803e3d6000fd5b505050506040513d602081101561400357600080fd5b8101908080519060200190929190505050505b6000806140447f00000000000000000000000000000000000000000000000000000000000000008b8b61420c565b915091506000821480156140585750600081145b1561406c578787809450819550505061416a565b600061407989848461392c565b90508781116140ea57858110156140db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806144176024913960400191505060405180910390fd5b88818095508196505050614168565b60006140f789848661392c565b90508981111561410357fe5b8781101561415c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143a66024913960400191505060405180910390fd5b80898096508197505050505b505b5050965096945050505050565b600080821480614194575082828385029250828161419157fe5b04145b614206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080600061421b8585613a10565b50905060008061422c888888612fd8565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561427157600080fd5b505afa158015614285573d6000803e3d6000fd5b505050506040513d608081101561429b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461432a57808261432d565b81815b809550819650505050505093509391505056fe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656443616d656c6f74526f757465723a20494e53554646494349454e545f415f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c495155494449545943616d656c6f74526f757465723a20494e53554646494349454e545f425f414d4f554e5443616d656c6f74526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220cee0707528d15f78fb71f330903141b5d4c8b1d540465a1a084ae7b12cd372b264736f6c63430006060033000000000000000000000000f38e7c7f8ea779e8a193b61f9155e6650cbae09500000000000000000000000075cb093e4d61d2a2e65d8e0bbb01de8d89b53481