60806040526009805461ffff60b01b19169055600a805461ffff191661012c1790556702386f26fc100000600c556701aa535d3d0c0000600d553480156200004657600080fd5b50604051806040016040528060078152602001664d65746162617960c81b8152506040518060400160405280600281526020016126a160f11b815250818181600290805190602001906200009c9291906200011e565b508051620000b29060039060208401906200011e565b50506000805550620000c433620000cc565b505062000201565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012c90620001c4565b90600052602060002090601f0160209004810192826200015057600085556200019b565b82601f106200016b57805160ff19168380011785556200019b565b828001600101855582156200019b579182015b828111156200019b5782518255916020019190600101906200017e565b50620001a9929150620001ad565b5090565b5b80821115620001a95760008155600101620001ae565b600181811c90821680620001d957607f821691505b60208210811415620001fb57634e487b7160e01b600052602260045260246000fd5b50919050565b61286e80620002116000396000f3fe60806040526004361061023f5760003560e01c80636c0360eb1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb01146106af578063d7224ba0146106ca578063dc33e681146106e0578063e985e9c514610700578063f2fde38b1461074957600080fd5b8063b88d4fde14610627578063c507b80614610647578063c87b56dd14610667578063ce6df2b914610687578063d334c54f1461069a57600080fd5b80639231ab2a116100f25780639231ab2a14610567578063954d90d0146105bd57806395d89b41146105dd578063a22cb465146105f2578063a2309ff81461061257600080fd5b80636c0360eb146104dd57806370a08231146104f2578063715018a6146105125780638da5cb5b146105275780639028241b1461054557600080fd5b80633ccfd60b116101bc57806355f804b31161018057806355f804b31461043257806362d5d3f0146104525780636352211e14610487578063645eb7b8146104a75780636817c76c146104c757600080fd5b80633ccfd60b146103b55780633f5e4741146103ca57806342842e0e146103df5780634b11faaf146103ff5780634f558e791461041257600080fd5b806318160ddd1161020357806318160ddd1461031c57806323b872dd1461033f5780632c4e9fc61461035f5780632d20fb60146103755780632d4d87651461039557600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a25780630829ea90146102da578063095ea7b3146102fc57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046124eb565b610769565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102956107bb565b6040516102779190612683565b3480156102ae57600080fd5b506102c26102bd3660046124d3565b61084d565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612464565b610891565b005b34801561030857600080fd5b506102fa6103173660046123a5565b610a3d565b34801561032857600080fd5b50600154600054035b604051908152602001610277565b34801561034b57600080fd5b506102fa61035a36600461225c565b610acb565b34801561036b57600080fd5b50610331600d5481565b34801561038157600080fd5b506102fa6103903660046124d3565b610ad6565b3480156103a157600080fd5b506102fa6103b03660046124d3565b610b0c565b3480156103c157600080fd5b506102fa610b3b565b3480156103d657600080fd5b5061026b610bf0565b3480156103eb57600080fd5b506102fa6103fa36600461225c565b610c18565b6102fa61040d3660046123ce565b610c33565b34801561041e57600080fd5b5061026b61042d3660046124d3565b610e0e565b34801561043e57600080fd5b506102fa61044d366004612523565b610e19565b34801561045e57600080fd5b5060095461047490600160b01b900461ffff1681565b60405161ffff9091168152602001610277565b34801561049357600080fd5b506102c26104a23660046124d3565b610e4f565b3480156104b357600080fd5b506102fa6104c236600461257d565b610e61565b3480156104d357600080fd5b50610331600c5481565b3480156104e957600080fd5b5061029561100d565b3480156104fe57600080fd5b5061033161050d366004612210565b61101c565b34801561051e57600080fd5b506102fa61106a565b34801561053357600080fd5b506009546001600160a01b03166102c2565b34801561055157600080fd5b5060095461047490600160a01b900461ffff1681565b34801561057357600080fd5b506105876105823660046124d3565b6110a0565b6040805182516001600160a01b031681526020808401516001600160401b03169082015291810151151590820152606001610277565b3480156105c957600080fd5b5061026b6105d8366004612425565b6110c6565b3480156105e957600080fd5b5061029561118a565b3480156105fe57600080fd5b506102fa61060d36600461236b565b611199565b34801561061e57600080fd5b50600054610331565b34801561063357600080fd5b506102fa610642366004612297565b61122f565b34801561065357600080fd5b506102fa6106623660046125c2565b61127a565b34801561067357600080fd5b506102956106823660046124d3565b61133c565b6102fa6106953660046123a5565b6113c1565b3480156106a657600080fd5b5061026b611518565b3480156106bb57600080fd5b50600a546104749061ffff1681565b3480156106d657600080fd5b5061033160085481565b3480156106ec57600080fd5b506103316106fb366004612210565b61153d565b34801561070c57600080fd5b5061026b61071b36600461222a565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561075557600080fd5b506102fa610764366004612210565b61156b565b60006001600160e01b031982166380ac58cd60e01b148061079a57506001600160e01b03198216635b5e139f60e01b145b806107b557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546107ca90612776565b80601f01602080910402602001604051908101604052809291908181526020018280546107f690612776565b80156108435780601f1061081857610100808354040283529160200191610843565b820191906000526020600020905b81548152906001019060200180831161082657829003601f168201915b5050505050905090565b600061085882611603565b610875576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6009546001600160a01b031633146108c45760405162461bcd60e51b81526004016108bb90612696565b60405180910390fd5b6000805b82811015610919578383828181106108f057634e487b7160e01b600052603260045260246000fd5b905060400201602001358261090591906126e8565b915080610911816127b1565b9150506108c8565b5060095461ffff600160b01b820481169161093d91600160a01b90910416836126e8565b11156109795760405162461bcd60e51b815260206004820152600b60248201526a18d85b9b9bdd081b5a5b9d60aa1b60448201526064016108bb565b80600960148282829054906101000a900461ffff1661099891906126cb565b92506101000a81548161ffff021916908361ffff16021790555060005b82811015610a3757610a258484838181106109e057634e487b7160e01b600052603260045260246000fd5b6109f69260206040909202019081019150612210565b858584818110610a1657634e487b7160e01b600052603260045260246000fd5b9050604002016020013561162e565b80610a2f816127b1565b9150506109b5565b50505050565b6000610a4882610e4f565b9050806001600160a01b0316836001600160a01b03161415610a7d5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a9d5750610a9b813361071b565b155b15610abb576040516367d9dca160e11b815260040160405180910390fd5b610ac6838383611648565b505050565b610ac68383836116a4565b6009546001600160a01b03163314610b005760405162461bcd60e51b81526004016108bb90612696565b610b098161188f565b50565b6009546001600160a01b03163314610b365760405162461bcd60e51b81526004016108bb90612696565b600b55565b6009546001600160a01b03163314610b655760405162461bcd60e51b81526004016108bb90612696565b604051600090339047908381818185875af1925050503d8060008114610ba7576040519150601f19603f3d011682016040523d82523d6000602084013e610bac565b606091505b5050905080610b095760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016108bb565b600954600090600160e01b900463ffffffff168015801590610c125750804210155b91505090565b610ac68383836040518060200160405280600081525061122f565b610c3b611518565b610c925760405162461bcd60e51b815260206004820152602260248201527f77686974656c6973742073616c6520686173206e6f7420737461727465642079604482015261195d60f21b60648201526084016108bb565b600c83610c9e8661153d565b610ca891906126e8565b1115610cef5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b60448201526064016108bb565b6040516bffffffffffffffffffffffff19606086901b166020820152600090603401604051602081830303815290604052805190602001209050610d6a83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b5491508490506119c6565b610da85760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba10383937b7b360891b60448201526064016108bb565b83600d54610db69190612714565b341015610dfd5760405162461bcd60e51b81526020600482015260156024820152740dccacac840e8de40e6cadcc840dadee4ca408aa89605b1b60448201526064016108bb565b610e0785856119dc565b5050505050565b60006107b582611603565b6009546001600160a01b03163314610e435760405162461bcd60e51b81526004016108bb90612696565b610ac6600e83836120ec565b6000610e5a82611ace565b5192915050565b6009546001600160a01b03163314610e8b5760405162461bcd60e51b81526004016108bb90612696565b8315801590610e9957508215155b610efa5760405162461bcd60e51b815260206004820152602c60248201527f4d6574616261793a3a696e6974696174654d696e743a2077726f6e672070726960448201526b18d95cc81c1c9bdd9a59195960a21b60648201526084016108bb565b60095461ffff600160a01b909104811690831610801590610f255750600154600054038161ffff1610155b610f845760405162461bcd60e51b815260206004820152602a60248201527f4d6574616261793a3a696e6974696174653a2077726f6e6720737570706c69656044820152691cc81c1c9bdd9a59195960b21b60648201526084016108bb565b600c849055600d8390556009805461ffff60b01b1916600160b01b61ffff85811691820292909217909255600a805461ffff1916918416918217905560408051878152602081018790529081019290925260608201527f5292d4cf9a529b61fb8831a8378588433abfa9931c4c15938d37072af0ad82a29060800160405180910390a150505050565b6060611017611be8565b905090565b60006001600160a01b038216611045576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6009546001600160a01b031633146110945760405162461bcd60e51b81526004016108bb90612696565b61109e6000611bf7565b565b60408051606081018252600080825260208201819052918101919091526107b582611ace565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905061114284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b5491508490506119c6565b6111805760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba10383937b7b360891b60448201526064016108bb565b5060019392505050565b6060600380546107ca90612776565b6001600160a01b0382163314156111c35760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61123a8484846116a4565b6001600160a01b0383163b1515801561125c575061125a84848484611c49565b155b15610a37576040516368d2bf6b60e11b815260040160405180910390fd5b6009546001600160a01b031633146112a45760405162461bcd60e51b81526004016108bb90612696565b63ffffffff8216158015906112be575063ffffffff811615155b6113025760405162461bcd60e51b815260206004820152601560248201527419185d195cc81b5d5cdd081899481919599a5b9959605a1b60448201526064016108bb565b600980546001600160c01b0316600160c01b63ffffffff948516026001600160e01b031617600160e01b9290931691909102919091179055565b606061134782611603565b61136457604051630a14c4b560e41b815260040160405180910390fd5b600061136e611be8565b905080516000141561138f57604051806020016040528060008152506113ba565b8061139984611d41565b6040516020016113aa929190612617565b6040516020818303038152906040525b9392505050565b3233146114105760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064016108bb565b611418610bf0565b6114645760405162461bcd60e51b815260206004820152601f60248201527f7075626c69632073616c6520686173206e6f742073746172746564207965740060448201526064016108bb565b600c8111156114b55760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f74206d696e742074686973206d616e79206174206f6e6365000060448201526064016108bb565b80600c546114c39190612714565b34101561150a5760405162461bcd60e51b81526020600482015260156024820152740dccacac840e8de40e6cadcc840dadee4ca408aa89605b1b60448201526064016108bb565b61151482826119dc565b5050565b600954600090600160c01b900463ffffffff168015801590610c125750421015919050565b6001600160a01b038116600090815260056020526040812054600160401b90046001600160401b03166107b5565b6009546001600160a01b031633146115955760405162461bcd60e51b81526004016108bb90612696565b6001600160a01b0381166115fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bb565b610b0981611bf7565b60008054821080156107b5575050600090815260046020526040902054600160e01b900460ff161590565b611514828260405180602001604052806000815250611e5a565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116af82611ace565b9050836001600160a01b031681600001516001600160a01b0316146116e65760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806117045750611704853361071b565b8061171f5750336117148461084d565b6001600160a01b0316145b90508061173f57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661176657604051633a954ecd60e21b815260040160405180910390fd5b61177260008487611648565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102178355870180845292208054919390911661184657600054821461184657805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e07565b806118ad576040516356be441560e01b815260040160405180910390fd5b6000546118cd5760405163c0367cab60e01b815260040160405180910390fd5b600854806118d9575060005b60005481106118fb576040516370e89b1b60e01b815260040160405180910390fd5b60005482820160001981019110156119165750600054600019015b815b8181116119bb576000818152600460205260409020546001600160a01b031615801561195a5750600081815260046020526040902054600160e01b900460ff16155b156119b357600061196a82611ace565b80516000848152600460209081526040909120805491909301516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b0390921691909117179055505b600101611918565b506001016008555050565b6000826119d38584611e67565b14949350505050565b600a5461ffff16816119f16001546000540390565b6119fb91906126e8565b1115611a675760405162461bcd60e51b815260206004820152603560248201527f696e73756666696369656e742072656d61696e696e6720737570706c7920666f6044820152741c8819195cda5c9959081b5a5b9d08185b5bdd5b9d605a1b60648201526084016108bb565b600081118015611a78575060148111155b611ac45760405162461bcd60e51b815260206004820152601760248201527f696e636f7272656374206d696e74207175616e7469747900000000000000000060448201526064016108bb565b611514828261162e565b604080516060810182526000808252602082018190529181019190915281600054811015611bcf57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611bcd5780516001600160a01b031615611b64579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611bc8579392505050565b611b64565b505b604051636f96cda160e11b815260040160405180910390fd5b6060600e80546107ca90612776565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611c7e903390899088908890600401612646565b602060405180830381600087803b158015611c9857600080fd5b505af1925050508015611cc8575060408051601f3d908101601f19168201909252611cc591810190612507565b60015b611d23573d808015611cf6576040519150601f19603f3d011682016040523d82523d6000602084013e611cfb565b606091505b508051611d1b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081611d655750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d8f5780611d79816127b1565b9150611d889050600a83612700565b9150611d69565b6000816001600160401b03811115611db757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611de1576020820181803683370190505b5090505b8415611d3957611df6600183612733565b9150611e03600a866127cc565b611e0e9060306126e8565b60f81b818381518110611e3157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e53600a86612700565b9450611de5565b610ac68383836001611f21565b600081815b8451811015611f19576000858281518110611e9757634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611ed9576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611f06565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611f11816127b1565b915050611e6c565b509392505050565b6000546001600160a01b038516611f4a57604051622e076360e81b815260040160405180910390fd5b83611f685760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561201457506001600160a01b0387163b15155b1561209d575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46120656000888480600101955088611c49565b612082576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561201a57826000541461209857600080fd5b6120e3565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082141561209e575b50600055610e07565b8280546120f890612776565b90600052602060002090601f01602090048101928261211a5760008555612160565b82601f106121335782800160ff19823516178555612160565b82800160010185558215612160579182015b82811115612160578235825591602001919060010190612145565b5061216c929150612170565b5090565b5b8082111561216c5760008155600101612171565b80356001600160a01b038116811461219c57600080fd5b919050565b60008083601f8401126121b2578081fd5b5081356001600160401b038111156121c8578182fd5b6020830191508360208260051b85010111156121e357600080fd5b9250929050565b803561ffff8116811461219c57600080fd5b803563ffffffff8116811461219c57600080fd5b600060208284031215612221578081fd5b6113ba82612185565b6000806040838503121561223c578081fd5b61224583612185565b915061225360208401612185565b90509250929050565b600080600060608486031215612270578081fd5b61227984612185565b925061228760208501612185565b9150604084013590509250925092565b600080600080608085870312156122ac578081fd5b6122b585612185565b93506122c360208601612185565b92506040850135915060608501356001600160401b03808211156122e5578283fd5b818701915087601f8301126122f8578283fd5b81358181111561230a5761230a61280c565b604051601f8201601f19908116603f011681019083821181831017156123325761233261280c565b816040528281528a602084870101111561234a578586fd5b82602086016020830137918201602001949094529598949750929550505050565b6000806040838503121561237d578182fd5b61238683612185565b91506020830135801515811461239a578182fd5b809150509250929050565b600080604083850312156123b7578182fd5b6123c083612185565b946020939093013593505050565b600080600080606085870312156123e3578384fd5b6123ec85612185565b93506020850135925060408501356001600160401b0381111561240d578283fd5b612419878288016121a1565b95989497509550505050565b60008060208385031215612437578182fd5b82356001600160401b0381111561244c578283fd5b612458858286016121a1565b90969095509350505050565b60008060208385031215612476578182fd5b82356001600160401b038082111561248c578384fd5b818501915085601f83011261249f578384fd5b8135818111156124ad578485fd5b8660208260061b85010111156124c1578485fd5b60209290920196919550909350505050565b6000602082840312156124e4578081fd5b5035919050565b6000602082840312156124fc578081fd5b81356113ba81612822565b600060208284031215612518578081fd5b81516113ba81612822565b60008060208385031215612535578182fd5b82356001600160401b038082111561254b578384fd5b818501915085601f83011261255e578384fd5b81358181111561256c578485fd5b8660208285010111156124c1578485fd5b60008060008060808587031215612592578182fd5b84359350602085013592506125a9604086016121ea565b91506125b7606086016121ea565b905092959194509250565b600080604083850312156125d4578182fd5b6125dd836121fc565b9150612253602084016121fc565b6000815180845261260381602086016020860161274a565b601f01601f19169290920160200192915050565b6000835161262981846020880161274a565b83519083019061263d81836020880161274a565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612679908301846125eb565b9695505050505050565b6020815260006113ba60208301846125eb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600061ffff80831681851680830382111561263d5761263d6127e0565b600082198211156126fb576126fb6127e0565b500190565b60008261270f5761270f6127f6565b500490565b600081600019048311821515161561272e5761272e6127e0565b500290565b600082821015612745576127456127e0565b500390565b60005b8381101561276557818101518382015260200161274d565b83811115610a375750506000910152565b600181811c9082168061278a57607f821691505b602082108114156127ab57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127c5576127c56127e0565b5060010190565b6000826127db576127db6127f6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b0957600080fdfea2646970667358221220f30c72f9da80196fe7c27fee23af6a0c8e138eceaca5f25d31197961d87200be64736f6c63430008040033