0x608060405234801561000f575f80fd5b50336040518060400160405280601481526020017f4d656c626f75726e654d61726174686f6e4e46540000000000000000000000008152506040518060400160405280600681526020016526a2a626a0a960d11b815250815f908161007491906101a9565b50600161008182826101a9565b5050506001600160a01b0381166100b157604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100ba816100c0565b50610268565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061013957607f821691505b60208210810361015757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101a457805f5260205f20601f840160051c810160208510156101825750805b601f840160051c820191505b818110156101a1575f815560010161018e565b50505b505050565b81516001600160401b038111156101c2576101c2610111565b6101d6816101d08454610125565b8461015d565b602080601f831160018114610209575f84156101f25750858301515b5f19600386901b1c1916600185901b178555610260565b5f85815260208120601f198616915b8281101561023757888601518255948401946001909101908401610218565b508582101561025457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611864806102755f395ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c8063715018a6116100ad578063b88d4fde1161007d578063c87b56dd11610063578063c87b56dd1461024a578063e985e9c51461025d578063f2fde38b14610298575f80fd5b8063b88d4fde14610224578063ba7aef4314610237575f80fd5b8063715018a6146101f05780638da5cb5b146101f857806395d89b4114610209578063a22cb46514610211575f80fd5b806323b872dd116100e857806323b872dd1461019657806342842e0e146101a95780636352211e146101bc57806370a08231146101cf575f80fd5b806301ffc9a71461011957806306fdde0314610141578063081812fc14610156578063095ea7b314610181575b5f80fd5b61012c6101273660046112d9565b6102ab565b60405190151581526020015b60405180910390f35b610149610306565b604051610138919061135f565b610169610164366004611371565b610395565b6040516001600160a01b039091168152602001610138565b61019461018f3660046113a3565b6103bc565b005b6101946101a43660046113cb565b6103cb565b6101946101b73660046113cb565b61048b565b6101696101ca366004611371565b6104aa565b6101e26101dd366004611404565b6104b4565b604051908152602001610138565b610194610512565b6007546001600160a01b0316610169565b610149610525565b61019461021f36600461141d565b610534565b610194610232366004611514565b61053f565b61019461024536600461158b565b610556565b610149610258366004611371565b610616565b61012c61026b3660046115f1565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6101946102a6366004611404565b610721565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f49064906000000000000000000000000000000000000000000000000000000001480610300575061030082610777565b92915050565b60605f805461031490611622565b80601f016020809104026020016040519081016040528092919081815260200182805461034090611622565b801561038b5780601f106103625761010080835404028352916020019161038b565b820191905f5260205f20905b81548152906001019060200180831161036e57829003601f168201915b5050505050905090565b5f61039f82610859565b505f828152600460205260409020546001600160a01b0316610300565b6103c78282336108aa565b5050565b6001600160a01b038216610412576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f61041e8383336108b7565b9050836001600160a01b0316816001600160a01b031614610485576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610409565b50505050565b6104a583838360405180602001604052805f81525061053f565b505050565b5f61030082610859565b5f6001600160a01b0382166104f7576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610409565b506001600160a01b03165f9081526003602052604090205490565b61051a6109e0565b6105235f610a26565b565b60606001805461031490611622565b6103c7338383610a8f565b61054a8484846103cb565b61048584848484610b64565b61055e6109e0565b5f818152600260205260409020546001600160a01b031615610602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5468697320626962206e756d6265722068617320616c7265616479206d696e7460448201527f656420616e204e465400000000000000000000000000000000000000000000006064820152608401610409565b61060c8382610d24565b6104a58183610d3d565b606061062182610859565b505f828152600660205260408120805461063a90611622565b80601f016020809104026020016040519081016040528092919081815260200182805461066690611622565b80156106b15780601f10610688576101008083540402835291602001916106b1565b820191905f5260205f20905b81548152906001019060200180831161069457829003601f168201915b505050505090505f6106cd60408051602081019091525f815290565b905080515f036106de575092915050565b8151156107105780826040516020016106f8929190611673565b60405160208183030381529060405292505050919050565b61071984610d8c565b949350505050565b6107296109e0565b6001600160a01b03811661076b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610409565b61077481610a26565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061080957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061030057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610300565b5f818152600260205260408120546001600160a01b031680610300576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610409565b6104a58383836001610dfd565b5f828152600260205260408120546001600160a01b03908116908316156108e3576108e3818486610f50565b6001600160a01b0381161561093c576108fe5f855f80610dfd565b6001600160a01b0381165f90815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b6001600160a01b0385161561096a576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6007546001600160a01b03163314610523576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610409565b600780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610ada576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610409565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610485576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290610bbf9033908890879087906004016116a1565b6020604051808303815f875af1925050508015610c17575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c14918101906116dc565b60015b610c97573d808015610c44576040519150601f19603f3d011682016040523d82523d5f602084013e610c49565b606091505b5080515f03610c8f576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610409565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610d1d576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610409565b5050505050565b6103c7828260405180602001604052805f815250610fe6565b5f828152600660205260409020610d54828261173b565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6060610d9782610859565b505f610dad60408051602081019091525f815290565b90505f815111610dcb5760405180602001604052805f815250610df6565b80610dd584610ffc565b604051602001610de6929190611673565b6040516020818303038152906040525b9392505050565b8080610e1157506001600160a01b03821615155b15610f09575f610e2084610859565b90506001600160a01b03831615801590610e4c5750826001600160a01b0316816001600160a01b031614155b8015610e7d57506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15610ebf576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610409565b8115610f075783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610f5b8383836110b8565b6104a5576001600160a01b038316610fa2576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610409565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610409565b610ff08383611138565b6104a55f848484610b64565b60605f611008836111cb565b60010190505f8167ffffffffffffffff81111561102757611027611456565b6040519080825280601f01601f191660200182016040528015611051576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461105b57509392505050565b5f6001600160a01b038316158015906107195750826001600160a01b0316846001600160a01b0316148061111057506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b806107195750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160a01b03821661117a576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f6004820152602401610409565b5f61118683835f6108b7565b90506001600160a01b038116156104a5576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610409565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611213577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061123f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061125d57662386f26fc10000830492506010015b6305f5e1008310611275576305f5e100830492506008015b612710831061128957612710830492506004015b6064831061129b576064830492506002015b600a83106103005760010192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610774575f80fd5b5f602082840312156112e9575f80fd5b8135610df6816112ac565b5f5b8381101561130e5781810151838201526020016112f6565b50505f910152565b5f815180845261132d8160208601602086016112f4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610df66020830184611316565b5f60208284031215611381575f80fd5b5035919050565b80356001600160a01b038116811461139e575f80fd5b919050565b5f80604083850312156113b4575f80fd5b6113bd83611388565b946020939093013593505050565b5f805f606084860312156113dd575f80fd5b6113e684611388565b92506113f460208501611388565b9150604084013590509250925092565b5f60208284031215611414575f80fd5b610df682611388565b5f806040838503121561142e575f80fd5b61143783611388565b91506020830135801515811461144b575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f67ffffffffffffffff8084111561149d5761149d611456565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156114e3576114e3611456565b816040528093508581528686860111156114fb575f80fd5b858560208301375f602087830101525050509392505050565b5f805f8060808587031215611527575f80fd5b61153085611388565b935061153e60208601611388565b925060408501359150606085013567ffffffffffffffff811115611560575f80fd5b8501601f81018713611570575f80fd5b61157f87823560208401611483565b91505092959194509250565b5f805f6060848603121561159d575f80fd5b6115a684611388565b9250602084013567ffffffffffffffff8111156115c1575f80fd5b8401601f810186136115d1575f80fd5b6115e086823560208401611483565b925050604084013590509250925092565b5f8060408385031215611602575f80fd5b61160b83611388565b915061161960208401611388565b90509250929050565b600181811c9082168061163657607f821691505b60208210810361166d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f83516116848184602088016112f4565b8351908301906116988183602088016112f4565b01949350505050565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526116d26080830184611316565b9695505050505050565b5f602082840312156116ec575f80fd5b8151610df6816112ac565b601f8211156104a557805f5260205f20601f840160051c8101602085101561171c5750805b601f840160051c820191505b81811015610d1d575f8155600101611728565b815167ffffffffffffffff81111561175557611755611456565b611769816117638454611622565b846116f7565b602080601f8311600181146117bb575f84156117855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561184f565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611807578886015182559484019460019091019084016117e8565b508582101561184357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b50505050505056fea164736f6c6343000819000a