0x608060405234801561001057600080fd5b5061001a33610025565b611c20600155610075565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a9b806100846000396000f3fe6080604052600436106100a05760003560e01c80638da5cb5b116100645780638da5cb5b1461018a578063afbb88a5146101b2578063ca83ac9e146101d2578063e086e5ec146101e5578063f2fde38b146101fa578063f4f3b2001461021a57600080fd5b80633288f9dd146100ac578063395532c2146101125780636d56d78014610140578063715018a614610155578063745beed81461016a57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100fd6100c73660046112fb565b6001600160a01b0383166000908152600260209081526040808320858452825280832084845290915290205460ff169392505050565b60405190151581526020015b60405180910390f35b34801561011e57600080fd5b5061013261012d36600461146a565b61023a565b604051908152602001610109565b61015361014e366004611589565b610279565b005b34801561016157600080fd5b5061015361085d565b34801561017657600080fd5b5061015361018536600461168d565b610893565b34801561019657600080fd5b506000546040516001600160a01b039091168152602001610109565b3480156101be57600080fd5b506101536101cd366004611796565b610a10565b6101536101e03660046117af565b610a3f565b3480156101f157600080fd5b50610153610f36565b34801561020657600080fd5b506101536102153660046117f9565b610f84565b34801561022657600080fd5b506101536102353660046117f9565b61101f565b600086868686868660405160200161025796959493929190611850565b6040516020818303038152906040528051906020012090509695505050505050565b8651885114801561028b575085518751145b6102d45760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064015b60405180910390fd5b42600154826102e391906118e0565b10156103295760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b61033888888887878787611113565b6103795760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b875160005b8181101561073557600260008b838151811061039c5761039c6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a83815181106103d8576103d86118f8565b602002602001015181526020019081526020016000206000898381518110610402576104026118f8565b60209081029190910181015182528101919091526040016000205460ff161561046d5760405162461bcd60e51b815260206004820152601760248201527f43616e27742062652072656465656d656420616761696e00000000000000000060448201526064016102cb565b60008a8281518110610481576104816118f8565b60200260200101519050336001600160a01b0316816001600160a01b0316636352211e8c85815181106104b6576104b66118f8565b60200260200101516040518263ffffffff1660e01b81526004016104dc91815260200190565b602060405180830381865afa1580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d919061190e565b6001600160a01b0316146105735760405162461bcd60e51b815260206004820181905260248201527f52656465656d6565206e6565647320746f206f776e207468697320746f6b656e60448201526064016102cb565b6001600260008d858151811061058b5761058b6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008c85815181106105c7576105c76118f8565b6020026020010151815260200190815260200160002060008b85815181106105f1576105f16118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561063a5761063a611330565b604051908082528060200260200182016040528015610663578160200160208202803683370190505b509050898381518110610678576106786118f8565b602002602001015181600081518110610693576106936118f8565b602002602001018181525050336001600160a01b03168b6000815181106106bc576106bc6118f8565b60200260200101518d85815181106106d6576106d66118f8565b60200260200101516001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18c8560405161071892919061192b565b60405180910390a45050808061072d906119c8565b91505061037e565b508415610852576001600160a01b0384166107d2578434101561078d5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b348510156107cd57336108fc6107a387346119e3565b6040518115909202916000818181858888f193505050501580156107cb573d6000803e3d6000fd5b505b610852565b6040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084991906119fa565b61085257600080fd5b505050505050505050565b6000546001600160a01b031633146108875760405162461bcd60e51b81526004016102cb90611a17565b61089160006111be565b565b6000546001600160a01b031633146108bd5760405162461bcd60e51b81526004016102cb90611a17565b83518351811480156108cf5750825181145b80156108db5750815181145b6109275760405162461bcd60e51b815260206004820152601760248201527f417272617973206c656e67746873206d69736d6174636800000000000000000060448201526064016102cb565b60005b81811015610a0857828181518110610944576109446118f8565b602002602001015160026000888481518110610962576109626118f8565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600087848151811061099e5761099e6118f8565b6020026020010151815260200190815260200160002060008684815181106109c8576109c86118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a00906119c8565b91505061092a565b505050505050565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016102cb90611a17565b600155565b85516001544290610a5090846118e0565b1015610a965760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b60008167ffffffffffffffff811115610ab157610ab1611330565b604051908082528060200260200182016040528015610ada578160200160208202803683370190505b50905060008267ffffffffffffffff811115610af857610af8611330565b604051908082528060200260200182016040528015610b21578160200160208202803683370190505b50905060005b83811015610d6e578b838281518110610b4257610b426118f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508a828281518110610b7557610b756118f8565b602002602001018181525050600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002060008b8381518110610bcb57610bcb6118f8565b60209081029190910181015182528101919091526040016000205460ff1615610c2f5760405162461bcd60e51b815260206004820152601660248201527521b0b713ba1031329031b630b4b6b2b21030b3b0b4b760511b60448201526064016102cb565b6040516331a9108f60e11b8152600481018c90528c9033906001600160a01b03831690636352211e90602401602060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c919061190e565b6001600160a01b031614610cf25760405162461bcd60e51b815260206004820152601f60248201527f436c61696d6572206e6565647320746f206f776e207468697320746f6b656e0060448201526064016102cb565b6001600160a01b038d1660009081526002602090815260408083208f845290915281208c51600192908e9086908110610d2d57610d2d6118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610d66906119c8565b915050610b27565b50610d7e82828b8a8a8a8a611113565b610dbf5760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b8615610edb576001600160a01b038616610e5b5786341015610e165760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b34871015610e5657336108fc610e2c89346119e3565b6040518115909202916000818181858888f19350505050158015610e54573d6000803e3d6000fd5b505b610edb565b6040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b038716906323b872dd906064016020604051808303816000875af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906119fa565b610edb57600080fd5b336001600160a01b03168a8c6001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18b8d604051610f2192919061192b565b60405180910390a45050505050505050505050565b6000546001600160a01b03163314610f605760405162461bcd60e51b81526004016102cb90611a17565b60405133904780156108fc02916000818181858888f1935050505061089157600080fd5b6000546001600160a01b03163314610fae5760405162461bcd60e51b81526004016102cb90611a17565b6001600160a01b0381166110135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102cb565b61101c816111be565b50565b6000546001600160a01b031633146110495760405162461bcd60e51b81526004016102cb90611a17565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190611a4c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401600060405180830381600087803b1580156110ff57600080fd5b505af1158015610a08573d6000803e3d6000fd5b60008061112489898989898861023a565b9050600061117f826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506111936000546001600160a01b031690565b6001600160a01b03166111a6828761120e565b6001600160a01b0316149a9950505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081516041146112615760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016102cb565b602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa1580156112c1573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b038116811461101c57600080fd5b80356112f6816112d6565b919050565b60008060006060848603121561131057600080fd5b833561131b816112d6565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561136f5761136f611330565b604052919050565b600067ffffffffffffffff82111561139157611391611330565b5060051b60200190565b600082601f8301126113ac57600080fd5b813560206113c16113bc83611377565b611346565b82815260059290921b840181019181810190868411156113e057600080fd5b8286015b848110156114045780356113f7816112d6565b83529183019183016113e4565b509695505050505050565b600082601f83011261142057600080fd5b813560206114306113bc83611377565b82815260059290921b8401810191818101908684111561144f57600080fd5b8286015b848110156114045780358352918301918301611453565b60008060008060008060c0878903121561148357600080fd5b863567ffffffffffffffff8082111561149b57600080fd5b6114a78a838b0161139b565b975060208901359150808211156114bd57600080fd5b6114c98a838b0161140f565b965060408901359150808211156114df57600080fd5b506114ec89828a0161140f565b945050606087013592506080870135611504816112d6565b8092505060a087013590509295509295509295565b600082601f83011261152a57600080fd5b813567ffffffffffffffff81111561154457611544611330565b611557601f8201601f1916602001611346565b81815284602083860101111561156c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156115a657600080fd5b883567ffffffffffffffff808211156115be57600080fd5b6115ca8c838d0161139b565b995060208b01359150808211156115e057600080fd5b6115ec8c838d0161140f565b985060408b013591508082111561160257600080fd5b61160e8c838d0161140f565b975060608b013591508082111561162457600080fd5b6116308c838d01611519565b965060808b0135955061164560a08c016112eb565b945060c08b013591508082111561165b57600080fd5b506116688b828c01611519565b92505060e089013590509295985092959890939650565b801515811461101c57600080fd5b600080600080608085870312156116a357600080fd5b843567ffffffffffffffff808211156116bb57600080fd5b6116c78883890161139b565b95506020915081870135818111156116de57600080fd5b6116ea89828a0161140f565b9550506040870135818111156116ff57600080fd5b61170b89828a0161140f565b94505060608701358181111561172057600080fd5b87019050601f8101881361173357600080fd5b80356117416113bc82611377565b81815260059190911b8201830190838101908a83111561176057600080fd5b928401925b828410156117875783356117788161167f565b82529284019290840190611765565b979a9699509497505050505050565b6000602082840312156117a857600080fd5b5035919050565b600080600080600080600080610100898b0312156117cc57600080fd5b6117d5896112eb565b975060208901359650604089013567ffffffffffffffff8082111561160257600080fd5b60006020828403121561180b57600080fd5b8135611816816112d6565b9392505050565b60008151602080840160005b8381101561184557815187529582019590820190600101611829565b509495945050505050565b865160009082906020808b01845b838110156118835781516001600160a01b03168552938201939082019060010161185e565b5050611898611892848c61181d565b8a61181d565b97885260609690961b6bffffffffffffffffffffffff1916958701959095525050506034830152506054019392505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156118f3576118f36118ca565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561192057600080fd5b8151611816816112d6565b604081526000835180604084015260005b81811015611959576020818701810151606086840101520161193c565b8181111561196b576000606083860101525b50601f01601f1916820182810360609081016020808601919091528551918301829052858101926000926080909101905b808410156119bc578451825293820193600193909301929082019061199c565b50979650505050505050565b60006000198214156119dc576119dc6118ca565b5060010190565b6000828210156119f5576119f56118ca565b500390565b600060208284031215611a0c57600080fd5b81516118168161167f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a5e57600080fd5b505191905056fea26469706673582212201411cc648835d470237929d21564840a9cbccb84907234ae8058f22a68513cf864736f6c634300080a0033