[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token0", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token1", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "ClaimFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldAdminFeeRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newAdminFeeRate", "type": "uint256" } ], "name": "SetAdminFeeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldSwapFeeRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newSwapFeeRate", "type": "uint256" } ], "name": "SetSwapFeeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "tokens", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "swapFees", "type": "uint256[]" } ], "name": "SwapFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "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": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "AUTH", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEE_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_ADMIN_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SWAP_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAIR_TYPE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "adminFeeRate", "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": "value", "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": "address", "name": "_to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "_amount0", "type": "uint256" }, { "internalType": "uint256", "name": "_amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [ { "internalType": "uint256[]", "name": "_adminFees", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRealBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" }, { "internalType": "uint112", "name": "", "type": "uint112" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "_liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "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": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_adminFeeRate", "type": "uint256" } ], "name": "setAdminFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_swapFeeRate", "type": "uint256" } ], "name": "setSwapFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "_amount1Out", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapFeeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAdminFee0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAdminFee1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50613244806100206000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806389afcb4411610146578063d1154ff0116100c3578063dd62ed3e11610087578063dd62ed3e1461071a578063e69e24a814610748578063f3de036214610712578063f9f0f20d1461086e578063ffc91bbd14610876578063fff6cae91461087e5761025e565b8063d1154ff014610694578063d21220a7146106b1578063d294f093146106b9578063d505accf146106c1578063d73792a9146107125761025e565b8063ab3d85441161010a578063ab3d854414610639578063b36a5af314610641578063ba9a7a561461065e578063bc25cf7714610666578063c45a01551461068c5761025e565b806389afcb44146105665780638cece527146105a557806395d89b41146105ad5780639d63848a146105b5578063a9059cbb1461060d5761025e565b8063313ce567116101df5780635909c0d5116101a35780635909c0d5146104dc5780635a3d5493146104e45780636a627842146104ec57806370a08231146105125780637464fc3d146105385780637ecebe00146105405761025e565b8063313ce567146104705780633644e5151461048e5780633a04801d146104965780634aa066521461049e578063508d1e6b146104d45761025e565b80630dfe1681116102265780630dfe1681146103ec5780630ef552131461041057806318160ddd1461042a57806323b872dd1461043257806330adf81f146104685761025e565b8063022c0d9f1461026357806306fdde03146102ef5780630902f1ac1461036c578063095ea7b3146103a45780630a5623fb146103e4575b600080fd5b6102ed6004803603608081101561027957600080fd5b8135916020810135916001600160a01b036040830135169190810190608081016060820135600160201b8111156102af57600080fd5b8201836020820111156102c157600080fd5b803590602001918460018302840111600160201b831117156102e257600080fd5b509092509050610886565b005b6102f7610e14565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610331578181015183820152602001610319565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610374610ea1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103d0600480360360408110156103ba57600080fd5b506001600160a01b038135169060200135610eb9565b604080519115158252519081900360200190f35b6103d0610ed0565b6103f4610ed5565b604080516001600160a01b039092168252519081900360200190f35b610418610ee4565b60408051918252519081900360200190f35b610418610eea565b6103d06004803603606081101561044857600080fd5b506001600160a01b03813581169160208101359091169060400135610ef0565b610418610f84565b610478610fa8565b6040805160ff9092168252519081900360200190f35b610418610fad565b610418610fb3565b610418600480360360608110156104b457600080fd5b506001600160a01b03813581169160208101359091169060400135610fb9565b610478611033565b610418611038565b61041861103e565b6104186004803603602081101561050257600080fd5b50356001600160a01b0316611044565b6104186004803603602081101561052857600080fd5b50356001600160a01b0316611200565b610418611212565b6104186004803603602081101561055657600080fd5b50356001600160a01b0316611218565b61058c6004803603602081101561057c57600080fd5b50356001600160a01b031661122a565b6040805192835260208301919091528051918290030190f35b6104186113d5565b6102f76113db565b6105bd611433565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105f95781810151838201526020016105e1565b505050509050019250505060405180910390f35b6103d06004803603604081101561062357600080fd5b506001600160a01b038135169060200135611442565b61041861144f565b6102ed6004803603602081101561065757600080fd5b5035611457565b6104186115b4565b6102ed6004803603602081101561067c57600080fd5b50356001600160a01b03166115ba565b6103f4611688565b6102ed600480360360208110156106aa57600080fd5b5035611697565b6103f46117f3565b6105bd611802565b6102ed600480360360e08110156106d757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356119d4565b610418611bd6565b6104186004803603604081101561073057600080fd5b506001600160a01b0381358116916020013516611bdf565b6102ed6004803603604081101561075e57600080fd5b810190602081018135600160201b81111561077857600080fd5b82018360208201111561078a57600080fd5b803590602001918460208302840111600160201b831117156107ab57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107fa57600080fd5b82018360208201111561080c57600080fd5b803590602001918460018302840111600160201b8311171561082d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bfc945050505050565b61058c612099565b6104186120ac565b6102ed6120b2565b600f546001146108d4576040805162461bcd60e51b8152602060048201526014602482015273159bdb185d1a5b1954185a5c8e881313d0d2d15160621b604482015290519081900360640190fd5b6000600f55841515806108e75750600084115b6109225760405162461bcd60e51b81526004018080602001828103825260288152602001806131276028913960400191505060405180910390fd5b60008061092d612142565b5091509150816001600160701b0316871080156109525750806001600160701b031686105b61098d5760405162461bcd60e51b815260040180806020018281038252602481526020018061301c6024913960400191505060405180910390fd5b600954600a5460009182916001600160a01b039182169190811690891682148015906109cb5750806001600160a01b0316896001600160a01b031614155b610a1c576040805162461bcd60e51b815260206004820152601860248201527f566f6c6174696c65506169723a20494e56414c49445f544f0000000000000000604482015290519081900360640190fd5b8a15610a2d57610a2d828a8d61216c565b8915610a3e57610a3e818a8c61216c565b8615610af057886001600160a01b0316639a7bff79338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610ad757600080fd5b505af1158015610aeb573d6000803e3d6000fd5b505050505b610af8612306565b909450925060009150506001600160701b0385168a90038311610b1c576000610b2b565b89856001600160701b03160383035b9050600089856001600160701b0316038311610b48576000610b57565b89856001600160701b03160383035b90506000821180610b685750600081115b610ba35760405162461bcd60e51b81526004018080602001828103825260278152602001806130406027913960400191505060405180910390fd5b6000610bd2610bbd601054856123e090919063ffffffff16565b610bcc876402540be4006123e0565b90612440565b90506000610bee610bbd601054856123e090919063ffffffff16565b9050610c1968056bc75e2d63100000610c136001600160701b038b8116908b166123e0565b906123e0565b610c2383836123e0565b1015610c68576040805162461bcd60e51b815260206004820152600f60248201526e566f6c6174696c65506169723a204b60881b604482015290519081900360640190fd5b600080610c75868661249d565b604080516002808252606080830184529496509294509190602083019080368337019050509050828282600081518110610cab57fe5b6020026020010183600181518110610cbf57fe5b6020908102919091010191909152527f5dadb1eefca890521b338a7cdaa3dd8b1397864c6c10ccd091a282dc391282eb610cf761254c565b82604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610d3c578181015183820152602001610d24565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610d7b578181015183820152602001610d63565b5050505090500194505050505060405180910390a15050505050610d9d612306565b9094509250610dae848488886125d4565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e995780601f10610e6e57610100808354040283529160200191610e99565b820191906000526020600020905b815481529060010190602001808311610e7c57829003601f168201915b505050505081565b6000806000610eae612142565b925092509250909192565b6000610ec6338484612796565b5060015b92915050565b600081565b6009546001600160a01b031681565b60135481565b60035481565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610f6f576001600160a01b0384166000908152600560209081526040808320338452909152902054610f4a9083612440565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610f7a8484846127f8565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60065481565b60105481565b600954600090819081906001600160a01b03878116911614610ff057600b546001600160701b03600160701b820481169116611008565b600b546001600160701b0380821691600160701b9004165b6001600160701b031691506001600160701b031691506110298483836128a6565b9695505050505050565b600181565b600c5481565b600d5481565b6000600f54600114611094576040805162461bcd60e51b8152602060048201526014602482015273159bdb185d1a5b1954185a5c8e881313d0d2d15160621b604482015290519081900360640190fd5b6000600f819055806110a4612142565b50915091506000806110b4612306565b909250905060006110ce836001600160701b038716612440565b905060006110e5836001600160701b038716612440565b6003549091508061111c576111086103e8610bcc61110386866123e0565b612991565b975061111760006103e86129e3565b61115f565b61115c6001600160701b03881661113385846123e0565b8161113a57fe5b046001600160701b03881661114f85856123e0565b8161115657fe5b04612a6e565b97505b6000881161119e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806130fc602b913960400191505060405180910390fd5b6111a889896129e3565b6111b4858589896125d4565b6040805184815260208101849052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f55509395945050505050565b60046020526000908152604090205481565b600e5481565b60076020526000908152604090205481565b600080600f5460011461127b576040805162461bcd60e51b8152602060048201526014602482015273159bdb185d1a5b1954185a5c8e881313d0d2d15160621b604482015290519081900360640190fd5b6000600f8190558061128b612142565b50600954600a549294509092506001600160a01b0390811691166000806112b0612306565b3060009081526004602052604090205460035492945090925090806112d583866123e0565b816112dc57fe5b049950806112ea83856123e0565b816112f157fe5b04985060008a1180156113045750600089115b61133f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806131e4602b913960400191505060405180910390fd5b6113493083612a84565b611354868c8c61216c565b61135f858c8b61216c565b611367612306565b909450925061137884848a8a6125d4565b604080518b8152602081018b905281516001600160a01b038e169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a350505050505050506001600f81905550915091565b60115481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e995780601f10610e6e57610100808354040283529160200191610e99565b606061143d61254c565b905090565b6000610ec63384846127f8565b6305f5e10081565b600860009054906101000a90046001600160a01b03166001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156114a557600080fd5b505afa1580156114b9573d6000803e3d6000fd5b505050506040513d60208110156114cf57600080fd5b50516001600160a01b03163314611529576040805162461bcd60e51b81526020600482015260196024820152782b37b630ba34b632a830b4b91d103737ba1036b0b730b3b2b960391b604482015290519081900360640190fd5b6402540be40081111561156d5760405162461bcd60e51b81526004018080602001828103825260388152602001806131756038913960400191505060405180910390fd5b6011805490829055604080518281526020810184905281517fc49b03da3444d692820082f74621517924ca78c599ebbdc46c2d7ec998eaba76929181900390910190a15050565b6103e881565b600f54600114611608576040805162461bcd60e51b8152602060048201526014602482015273159bdb185d1a5b1954185a5c8e881313d0d2d15160621b604482015290519081900360640190fd5b6000600f819055600954600a546001600160a01b03918216929116908061162d612306565b600b54919350915061165690859087906116519086906001600160701b0316612440565b61216c565b600b5461167c9084908790611651908590600160701b90046001600160701b0316612440565b50506001600f55505050565b6008546001600160a01b031681565b600860009054906101000a90046001600160a01b03166001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e557600080fd5b505afa1580156116f9573d6000803e3d6000fd5b505050506040513d602081101561170f57600080fd5b50516001600160a01b03163314611769576040805162461bcd60e51b81526020600482015260196024820152782b37b630ba34b632a830b4b91d103737ba1036b0b730b3b2b960391b604482015290519081900360640190fd5b6305f5e1008111156117ac5760405162461bcd60e51b81526004018080602001828103825260378152602001806131ad6037913960400191505060405180910390fd5b6010805490829055604080518281526020810184905281517f2f5af8c6eb9240361dbd88ac5f4818740d38a4f12070bd75460a97d61b726c39929181900390910190a15050565b600a546001600160a01b031681565b60606000600860009054906101000a90046001600160a01b03166001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516040805160028082526060820183529293509190602083019080368337019050509150601254601354836000815181106118b657fe5b60200260200101846001815181106118ca57fe5b6020908102919091010191909152526000601381905560128190556009548351611912926001600160a01b0390921691849186919061190557fe5b602002602001015161216c565b600a548251611934916001600160a01b03169083908590600190811061190557fe5b600954600a5483517f1c1305802190d35d1b91e92c6043982b3398ae34849c43d2c2f17e61ac67f040926001600160a01b03908116921690859060009061197757fe5b60200260200101518560018151811061198c57fe5b602002602001015160405180856001600160a01b03168152602001846001600160a01b0316815260200183815260200182815260200194505050505060405180910390a15090565b42841015611a1e576040805162461bcd60e51b815260206004820152601260248201527114185a5c915490cc8c0e881156141254915160721b604482015290519081900360640190fd5b6006546001600160a01b0380891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611b39573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b6f5750886001600160a01b0316816001600160a01b0316145b611bc0576040805162461bcd60e51b815260206004820152601c60248201527f5061697245524332303a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611bcb898989612796565b505050505050505050565b6402540be40081565b600560209081526000928352604080842090915290825290205481565b600054610100900460ff1680611c155750611c15612b15565b80611c23575060005460ff16155b611c5e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806130ad602e913960400191505060405180910390fd5b600054610100900460ff16158015611c89576000805460ff1961ff0019909116610100171660011790555b600880546001600160a01b031916331790556001600f558251600214611ce05760405162461bcd60e51b81526004018080602001828103825260468152602001806130676046913960600191505060405180910390fd5b82600181518110611ced57fe5b60200260200101516001600160a01b031683600081518110611d0b57fe5b60200260200101516001600160a01b03161415611d595760405162461bcd60e51b815260040180806020018281038252602681526020018061314f6026913960400191505060405180910390fd5b82600081518110611d6657fe5b602002602001015183600181518110611d7b57fe5b602090810291909101810151600a80546001600160a01b039283166001600160a01b031991821617909155600980549490921693169290921790915582516000918291908501906040811015611dd057600080fd5b50805160209091015190925090506305f5e100821115611e215760405162461bcd60e51b81526004018080602001828103825260378152602001806131ad6037913960400191505060405180910390fd5b6402540be400811115611e655760405162461bcd60e51b81526004018080602001828103825260388152602001806131756038913960400191505060405180910390fd5b60118190556010829055845161208090611e9a908790600090611e8457fe5b60200260200101516001600160a01b0316612b26565b611eaa87600181518110611e8457fe5b6040516020018080750322337b931b29020a6a6902b37b630ba34b6329016960551b81525060160183805190602001908083835b60208310611efd5780518252601f199092019160209182019101611ede565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010182805190602001908083835b60208310611f565780518252601f199092019160209182019101611f37565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052611f9b87600081518110611e8457fe5b611fab88600181518110611e8457fe5b60405160200180806476414d4d2d60d81b81525060050183805190602001908083835b60208310611fed5780518252601f199092019160209182019101611fce565b6001836020036101000a03801982511681845116808217855250505050505090500180602d60f81b81525060010182805190602001908083835b602083106120465780518252601f199092019160209182019101612027565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052612d07565b50508015612094576000805461ff00191690555b505050565b6000806120a4612306565b915091509091565b60125481565b600f54600114612100576040805162461bcd60e51b8152602060048201526014602482015273159bdb185d1a5b1954185a5c8e881313d0d2d15160621b604482015290519081900360640190fd5b6000600f81905580612110612306565b600b54919350915061213990839083906001600160701b0380821691600160701b9004166125d4565b50506001600f55565b600b546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106122195780518252601f1990920191602091820191016121fa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461227b576040519150601f19603f3d011682016040523d82523d6000602084013e612280565b606091505b50915091508180156122ae5750805115806122ae57508080602001905160208110156122ab57600080fd5b50515b6122ff576040805162461bcd60e51b815260206004820152601d60248201527f566f6c6174696c65506169723a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b5050505050565b601254600954604080516370a0823160e01b8152306004820152905160009384936123909391926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561235e57600080fd5b505afa158015612372573d6000803e3d6000fd5b505050506040513d602081101561238857600080fd5b505190612440565b601354600a54604080516370a0823160e01b815230600482015290516120a493926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561235e57600080fd5b6000826123ef57506000610eca565b828202828482816123fc57fe5b04146124395760405162461bcd60e51b81526004018080602001828103825260218152602001806130db6021913960400191505060405180910390fd5b9392505050565b600082821115612497576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008060006124c66402540be4006124c0601054886123e090919063ffffffff16565b90612e37565b905060006124e86402540be4006124c0601054886123e090919063ffffffff16565b9050600061250a6402540be4006124c0601154866123e090919063ffffffff16565b9050600061252c6402540be4006124c0601154866123e090919063ffffffff16565b601280548401905560138054820190559190930397910395509350505050565b6040805160028082526060808301845292602083019080368337505060095482519293506001600160a01b03169183915060009061258657fe5b6001600160a01b039283166020918202929092010152600a548251911690829060019081106125b157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505090565b6001600160701b0384118015906125f257506001600160701b038311155b61263c576040805162461bcd60e51b8152602060048201526016602482015275566f6c6174696c65506169723a204f564552464c4f5760501b604482015290519081900360640190fd5b600b5463ffffffff42811691600160e01b9004811682039081161580159061266c57506001600160701b03841615155b801561268057506001600160701b03831615155b156126eb578063ffffffff166126a88561269986612e9e565b6001600160e01b031690612eb0565b600c80546001600160e01b03929092169290920201905563ffffffff81166126d38461269987612e9e565b600d80546001600160e01b0392909216929092020190555b600b80546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526004602052604090205461281b9082612440565b6001600160a01b03808516600090815260046020526040808220939093559084168152205461284a9082612ecd565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008084116128e65760405162461bcd60e51b81526004018080602001828103825260278152602001806130406027913960400191505060405180910390fd5b6000831180156128f65750600082115b6129315760405162461bcd60e51b815260040180806020018281038252602481526020018061301c6024913960400191505060405180910390fd5b600061294f6010546402540be40003866123e090919063ffffffff16565b9050600061295d82856123e0565b9050600061297a83612974886402540be4006123e0565b90612ecd565b905080828161298557fe5b04979650505050505050565b600060038211156129d4575080600160028204015b818110156129ce578091506002818285816129bd57fe5b0401816129c657fe5b0490506129a6565b506129de565b81156129de575060015b919050565b6003546129f09082612ecd565b6003556001600160a01b038216600090815260046020526040902054612a169082612ecd565b6001600160a01b03831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612a7d5781612439565b5090919050565b6001600160a01b038216600090815260046020526040902054612aa79082612440565b6001600160a01b038316600090815260046020526040902055600354612acd9082612440565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000612b2030612f27565b15905090565b60606001600160a01b038216156129de5760408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b178152915181516000936060936001600160a01b038816939092909182918083835b60208310612b9d5780518252601f199092019160209182019101612b7e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114612bfd576040519150601f19603f3d011682016040523d82523d6000602084013e612c02565b606091505b50915091508115612d00578051602014612cde57808060200190516020811015612c2b57600080fd5b8101908080516040519392919084600160201b821115612c4a57600080fd5b908301906020820185811115612c5f57600080fd5b8251600160201b811182820188101715612c7857600080fd5b82525081516020918201929091019080838360005b83811015612ca5578181015183820152602001612c8d565b50505050905090810190601f168015612cd25780820380516001836020036101000a031916815260200191505b50604052505050612cfd565b612cfd818060200190516020811015612cf657600080fd5b5051612f2d565b92505b5050919050565b8151612d1a906001906020850190612f88565b508051612d2e906002906020840190612f88565b5060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040518082805460018160011615610100020316600290048015612db25780601f10612d90576101008083540402835291820191612db2565b820191906000526020600020905b815481529060010190602001808311612d9e575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606086015260808501959095523060a0808601919091528551808603909101815260c0909401909452505080519101206006555050565b6000808211612e8d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612e9657fe5b049392505050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b03841681612e9657fe5b600082820183811015612439576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3b151590565b606060005b828160ff1660208110612f4157fe5b1a60f81b6001600160f81b03191615801590612f60575060208160ff16105b15612f6d57600101612f32565b60405191506040820160405280825282602083015250919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fc957805160ff1916838001178555612ff6565b82800160010185558215612ff6579182015b82811115612ff6578251825591602001919060010190612fdb565b50613002929150613006565b5090565b5b80821115613002576000815560010161300756fe566f6c6174696c65506169723a20494e53554646494349454e545f4c4951554944495459566f6c6174696c65506169723a20494e53554646494349454e545f494e5055545f414d4f554e54566f6c6174696c65506169723a20546869732074797065206f662070616972206d7573742068617665206f6e6c792074776f20746f6b656e73207768656e2063726561746564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77566f6c6174696c65506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544566f6c6174696c65506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54566f6c6174696c65506169723a20546f6b656e2063616e6e6f74206265207468652073616d65566f6c6174696c65506169723a2041646d696e4665652069732067726561746572207468616e20746865206d6178696d756d2076616c7565566f6c6174696c65506169723a20537761704665652069732067726561746572207468616e20746865206d6178696d756d2076616c7565566f6c6174696c65506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a2646970667358221220e49cec253986b477c95d6e1efc71656308cec3e0de2fc261a647159f45f43d8b64736f6c634300060c0033