[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": 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": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Claim", "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": "Fees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "uint256", "name": "reserve0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reserve1", "type": "uint256" } ], "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "blockTimestampLast", "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": "claimed0", "type": "uint256" }, { "internalType": "uint256", "name": "claimed1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimable0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimable1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "name": "current", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentCumulativePrices", "outputs": [ { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "blockTimestamp", "type": "uint256" } ], "stateMutability": "view", "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": "fees", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint256", "name": "_reserve0", "type": "uint256" }, { "internalType": "uint256", "name": "_reserve1", "type": "uint256" }, { "internalType": "uint256", "name": "_blockTimestampLast", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "index0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "index1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastObservation", "outputs": [ { "components": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "type": "uint256" } ], "internalType": "struct Pair.Observation", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [ { "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" } ], "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": [], "name": "observationLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "observations", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "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": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" } ], "name": "prices", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "granularity", "type": "uint256" } ], "name": "quote", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" } ], "name": "sample", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "supplyIndex0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "supplyIndex1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "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" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50614525806100206000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638129fc1c1161015c578063bda39cad116100ce578063d294f09311610087578063d294f0931461064e578063d505accf14610656578063dd62ed3e14610669578063ebeb31db14610694578063f140a35a1461069c578063fff6cae9146106af57600080fd5b8063bda39cad14610604578063bf944dbc1461060d578063c245febc14610616578063c45a01551461061f578063c5700a0214610632578063d21220a71461063b57600080fd5b80639d63848a116101205780639d63848a146105655780639e8cc04b1461058b5780639f767c881461059e578063a1ac4d13146105be578063a9059cbb146105de578063bc25cf77146105f157600080fd5b80638129fc1c146104f057806389afcb44146104f85780638a7b8cf21461052057806395d89b411461054a5780639af1d35a1461055257600080fd5b8063252c09d711610200578063517b3f82116101b9578063517b3f821461046e5780635881c475146104815780635a76f25e146104945780636a6278421461049d57806370a08231146104b05780637ecebe00146104d057600080fd5b8063252c09d7146103b4578063313ce567146103c757806332c0defd146103e1578063392f37e9146103ea578063443cb4bc146104455780634d5a9f8a1461044e57600080fd5b806313345fe11161025257806313345fe11461033557806318160ddd146103555780631df8c7171461036c578063205aabf11461037457806322be3de11461039457806323b872dd146103a157600080fd5b8063022c0d9f1461028f57806306fdde03146102a45780630902f1ac146102c2578063095ea7b3146102e75780630dfe16811461030a575b600080fd5b6102a261029d3660046136fc565b6106b7565b005b6102ac610da7565b6040516102b991906137c2565b60405180910390f35b6010546011546012545b604080519384526020840192909252908201526060016102b9565b6102fa6102f53660046137f5565b610e35565b60405190151581526020016102b9565b60095461031d906001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b610348610343366004613821565b610ea2565b6040516102b9919061385c565b61035e60045481565b6040519081526020016102b9565b6102cc61109e565b61035e6103823660046138a0565b60186020526000908152604090205481565b6003546102fa9060ff1681565b6102fa6103af3660046138bd565b61110d565b6102cc6103c23660046138fe565b6111d6565b6103cf601281565b60405160ff90911681526020016102b9565b61035e60155481565b600e54600f54601054601154600354600954600a5460408051978852602088019690965294860193909352606085019190915260ff16151560808401526001600160a01b0390811660a08401521660c082015260e0016102b9565b61035e60105481565b61035e61045c3660046138a0565b60196020526000908152604090205481565b61035e61047c3660046137f5565b611209565b61034861048f366004613917565b6112f2565b61035e60115481565b61035e6104ab3660046138a0565b611301565b61035e6104be3660046138a0565b60066020526000908152604090205481565b61035e6104de3660046138a0565b60086020526000908152604090205481565b6102a2611564565b61050b6105063660046138a0565b611e1e565b604080519283526020830191909152016102b9565b610528612164565b60408051825181526020808401519082015291810151908201526060016102b9565b6102ac6121e4565b600b5461031d906001600160a01b031681565b600954600a54604080516001600160a01b039384168152929091166020830152016102b9565b61035e610599366004613917565b6121f1565b61035e6105ac3660046138a0565b60176020526000908152604090205481565b61035e6105cc3660046138a0565b601a6020526000908152604090205481565b6102fa6105ec3660046137f5565b61225e565b6102a26105ff3660046138a0565b612274565b61035e60165481565b61035e60135481565b61035e60145481565b600c5461031d906001600160a01b031681565b61035e60125481565b600a5461031d906001600160a01b031681565b61050b61238b565b6102a261066436600461395b565b612495565b61035e6106773660046139cc565b600560209081526000928352604080842090915290825290205481565b600d5461035e565b61035e6106aa366004613a05565b61279d565b6102a2612862565b601b5460ff16156106e35760405162461bcd60e51b81526004016106da90613a2a565b60405180910390fd5b601b805460ff19166001179055600c54604080516358c3de9360e11b815290516001600160a01b039092169163b187bd2691600480820192602092909190829003018186803b15801561073557600080fd5b505afa158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190613a62565b1561077757600080fd5b60008511806107865750600084115b6107b85760405162461bcd60e51b8152602060048201526003602482015262494f4160e81b60448201526064016106da565b60105460115481871080156107cc57508086105b6107fd5760405162461bcd60e51b8152602060048201526002602482015261125360f21b60448201526064016106da565b600954600a5460009182916001600160a01b0391821691908116908916821480159061083b5750806001600160a01b0316896001600160a01b031614155b61086c5760405162461bcd60e51b8152602060048201526002602482015261125560f21b60448201526064016106da565b8a1561087d5761087d828a8d6129a1565b891561088e5761088e818a8c6129a1565b86156108fb57604051639a7bff7960e01b81526001600160a01b038a1690639a7bff79906108c89033908f908f908e908e90600401613a7d565b600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561093a57600080fd5b505afa15801561094e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109729190613ac9565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b1580156109b457600080fd5b505afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190613ac9565b92505050600089856109fe9190613af8565b8311610a0b576000610a1f565b610a158a86613af8565b610a1f9084613af8565b90506000610a2d8a86613af8565b8311610a3a576000610a4e565b610a448a86613af8565b610a4e9084613af8565b90506000821180610a5f5750600081115b610a915760405162461bcd60e51b815260206004820152600360248201526249494160e81b60448201526064016106da565b600954600a546001600160a01b0391821691168315610b4c57600c54604051636652f0bf60e01b8152306004820152610b4c91670de0b6b3a7640000916001600160a01b0390911690636652f0bf9060240160206040518083038186803b158015610afb57600080fd5b505afa158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b339190613ac9565b610b3d9087613b0f565b610b479190613b2e565b612b04565b8215610bf457600c54604051636652f0bf60e01b8152306004820152610bf491670de0b6b3a7640000916001600160a01b0390911690636652f0bf9060240160206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613ac9565b610be59086613b0f565b610bef9190613b2e565b612ba3565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190613ac9565b6040516370a0823160e01b81523060048201529096506001600160a01b038216906370a082319060240160206040518083038186803b158015610cad57600080fd5b505afa158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce59190613ac9565b9450610cf18888612c3b565b610cfb8787612c3b565b1015610d2d5760405162461bcd60e51b81526020600482015260016024820152604b60f81b60448201526064016106da565b5050610d3b84848888612d34565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a35050601b805460ff19169055505050505050505050565b60018054610db490613b50565b80601f0160208091040260200160405190810160405280929190818152602001828054610de090613b50565b8015610e2d5780601f10610e0257610100808354040283529160200191610e2d565b820191906000526020600020905b815481529060010190602001808311610e1057829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e909086815260200190565b60405180910390a35060015b92915050565b606060008367ffffffffffffffff811115610ebf57610ebf613b85565b604051908082528060200260200182016040528015610ee8578160200160208202803683370190505b50600d54909150600090610efe90600190613af8565b90506000610f0c8587613b0f565b610f169083613af8565b90506000805b8383101561108e57610f2e8784613b9b565b91506000600d8481548110610f4557610f45613bb3565b906000526020600020906003020160000154600d8481548110610f6a57610f6a613bb3565b906000526020600020906003020160000154610f869190613af8565b9050600081600d8681548110610f9e57610f9e613bb3565b906000526020600020906003020160010154600d8681548110610fc357610fc3613bb3565b906000526020600020906003020160010154610fdf9190613af8565b610fe99190613b2e565b9050600082600d878154811061100157611001613bb3565b906000526020600020906003020160020154600d878154811061102657611026613bb3565b9060005260206000209060030201600201546110429190613af8565b61104c9190613b2e565b905061105a8c8e8484612ec8565b88858151811061106c5761106c613bb3565b60209081029190910101525050506001016110878784613b9b565b9250610f1c565b509293505050505b949350505050565b60135460145442600080806110bc6010546011546012549192909190565b9250925092508381146111055760006110d58286613af8565b90506110e18185613b0f565b6110eb9088613b9b565b96506110f78184613b0f565b6111019087613b9b565b9550505b505050909192565b6001600160a01b03831660008181526005602090815260408083203380855292528220549192909190821480159061114757506000198114155b156111bd5760006111588583613af8565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6111c8868686613069565b6001925050505b9392505050565b600d81815481106111e657600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b600080611214612164565b905060008061122161109e565b508451919350915042141561128a57600d805461124090600290613af8565b8154811061125057611250613bb3565b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505092505b82516000906112999042613af8565b90506000818560200151856112ae9190613af8565b6112b89190613b2e565b90506000828660400151856112cd9190613af8565b6112d79190613b2e565b90506112e5888a8484612ec8565b9998505050505050505050565b60606110968484846001610ea2565b601b5460009060ff16156113275760405162461bcd60e51b81526004016106da90613a2a565b601b805460ff191660011790556010546011546009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561137e57600080fd5b505afa158015611392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b69190613ac9565b600a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b1580156113ff57600080fd5b505afa158015611413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114379190613ac9565b905060006114458584613af8565b905060006114538584613af8565b60045490915080611491576103e861147361146e8486613b0f565b613129565b61147d9190613af8565b975061148c60006103e8613199565b6114c6565b6114c38761149f8386613b0f565b6114a99190613b2e565b876114b48486613b0f565b6114be9190613b2e565b61322c565b97505b600088116114fc5760405162461bcd60e51b8152602060048201526003602482015262494c4d60e81b60448201526064016106da565b6115068989613199565b61151285858989612d34565b604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a25050601b805460ff19169055509395945050505050565b600054610100900460ff16158080156115845750600054600160ff909116105b8061159e5750303b15801561159e575060005460ff166001145b6116015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106da565b6000805460ff191660011790558015611624576000805461ff0019166101001790555b600c80546001600160a01b031916339081179091556040805163eb13c4cf60e01b815290516000928392839263eb13c4cf91600480820192606092909190829003018186803b15801561167657600080fd5b505afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae9190613bc9565b6003805482151560ff19909116179055600a80546001600160a01b038085166001600160a01b0319928316179092556009805492861692909116919091179055604051929550909350915060009061170590613641565b604051809103906000f080158015611721573d6000803e3d6000fd5b5060405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529192509082169063485cc95590604401600060405180830381600087803b15801561177157600080fd5b505af1158015611785573d6000803e3d6000fd5b5050600b80546001600160a01b0319166001600160a01b038516179055505081156119ef57836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156117e357600080fd5b505afa1580156117f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261181f9190810190613c11565b836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118949190810190613c11565b6040516020016118a5929190613cbe565b604051602081830303815290604052600190805190602001906118c992919061364e565b50836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561190357600080fd5b505afa158015611917573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261193f9190810190613c11565b836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b49190810190613c11565b6040516020016119c5929190613d2f565b604051602081830303815290604052600290805190602001906119e992919061364e565b50611c30565b836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a649190810190613c11565b836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015611a9d57600080fd5b505afa158015611ab1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ad99190810190613c11565b604051602001611aea929190613d79565b60405160208183030381529060405260019080519060200190611b0e92919061364e565b50836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611b4857600080fd5b505afa158015611b5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b849190810190613c11565b836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611bbd57600080fd5b505afa158015611bd1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bf99190810190613c11565b604051602001611c0a929190613dea565b60405160208183030381529060405260029080519060200190611c2e92919061364e565b505b836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6957600080fd5b505afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190613e07565b611cac90600a613f08565b600e81905550826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ceb57600080fd5b505afa158015611cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d239190613e07565b611d2e90600a613f08565b600f55505060408051606081018252428152600060208201818152928201818152600d8054600181018255925291517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb560039092029182015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb79091015550508015611e1b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b601b54600090819060ff1615611e465760405162461bcd60e51b81526004016106da90613a2a565b601b805460ff19166001179055601054601154600954600a546040516370a0823160e01b81523060048201526001600160a01b03928316929091169060009083906370a082319060240160206040518083038186803b158015611ea857600080fd5b505afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190613ac9565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015611f2557600080fd5b505afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190613ac9565b306000908152600660205260409020546004549192509080611f7f8584613b0f565b611f899190613b2e565b995080611f968484613b0f565b611fa09190613b2e565b985060008a118015611fb25750600089115b611fe45760405162461bcd60e51b815260206004820152600360248201526224a62160e91b60448201526064016106da565b611fee3083613242565b611ff9868c8c6129a1565b612004858c8b6129a1565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a082319060240160206040518083038186803b15801561204357600080fd5b505afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b9190613ac9565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a082319060240160206040518083038186803b1580156120bd57600080fd5b505afa1580156120d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f59190613ac9565b925061210384848a8a612d34565b604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050601b805460ff1916905550959794965093945050505050565b61218860405180606001604052806000815260200160008152602001600081525090565b600d805461219890600190613af8565b815481106121a8576121a8613bb3565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b60028054610db490613b50565b6000806122018585856001610ea2565b90506000805b82518110156122495782818151811061222257612222613bb3565b6020026020010151826122359190613b9b565b91508061224181613f17565b915050612207565b506122548482613b2e565b9695505050505050565b600061226b338484613069565b50600192915050565b601b5460ff16156122975760405162461bcd60e51b81526004016106da90613a2a565b601b805460ff19166001179055600954600a546010546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161234491849186919083906370a08231906024015b60206040518083038186803b1580156122fd57600080fd5b505afa158015612311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123359190613ac9565b61233f9190613af8565b6129a1565b6011546040516370a0823160e01b815230600482015261237c9183918691906001600160a01b038416906370a08231906024016122e5565b5050601b805460ff1916905550565b600080612397336132cd565b505033600090815260196020908152604080832054601a90925290912054811515806123c35750600081115b1561249157336000818152601960209081526040808320839055601a90915280822091909155600b54905163299e7ae760e11b8152600481019290925260248201849052604482018390526001600160a01b03169063533cf5ce90606401600060405180830381600087803b15801561243b57600080fd5b505af115801561244f573d6000803e3d6000fd5b505060408051858152602081018590523393508392507f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645910160405180910390a35b9091565b428410156124d55760405162461bcd60e51b815260206004820152600d60248201526c14185a5c8e8811561412549151609a1b60448201526064016106da565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516125059190613f32565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152918152815160209283012060078190556001600160a01b038a166000908152600890935290822080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876125d083613f17565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161264992919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156126b4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906126ea5750886001600160a01b0316816001600160a01b0316145b6127365760405162461bcd60e51b815260206004820152601760248201527f506169723a20494e56414c49445f5349474e415455524500000000000000000060448201526064016106da565b6001600160a01b038981166000818152600560209081526040808320948d16808452948252918290208b905590518a81527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b601054601154600c54604051636652f0bf60e01b81523060048201526000939291670de0b6b3a7640000916001600160a01b0390911690636652f0bf9060240160206040518083038186803b1580156127f557600080fd5b505afa158015612809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282d9190613ac9565b6128379087613b0f565b6128419190613b2e565b61284b9086613af8565b945061285985858484612ec8565b95945050505050565b601b5460ff16156128855760405162461bcd60e51b81526004016106da90613a2a565b601b805460ff191660011790556009546040516370a0823160e01b8152306004820152612995916001600160a01b0316906370a082319060240160206040518083038186803b1580156128d757600080fd5b505afa1580156128eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290f9190613ac9565b600a546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561295257600080fd5b505afa158015612966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298a9190613ac9565b601054601154612d34565b601b805460ff19169055565b6000836001600160a01b03163b116129f15760405162461bcd60e51b81526020600482015260136024820152722830b4b91d1034b73b30b634b2103a37b5b2b760691b60448201526064016106da565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612a4d9190613fce565b6000604051808303816000865af19150503d8060008114612a8a576040519150601f19603f3d011682016040523d82523d6000602084013e612a8f565b606091505b5091509150818015612ab9575080511580612ab9575080806020019051810190612ab99190613a62565b612afd5760405162461bcd60e51b815260206004820152601560248201527414185a5c8e881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016106da565b5050505050565b600954600b54612b21916001600160a01b039081169116836129a1565b600454600090612b3983670de0b6b3a7640000613b0f565b612b439190613b2e565b90508015612b63578060156000828254612b5d9190613b9b565b90915550505b604080518381526000602082015233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291015b60405180910390a25050565b600a54600b54612bc0916001600160a01b039081169116836129a1565b600454600090612bd883670de0b6b3a7640000613b0f565b612be29190613b2e565b90508015612c02578060166000828254612bfc9190613b9b565b90915550505b60408051600081526020810184905233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a86029101612b97565b60035460009060ff1615612d2357600e54600090612c6185670de0b6b3a7640000613b0f565b612c6b9190613b2e565b90506000600f5484670de0b6b3a7640000612c869190613b0f565b612c909190613b2e565b90506000670de0b6b3a7640000612ca78385613b0f565b612cb19190613b2e565b90506000670de0b6b3a7640000612cc88480613b0f565b612cd29190613b2e565b670de0b6b3a7640000612ce58680613b0f565b612cef9190613b2e565b612cf99190613b9b565b9050670de0b6b3a7640000612d0e8284613b0f565b612d189190613b2e565b945050505050610e9c565b612d2d8284613b0f565b9050610e9c565b6012544290600090612d469083613af8565b9050600081118015612d5757508315155b8015612d6257508215155b15612da957612d718185613b0f565b60136000828254612d829190613b9b565b90915550612d9290508184613b0f565b60146000828254612da39190613b9b565b90915550505b6000612db3612164565b8051909150612dc29084613af8565b9150610708821115612e77576040805160608101825284815260135460208201908152601454928201928352600d805460018101825560009190915291517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5600390930292830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb682015590517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb7909101555b60108790556011869055601283905560408051888152602081018890527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a150505050505050565b60035460009060ff1615613019576000612ee28484612c3b565b600e54909150612efa85670de0b6b3a7640000613b0f565b612f049190613b2e565b600f54909450612f1c84670de0b6b3a7640000613b0f565b612f269190613b2e565b60095490935060009081906001600160a01b03888116911614612f4a578486612f4d565b85855b60095491935091506001600160a01b03888116911614612f8b57600f54612f7c89670de0b6b3a7640000613b0f565b612f869190613b2e565b612faa565b600e54612fa089670de0b6b3a7640000613b0f565b612faa9190613b2e565b97506000612fc2612fbb848b613b9b565b858461342d565b612fcc9083613af8565b600954909150670de0b6b3a7640000906001600160a01b038a8116911614612ff657600e54612ffa565b600f545b6130049083613b0f565b61300e9190613b2e565b945050505050611096565b60095460009081906001600160a01b0387811691161461303a57838561303d565b84845b909250905061304c8783613b9b565b6130568289613b0f565b6130609190613b2e565b92505050611096565b613072836132cd565b61307b826132cd565b6001600160a01b038316600090815260066020526040812080548392906130a3908490613af8565b90915550506001600160a01b038216600090815260066020526040812080548392906130d0908490613b9b565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161311c91815260200190565b60405180910390a3505050565b6000600382111561318a5750806000613143600283613b2e565b61314e906001613b9b565b90505b81811015613184579050806002816131698186613b2e565b6131739190613b9b565b61317d9190613b2e565b9050613151565b50919050565b8115613194575060015b919050565b6131a2826132cd565b80600460008282546131b49190613b9b565b90915550506001600160a01b038216600090815260066020526040812080548392906131e1908490613b9b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600081831061323b57816111cf565b5090919050565b61324b826132cd565b806004600082825461325d9190613af8565b90915550506001600160a01b0382166000908152600660205260408120805483929061328a908490613af8565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613220565b6001600160a01b03811660009081526006602052604090205480156133fb576001600160a01b038216600090815260176020908152604080832080546018808552928520805460155460165494819055949095528290559361332f8584613af8565b9050600061333d8584613af8565b90508115613398576000670de0b6b3a764000061335a848a613b0f565b6133649190613b2e565b6001600160a01b038a16600090815260196020526040812080549293508392909190613391908490613b9b565b9091555050505b80156133f1576000670de0b6b3a76400006133b3838a613b0f565b6133bd9190613b2e565b6001600160a01b038a166000908152601a60205260408120805492935083929091906133ea908490613b9b565b9091555050505b5050505050505050565b6015546001600160a01b0383166000908152601760209081526040808320939093556016546018909152919020555050565b6000805b60ff81101561353357826000613447878361353c565b90508581101561349757600061345d88876135d9565b6134678389613af8565b61347990670de0b6b3a7640000613b0f565b6134839190613b2e565b905061348f8187613b9b565b9550506134d9565b60006134a388876135d9565b6134ad8884613af8565b6134bf90670de0b6b3a7640000613b0f565b6134c99190613b2e565b90506134d58187613af8565b9550505b818511156135025760016134ed8387613af8565b116134fd578493505050506111cf565b61351e565b600161350e8684613af8565b1161351e578493505050506111cf565b5050808061352b90613f17565b915050613431565b50909392505050565b6000670de0b6b3a7640000828185816135558280613b0f565b61355f9190613b2e565b6135699190613b0f565b6135739190613b2e565b61357d9190613b0f565b6135879190613b2e565b670de0b6b3a764000080848161359d8280613b0f565b6135a79190613b2e565b6135b19190613b0f565b6135bb9190613b2e565b6135c59086613b0f565b6135cf9190613b2e565b6111cf9190613b9b565b6000670de0b6b3a764000083816135f08280613b0f565b6135fa9190613b2e565b6136049190613b0f565b61360e9190613b2e565b670de0b6b3a7640000806136228580613b0f565b61362c9190613b2e565b613637866003613b0f565b6135c59190613b0f565b61050580613feb83390190565b82805461365a90613b50565b90600052602060002090601f01602090048101928261367c57600085556136c2565b82601f1061369557805160ff19168380011785556136c2565b828001600101855582156136c2579182015b828111156136c25782518255916020019190600101906136a7565b506136ce9291506136d2565b5090565b5b808211156136ce57600081556001016136d3565b6001600160a01b0381168114611e1b57600080fd5b60008060008060006080868803121561371457600080fd5b8535945060208601359350604086013561372d816136e7565b9250606086013567ffffffffffffffff8082111561374a57600080fd5b818801915088601f83011261375e57600080fd5b81358181111561376d57600080fd5b89602082850101111561377f57600080fd5b9699959850939650602001949392505050565b60005b838110156137ad578181015183820152602001613795565b838111156137bc576000848401525b50505050565b60208152600082518060208401526137e1816040850160208701613792565b601f01601f19169190910160400192915050565b6000806040838503121561380857600080fd5b8235613813816136e7565b946020939093013593505050565b6000806000806080858703121561383757600080fd5b8435613842816136e7565b966020860135965060408601359560600135945092505050565b6020808252825182820181905260009190848201906040850190845b8181101561389457835183529284019291840191600101613878565b50909695505050505050565b6000602082840312156138b257600080fd5b81356111cf816136e7565b6000806000606084860312156138d257600080fd5b83356138dd816136e7565b925060208401356138ed816136e7565b929592945050506040919091013590565b60006020828403121561391057600080fd5b5035919050565b60008060006060848603121561392c57600080fd5b8335613937816136e7565b95602085013595506040909401359392505050565b60ff81168114611e1b57600080fd5b600080600080600080600060e0888a03121561397657600080fd5b8735613981816136e7565b96506020880135613991816136e7565b9550604088013594506060880135935060808801356139af8161394c565b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156139df57600080fd5b82356139ea816136e7565b915060208301356139fa816136e7565b809150509250929050565b60008060408385031215613a1857600080fd5b8235915060208301356139fa816136e7565b6020808252600e908201526d4e6f2072652d656e7472616e637960901b604082015260600190565b8051801515811461319457600080fd5b600060208284031215613a7457600080fd5b6111cf82613a52565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b600060208284031215613adb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015613b0a57613b0a613ae2565b500390565b6000816000190483118215151615613b2957613b29613ae2565b500290565b600082613b4b57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680613b6457607f821691505b6020821081141561318457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60008219821115613bae57613bae613ae2565b500190565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215613bde57600080fd5b8351613be9816136e7565b6020850151909350613bfa816136e7565b9150613c0860408501613a52565b90509250925092565b600060208284031215613c2357600080fd5b815167ffffffffffffffff80821115613c3b57600080fd5b818401915084601f830112613c4f57600080fd5b815181811115613c6157613c61613b85565b604051601f8201601f19908116603f01168101908382118183101715613c8957613c89613b85565b81604052828152876020848701011115613ca257600080fd5b613cb3836020830160208801613792565b979650505050505050565b7f457175616c697a657220537461626c65737761702032706f6f6c202d20000000815260008351613cf681601d850160208801613792565b6c0103830b4b932b2103bb4ba341609d1b601d918401918201528351613d2381602a840160208801613792565b01602a01949350505050565b61732d60f01b815260008351613d4c816002850160208801613792565b602f60f81b6002918401918201528351613d6d816003840160208801613792565b01600301949350505050565b7f457175616c697a657220436c617373696320414d4d202d200000000000000000815260008351613db1816018850160208801613792565b6c0103830b4b932b2103bb4ba341609d1b6018918401918201528351613dde816025840160208801613792565b01602501949350505050565b61762d60f01b815260008351613d4c816002850160208801613792565b600060208284031215613e1957600080fd5b81516111cf8161394c565b600181815b80851115613e5f578160001904821115613e4557613e45613ae2565b80851615613e5257918102915b93841c9390800290613e29565b509250929050565b600082613e7657506001610e9c565b81613e8357506000610e9c565b8160018114613e995760028114613ea357613ebf565b6001915050610e9c565b60ff841115613eb457613eb4613ae2565b50506001821b610e9c565b5060208310610133831016604e8410600b8410161715613ee2575081810a610e9c565b613eec8383613e24565b8060001904821115613f0057613f00613ae2565b029392505050565b60006111cf60ff841683613e67565b6000600019821415613f2b57613f2b613ae2565b5060010190565b600080835481600182811c915080831680613f4e57607f831692505b6020808410821415613f6e57634e487b7160e01b86526022600452602486fd5b818015613f825760018114613f9357613fc0565b60ff19861689528489019650613fc0565b60008a81526020902060005b86811015613fb85781548b820152908501908301613f9f565b505084890196505b509498975050505050505050565b60008251613fe0818460208701613792565b919091019291505056fe608060405234801561001057600080fd5b506104e5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063485cc9551461003b578063533cf5ce14610050575b600080fd5b61004e6100493660046103e5565b610063565b005b61004e61005e366004610418565b6101be565b600054610100900460ff16158080156100835750600054600160ff909116105b8061009d5750303b15801561009d575060005460ff166001145b6101055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610128576000805461ff0019166101001790555b6000805462010000330262010000600160b01b0319909116179055600180546001600160a01b038581166001600160a01b031992831617909255600280549285169290911691909117905580156101b9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000546201000090046001600160a01b0316331461021e5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c79207061697220636f6e74726163742063616e2063616c6c000000000060448201526064016100fc565b811561023b5760015461023b906001600160a01b03168484610254565b80156101b9576002546101b9906001600160a01b031684835b6000836001600160a01b03163b116102ae5760405162461bcd60e51b815260206004820152601760248201527f50616972466565733a20696e76616c696420746f6b656e00000000000000000060448201526064016100fc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161030a919061044b565b6000604051808303816000865af19150503d8060008114610347576040519150601f19603f3d011682016040523d82523d6000602084013e61034c565b606091505b50915091508180156103765750805115806103765750808060200190518101906103769190610486565b6103c25760405162461bcd60e51b815260206004820152601960248201527f50616972466565733a207472616e73666572206661696c65640000000000000060448201526064016100fc565b5050505050565b80356001600160a01b03811681146103e057600080fd5b919050565b600080604083850312156103f857600080fd5b610401836103c9565b915061040f602084016103c9565b90509250929050565b60008060006060848603121561042d57600080fd5b610436846103c9565b95602085013595506040909401359392505050565b6000825160005b8181101561046c5760208186018101518583015201610452565b8181111561047b576000828501525b509190910192915050565b60006020828403121561049857600080fd5b815180151581146104a857600080fd5b939250505056fea2646970667358221220e2a975eab5045658137bc03b784b55bc3444642d5848bec2823a492d6f7834f664736f6c63430008090033a2646970667358221220ea1e4383d10e3c8236545ebe90ba0c6c1a618dcd0cd0a098a7df11618569425764736f6c63430008090033