Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": 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": 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": "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": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": "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": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasMinimums", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" } ], "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": "mintFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "gasAmount", "type": "uint256" } ], "name": "mustBurn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "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": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint112", "name": "minimumAmount", "type": "uint112" } ], "name": "setMinimumBalance", "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": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "feeAmountOverride", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapWithDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gasAmountToken0", "type": "uint256" }, { "internalType": "uint256", "name": "gasAmountToken1", "type": "uint256" } ], "name": "syncSafe", "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokenMinimumBalance", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "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" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint112", "name": "amount", "type": "uint112" } ], "name": "withdrawTokensAgainstMinimumBalance", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001600e5534801561001557600080fd5b50604080518082018252600e81526d586368616e676520414d4d20563160901b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f74972fe396d9537d3a5efe1ef0ac7dd89248cbd05a7fbdb5a940874aa7336a45818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b0319163317905561469b8061010c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80636a62784211610145578063ba9a7a56116100bd578063d505accf1161008c578063e2507dab11610071578063e2507dab14610622578063ed6e76e11461062f578063fff6cae91461064257600080fd5b8063d505accf146105e4578063dd62ed3e146105f757600080fd5b8063ba9a7a561461058a578063bc25cf7714610593578063c45a0155146105a6578063d21220a7146105c457600080fd5b806389afcb4411610114578063a9059cbb116100f9578063a9059cbb14610534578063a90a3a9514610547578063ac637caa1461057757600080fd5b806389afcb44146104e557806395d89b41146104f857600080fd5b80636a6278421461048957806370a082311461049c5780637464fc3d146104bc5780637ecebe00146104c557600080fd5b806318160ddd116101d85780633644e515116101a7578063485cc9551161018c578063485cc955146104645780635909c0d5146104775780635a3d54931461048057600080fd5b80633644e51514610429578063468d9c671461043257600080fd5b806318160ddd146103be57806323b872dd146103d557806330adf81f146103e8578063313ce5671461040f57600080fd5b80630902f1ac116102145780630902f1ac146102e8578063095ea7b31461034e5780630dfe16811461037157806313966db5146103b657600080fd5b8063022c0d9f14610246578063030cbb2c1461025b57806306fdde031461026e57806308f61154146102c0575b600080fd5b61025961025436600461403b565b61064a565b005b6102596102693660046140a5565b6106db565b6102aa6040518060400160405280600e81526020017f586368616e676520414d4d20563100000000000000000000000000000000000081525081565b6040516102b791906140f7565b60405180910390f35b6102d36102ce366004614148565b6109a7565b604080519283526020830191909152016102b7565b600854604080516dffffffffffffffffffffffffffff80841682526e01000000000000000000000000000084041660208201527c010000000000000000000000000000000000000000000000000000000090920463ffffffff16908201526060016102b7565b61036161035c366004614148565b611131565b60405190151581526020016102b7565b6006546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b7565b610259611147565b6103c760005481565b6040519081526020016102b7565b6103616103e3366004614174565b6111b7565b6103c77f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610417601281565b60405160ff90911681526020016102b7565b6103c760035481565b6104456104403660046141d3565b611291565b6040516dffffffffffffffffffffffffffff90911681526020016102b7565b61025961047236600461421a565b611545565b6103c760095481565b6103c7600a5481565b6103c7610497366004614253565b611619565b6103c76104aa366004614253565b60016020526000908152604090205481565b6103c7600b5481565b6103c76104d3366004614253565b60046020526000908152604090205481565b6102d36104f3366004614253565b6119f8565b6102aa6040518060400160405280600981526020017f58372d414d4d2d5631000000000000000000000000000000000000000000000081525081565b610361610542366004614148565b612042565b610445610555366004614253565b600d602052600090815260409020546dffffffffffffffffffffffffffff1681565b610259610585366004614270565b61204f565b6103c76103e881565b6102596105a1366004614253565b612259565b60055473ffffffffffffffffffffffffffffffffffffffff16610391565b6007546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6102596105f23660046142b4565b6126a2565b6103c761060536600461421a565b600260209081526000928352604080842090915290825290205481565b600c546103619060ff1681565b61025961063d366004614325565b61298d565b610259612a19565b600e546001146106bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064015b60405180910390fd5b6000600e556106cf85858560c88686612bb7565b50506001600e55505050565b600e54600114610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e556005546040517f96d6487900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906396d6487990602401602060405180830381865afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190614398565b610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586368616e67653a20464f5242494444454e000000000000000000000000000060448201526064016106b2565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261099e9173ffffffffffffffffffffffffffffffffffffffff16906370a082319085906024016020604051808303818786fa1580156108b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108db91906143ba565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a082319085906024016020604051808303818786fa15801561094b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061097091906143ba565b6008546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416613582565b50506001600e55565b600080600e54600114610a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e556005546040517fbae064f400000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063bae064f490602401602060405180830381865afa158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190614398565b610ab657600080fd5b600080610b126008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b506006546007543060009081526001602052604081205494965092945073ffffffffffffffffffffffffffffffffffffffff918216939116916dffffffffffffffffffffffffffff8087169290861691610b6c8888613815565b60005490915080610b7d8685614402565b610b87919061446e565b9a5080610b948585614402565b610b9e919061446e565b995060008b118015610bb0575060008a115b610c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201527f4255524e4544000000000000000000000000000000000000000000000000000060648201526084016106b2565b610c463084613976565b610c52878e8d8f613a31565b9a50610c60868e8c8f613a31565b99508b15610dca576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8816906370a08231908e906024016020604051808303818786fa93505050508015610d0f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d0c918101906143ba565b60015b15610d175794505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8716906370a08231908e906024016020604051808303818786fa93505050508015610dbe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dbb918101906143ba565b60015b15610eec579350610eec565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5891906143ba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290955073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906143ba565b93505b610ef885858b8b613582565b8115610f3357600854610f2f906dffffffffffffffffffffffffffff6e010000000000000000000000000000820481169116614402565b600b555b600c5460ff16156110c65773ffffffffffffffffffffffffffffffffffffffff87166000908152600d60205260409020546dffffffffffffffffffffffffffff16851015611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600d60205260409020546dffffffffffffffffffffffffffff168410156110c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b604080518c8152602081018c905273ffffffffffffffffffffffffffffffffffffffff8f169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600e819055509250929050565b600061113e338484613b5d565b50600192915050565b6000806111a36008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091506111b28282613815565b505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461127c5773ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915290205461124a908390614482565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b611287848484613bcc565b5060019392505050565b6005546040517f96d6487900000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906396d6487990602401602060405180830381865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190614398565b61138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586368616e67653a20464f5242494444454e000000000000000000000000000060448201526064016106b2565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d60205260409020546dffffffffffffffffffffffffffff90811690831611156114045773ffffffffffffffffffffffffffffffffffffffff84166000908152600d60205260409020546dffffffffffffffffffffffffffff1691505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020526040812080548492906114499084906dffffffffffffffffffffffffffff16614499565b92506101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506114968484846dffffffffffffffffffffffffffff16613c9b565b60065473ffffffffffffffffffffffffffffffffffffffff166000908152600d60205260409020546dffffffffffffffffffffffffffff16158015611510575060075473ffffffffffffffffffffffffffffffffffffffff166000908152600d60205260409020546dffffffffffffffffffffffffffff16155b1561153e57600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5092915050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146115c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586368616e67653a20464f5242494444454e000000000000000000000000000060448201526064016106b2565b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b6000600e54600114611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e819055600854600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516dffffffffffffffffffffffffffff808516956e01000000000000000000000000000090950416939273ffffffffffffffffffffffffffffffffffffffff16916370a082319160248083019260209291908290030181865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175191906143ba565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e991906143ba565b905060006118076dffffffffffffffffffffffffffff861684614482565b905060006118256dffffffffffffffffffffffffffff861684614482565b905060006118338787613815565b60008054919250819003611874576103e86118566118518587614402565b613e3b565b6118609190614482565b985061186f60006103e8613eab565b6118c9565b6118c66dffffffffffffffffffffffffffff89166118928387614402565b61189c919061446e565b6dffffffffffffffffffffffffffff89166118b78487614402565b6118c1919061446e565b613f4a565b98505b60008911611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201527f4d494e544544000000000000000000000000000000000000000000000000000060648201526084016106b2565b6119638a8a613eab565b61196f86868a8a613582565b81156119aa576008546119a6906dffffffffffffffffffffffffffff6e010000000000000000000000000000820481169116614402565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600e5550949695505050505050565b600080600e54600114611a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e819055600854600654600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516dffffffffffffffffffffffffffff808616966e010000000000000000000000000000909604169473ffffffffffffffffffffffffffffffffffffffff94851694909316929184916370a08231916024808201926020929091908290030181865afa158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d91906143ba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd191906143ba565b30600090815260016020526040812054919250611bee8888613815565b60005490915080611bff8685614402565b611c09919061446e565b9a5080611c168585614402565b611c20919061446e565b995060008b118015611c32575060008a115b611cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201527f4255524e4544000000000000000000000000000000000000000000000000000060648201526084016106b2565b611cc83084613976565b611cd3878d8d613c9b565b611cde868d8c613c9b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906143ba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290955073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa158015611dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfd91906143ba565b9350611e0b85858b8b613582565b8115611e4657600854611e42906dffffffffffffffffffffffffffff6e010000000000000000000000000000820481169116614402565b600b555b600c5460ff1615611fd95773ffffffffffffffffffffffffffffffffffffffff87166000908152600d60205260409020546dffffffffffffffffffffffffffff16851015611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600d60205260409020546dffffffffffffffffffffffffffff16841015611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b604080518c8152602081018c905273ffffffffffffffffffffffffffffffffffffffff8e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600e81905550915091565b600061113e338484613bcc565b6005546040517f96d6487900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906396d6487990602401602060405180830381865afa1580156120bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e19190614398565b612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586368616e67653a20464f5242494444454e000000000000000000000000000060448201526064016106b2565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600d602052604080822080547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff868116919091179091556006549093168252902054161580156121f9575060075473ffffffffffffffffffffffffffffffffffffffff166000908152600d60205260409020546dffffffffffffffffffffffffffff16155b1561222a57600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050565b600e546001146122c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e556006546007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff938416939092169161239191849186916dffffffffffffffffffffffffffff169083906370a08231906024015b602060405180830381865afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238291906143ba565b61238c9190614482565b613c9b565b6008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261241191839186916e01000000000000000000000000000090046dffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401612341565b600c5460ff16156126985773ffffffffffffffffffffffffffffffffffffffff82166000818152600d6020526040908190205490517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff90911691906370a0823190602401602060405180830381865afa1580156124a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cd91906143ba565b101561255a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600d6020526040908190205490517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff90911691906370a0823190602401602060405180830381865afa1580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906143ba565b1015612698576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b50506001600e5550565b4284101561270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f586368616e67653a20455850495245440000000000000000000000000000000060448201526064016106b2565b60035473ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761276c836144c8565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161280d9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612896573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061291157508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586368616e67653a20494e56414c49445f5349474e415455524500000000000060448201526064016106b2565b612982898989613b5d565b505050505050505050565b600e546001146129f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e55612a0c868686868686612bb7565b50506001600e5550505050565b600e54600114612a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f586368616e67653a204c4f434b4544000000000000000000000000000000000060448201526064016106b2565b6000600e556006546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152612bb09173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1e91906143ba565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015612b8c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097091906143ba565b6001600e55565b6000861180612bc65750600085115b612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f586368616e67653a20494e53554646494349454e545f4f55545055545f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106b2565b600080612cae6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b5091509150816dffffffffffffffffffffffffffff1688108015612ce15750806dffffffffffffffffffffffffffff1687105b612d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954590060448201526064016106b2565b612d4f613faf565b60065460075473ffffffffffffffffffffffffffffffffffffffff91821691168a15612d8057612d80828a8d613c9b565b8915612d9157612d91818a8c613c9b565b8515612e24576040517f10d1e85c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16906310d1e85c90612df19033908f908f908d908d90600401614500565b600060405180830381600087803b158015612e0b57600080fd5b505af1158015612e1f573d6000803e3d6000fd5b505050505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb291906143ba565b83526040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4291906143ba565b6020840152600c5460ff16156130e45773ffffffffffffffffffffffffffffffffffffffff82166000908152600d602052604090205483516dffffffffffffffffffffffffffff9091161115613019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260409020546dffffffffffffffffffffffffffff16836001602002015110156130e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c60448201527f414e43450000000000000000000000000000000000000000000000000000000060648201526084016106b2565b50600090506131038a6dffffffffffffffffffffffffffff8616614482565b825111613111576000613137565b61312b8a6dffffffffffffffffffffffffffff8616614482565b82516131379190614482565b905060006131558a6dffffffffffffffffffffffffffff8616614482565b60208401511161316657600061318f565b6131808a6dffffffffffffffffffffffffffff8616614482565b602084015161318f9190614482565b905060008211806131a05750600081115b61322c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f586368616e67653a20494e53554646494349454e545f494e5055545f414d4f5560448201527f4e5400000000000000000000000000000000000000000000000000000000000060648201526084016106b2565b60c888811461340f576005546040517f96d6487900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906396d6487990602401602060405180830381865afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c79190614398565b156132d35750876133fa565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334091a436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133649190614578565b6040517f6fcca69b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690636fcca69b90602401602060405180830381865afa1580156133d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f49190614595565b60ff1690505b60c881111561340a5760c861340c565b805b90505b600061341b8285614402565b855161342a90620186a0614402565b6134349190614482565b905060006134428385614402565b602087015161345490620186a0614402565b61345e9190614482565b905061347d6dffffffffffffffffffffffffffff808916908a16614402565b61348c906402540be400614402565b6134968284614402565b10156134fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f586368616e67653a204b0000000000000000000000000000000000000000000060448201526064016106b2565b50508351602085015161351392508787613582565b60408051838152602081018390529081018c9052606081018b905273ffffffffffffffffffffffffffffffffffffffff8a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a35050505050505050505050565b6dffffffffffffffffffffffffffff84118015906135ae57506dffffffffffffffffffffffffffff8311155b613614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f586368616e67653a204f564552464c4f5700000000000000000000000000000060448201526064016106b2565b60085463ffffffff7c0100000000000000000000000000000000000000000000000000000000909104811642039081161580159061366157506dffffffffffffffffffffffffffff831615155b801561367c57506dffffffffffffffffffffffffffff821615155b15613726578063ffffffff166136b98461369585613f62565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690613f93565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff81166136f98361369586613f62565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b506008805463ffffffff42167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8781166e0100000000000000000000000000009081027fffffffff000000000000000000000000000000000000000000000000000000009095168a83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a150505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a99190614578565b600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061396257801561395d5760006138f86118516dffffffffffffffffffffffffffff808816908916614402565b9050600061390583613e3b565b90508082111561395a57600061391b8284614482565b6000546139289190614402565b9050600061393683856145b2565b90506000613944828461446e565b90508015613956576139568782613eab565b5050505b50505b61396e565b801561396e576000600b555b505092915050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546139a7908290614482565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546139dc908290614482565b600090815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff86811660248301526044808301879052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283928816918591613af9916145ca565b60006040518083038160008787f1925050503d8060008114613b37576040519150601f19603f3d011682016040523d82523d6000602084013e613b3c565b606091505b505090508015613b4f5783915050613b55565b60009150505b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054613bfd908290614482565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054613c3a9082906145b2565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613bbf9085815260200190565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392871691613d6291906145ca565b6000604051808303816000865af19150503d8060008114613d9f576040519150601f19603f3d011682016040523d82523d6000602084013e613da4565b606091505b5091509150818015613dce575080511580613dce575080806020019051810190613dce9190614398565b613e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f586368616e67653a205452414e534645525f4641494c4544000000000000000060448201526064016106b2565b5050505050565b60006003821115613e9c5750806000613e5560028361446e565b613e609060016145b2565b90505b81811015613e9657905080600281613e7b818661446e565b613e8591906145b2565b613e8f919061446e565b9050613e63565b50919050565b8115613ea6575060015b919050565b80600054613eb991906145b2565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054613eec9082906145b2565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613a259085815260200190565b6000818310613f595781613f5b565b825b9392505050565b6000613f8d6e0100000000000000000000000000006dffffffffffffffffffffffffffff84166145e6565b92915050565b6000613f5b6dffffffffffffffffffffffffffff83168461462a565b60405180604001604052806002906020820280368337509192915050565b73ffffffffffffffffffffffffffffffffffffffff81168114613fef57600080fd5b50565b60008083601f84011261400457600080fd5b50813567ffffffffffffffff81111561401c57600080fd5b60208301915083602082850101111561403457600080fd5b9250929050565b60008060008060006080868803121561405357600080fd5b8535945060208601359350604086013561406c81613fcd565b9250606086013567ffffffffffffffff81111561408857600080fd5b61409488828901613ff2565b969995985093965092949392505050565b600080604083850312156140b857600080fd5b50508035926020909101359150565b60005b838110156140e25781810151838201526020016140ca565b838111156140f1576000848401525b50505050565b60208152600082518060208401526141168160408501602087016140c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561415b57600080fd5b823561416681613fcd565b946020939093013593505050565b60008060006060848603121561418957600080fd5b833561419481613fcd565b925060208401356141a481613fcd565b929592945050506040919091013590565b80356dffffffffffffffffffffffffffff81168114613ea657600080fd5b6000806000606084860312156141e857600080fd5b83356141f381613fcd565b9250602084013561420381613fcd565b9150614211604085016141b5565b90509250925092565b6000806040838503121561422d57600080fd5b823561423881613fcd565b9150602083013561424881613fcd565b809150509250929050565b60006020828403121561426557600080fd5b8135613f5b81613fcd565b6000806040838503121561428357600080fd5b823561428e81613fcd565b915061429c602084016141b5565b90509250929050565b60ff81168114613fef57600080fd5b600080600080600080600060e0888a0312156142cf57600080fd5b87356142da81613fcd565b965060208801356142ea81613fcd565b955060408801359450606088013593506080880135614308816142a5565b9699959850939692959460a0840135945060c09093013592915050565b60008060008060008060a0878903121561433e57600080fd5b8635955060208701359450604087013561435781613fcd565b935060608701359250608087013567ffffffffffffffff81111561437a57600080fd5b61438689828a01613ff2565b979a9699509497509295939492505050565b6000602082840312156143aa57600080fd5b81518015158114613f5b57600080fd5b6000602082840312156143cc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561443a5761443a6143d3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261447d5761447d61443f565b500490565b600082821015614494576144946143d3565b500390565b60006dffffffffffffffffffffffffffff838116908316818110156144c0576144c06143d3565b039392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144f9576144f96143d3565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b60006020828403121561458a57600080fd5b8151613f5b81613fcd565b6000602082840312156145a757600080fd5b8151613f5b816142a5565b600082198211156145c5576145c56143d3565b500190565b600082516145dc8184602087016140c7565b9190910192915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831681851681830481118215151615614621576146216143d3565b02949350505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808416806146595761465961443f565b9216919091049291505056fea2646970667358221220714f04d8e48c40cdd4003123097e8896acfec0db0acb45b757662ee82e19129564736f6c634300080f0033