0x608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350612cab806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80636426c79c14610051578063715018a6146100805780638da5cb5b1461008a578063f2fde38b1461009b575b600080fd5b61006461005f366004610383565b6100ae565b6040516001600160a01b03909116815260200160405180910390f35b6100886101e8565b005b6000546001600160a01b0316610064565b6100886100a9366004610453565b61025c565b600080546001600160a01b031633146100e25760405162461bcd60e51b81526004016100d990610475565b60405180910390fd5b60008b8b8b8b8b8b8b8b8b8b6040516100fa90610346565b61010d9a999897969594939291906104aa565b604051809103906000f080158015610129573d6000803e3d6000fd5b509050806001600160a01b03167fcbc7c91b6bd7941a1f0370ba89679d30ba610e7b3c0f1f75795049373033bda18d8d8d8d8d8d8d8d8d8d6040516101779a999897969594939291906104aa565b60405180910390a260405163f2fde38b60e01b81523360048201526001600160a01b0382169063f2fde38b90602401600060405180830381600087803b1580156101c057600080fd5b505af11580156101d4573d6000803e3d6000fd5b50929e9d5050505050505050505050505050565b6000546001600160a01b031633146102125760405162461bcd60e51b81526004016100d990610475565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102865760405162461bcd60e51b81526004016100d990610475565b6001600160a01b0381166102eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6127548061052283390190565b80356001600160a01b038116811461036a57600080fd5b919050565b803563ffffffff8116811461036a57600080fd5b6000806000806000806000806000806101408b8d0312156103a357600080fd5b6103ac8b610353565b99506103ba60208c01610353565b98506103c860408c01610353565b975060608b01356001600160801b03811681146103e457600080fd5b965060808b013567ffffffffffffffff8116811461040157600080fd5b955061040f60a08c0161036f565b945061041d60c08c0161036f565b935060e08b013592506104336101008c0161036f565b91506104426101208c0161036f565b90509295989b9194979a5092959850565b60006020828403121561046557600080fd5b61046e82610353565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6001600160a01b039a8b168152988a1660208a01529690981660408801526001600160801b0394909416606087015267ffffffffffffffff92909216608086015263ffffffff90811660a086015290811660c085015260e0840191909152928316610100830152909116610120820152610140019056fe6101806040523480156200001257600080fd5b5060405162002754380380620027548339810160408190526200003591620001af565b600080546001600160a01b031916339081178255604051899289928992899282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160401b039092166080526001600160801b0390921660015563ffffffff91821660a052811660c0523361016052811660e0526001600160a01b03898116610100528816610140526040518a90309085908590620000dd906200016f565b6001600160a01b039485168152939092166020840152604083015263ffffffff166060820152608001604051809103906000f08015801562000123573d6000803e3d6000fd5b506001600160a01b03166101205250506006805460ff1916600117905550506004805463ffffffff4316600160a01b0263ffffffff60a01b199091161790555062000291945050505050565b610d7280620019e283390190565b80516001600160a01b03811681146200019557600080fd5b919050565b805163ffffffff811681146200019557600080fd5b6000806000806000806000806000806101408b8d031215620001d057600080fd5b620001db8b6200017d565b9950620001eb60208c016200017d565b9850620001fb60408c016200017d565b60608c01519098506001600160801b03811681146200021957600080fd5b60808c01519097506001600160401b03811681146200023757600080fd5b95506200024760a08c016200019a565b94506200025760c08c016200019a565b935060e08b015192506200026f6101008c016200019a565b9150620002806101208c016200019a565b90509295989b9194979a5092959850565b60805160a05160c05160e051610100516101205161014051610160516116976200034b600039600081816103bb0152610d6301526000818161037901528181610d8e01528181610e1c0152610ef30152600081816102090152818161031b01528181610457015261093f01526000818161024801528181610571015281816107aa0152610fa80152600081816102a10152818161065f015261081f015260006112d1015260006112a90152600061127501526116976000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637aad19ff116100b857806392b228b31161007c57806392b228b314610374578063a5a6cd0b1461039b578063affbbda9146103ae578063c45a0155146103b6578063f2fde38b146103dd578063faab2c90146103f057600080fd5b80637aad19ff146102f557806385425f4f1461030a5780638936b63b1461033d5780638da5cb5b146103505780638e6a81291461036157600080fd5b806350868956116100ff578063508689561461026a57806352e031e51461028b57806354fd4d501461029c57806367faa2b6146102d8578063715018a6146102ed57600080fd5b806301cc7c4d1461013c57806302fb0c5e146101dd5780630c08bf88146101fa5780630f4ef8a6146102045780634cf088d914610243575b600080fd5b6101a761014a3660046113d3565b60408051606080820183526000808352602080840182905292840181905293845260058252928290208251938401835280546001600160a01b0381168552600160a01b900463ffffffff1691840191909152600101549082015290565b6040805182516001600160a01b0316815260208084015163ffffffff169082015291810151908201526060015b60405180910390f35b6006546101ea9060ff1681565b60405190151581526020016101d4565b610202610422565b005b61022b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d4565b61022b7f000000000000000000000000000000000000000000000000000000000000000081565b61027d610278366004611404565b610530565b6040519081526020016101d4565b6004546001600160a01b031661022b565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101d4565b600454600160a01b900463ffffffff1661027d565b6102026105e7565b600454600160c01b900463ffffffff1661027d565b61022b6103183660046113d3565b507f000000000000000000000000000000000000000000000000000000000000000090565b6101ea61034b366004611441565b61065b565b6000546001600160a01b031661022b565b6101ea61036f366004611404565b610769565b61022b7f000000000000000000000000000000000000000000000000000000000000000081565b6101ea6103a93660046113d3565b61081b565b61027d6109a5565b61022b7f000000000000000000000000000000000000000000000000000000000000000081565b6102026103eb366004611404565b6109c6565b6104036103fe3660046114c4565b610ab0565b6040805192151583526001600160a01b039091166020830152016101d4565b6000546001600160a01b031633146104555760405162461bcd60e51b815260040161044c906114f7565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638aec85426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d7919061152c565b156105245760405162461bcd60e51b815260206004820152601f60248201527f5265776172644d616e61676572207374696c6c20686f6c64732066756e647300604482015260640161044c565b6006805460ff19169055565b60015460048054604051633a02a42d60e01b81526001600160a01b03808616938201939093526000936105e1939092600160a01b900463ffffffff169186917f00000000000000000000000000000000000000000000000000000000000000001690633a02a42d90602401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc919061152c565b610ca9565b92915050565b6000546001600160a01b031633146106115760405162461bcd60e51b815260040161044c906114f7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60007f000000000000000000000000000000000000000000000000000000000000000063ffffffff166002146106cb5760405162461bcd60e51b8152602060048201526015602482015274383937ba37b1b7b6103430b9903a37903132902b1960591b604482015260640161044c565b60006106d5610d46565b9050336001600160a01b0316816001600160a01b03167f940e173156be8ef613108cfeccd9bce20976d05ae59ee16c3b6e1ff74cef935f6107458863ffffffff1685898960405160200161072a929190611545565b60405160208183030381529060405280519060200120611041565b878760405161075693929190611555565b60405180910390a3506001949350505050565b60015460048054604051633a02a42d60e01b81526001600160a01b03808616938201939093526000936105e1939092600160a01b900463ffffffff169186917f00000000000000000000000000000000000000000000000000000000000000001690633a02a42d906024015b602060405180830381865afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610816919061152c565b611147565b60007f000000000000000000000000000000000000000000000000000000000000000063ffffffff1660011461088b5760405162461bcd60e51b815260206004820152601560248201527470726f746f636f6c2068617320746f20626520563160581b604482015260640161044c565b6000610895610d46565b60045460408051600160c01b90920463ffffffff168083526020830182905260009183019190915291925033906001600160a01b038416907f940e173156be8ef613108cfeccd9bce20976d05ae59ee16c3b6e1ff74cef935f9060600160405180910390a3610914826109098360016115a7565b63ffffffff166111e6565b6040516303a7b07f60e61b815263ffffffff821660048201526001600160a01b0383811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e9ec1fc090604401600060405180830381600087803b15801561098357600080fd5b505af1158015610997573d6000803e3d6000fd5b506001979650505050505050565b6004546000906109c190600160a01b900463ffffffff1661124f565b905090565b6000546001600160a01b031633146109f05760405162461bcd60e51b815260040161044c906114f7565b6001600160a01b038116610a555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516301b2a42d60e01b81526002600482015263ffffffff8316602482015260009081908190738568cba0f6d0459651cd9f0bbcb01547e51dd4bc906301b2a42d90604401602060405180830381865af4158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b37919061152c565b6040516334a4425b60e11b8152600260048201529091506000908190738568cba0f6d0459651cd9f0bbcb01547e51dd4bc9063694884b6906024016040805180830381865af4158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb291906115cf565b6040516375e6dc3960e11b8152600260048201526024810183905260448101869052919350915063ffffffff881690738568cba0f6d0459651cd9f0bbcb01547e51dd4bc9063ebcdb87290606401602060405180830381865af4158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c41919061152c565b14610c555760008094509450505050610ca2565b63ffffffff8616610c6684836115f3565b10610c97575050505063ffffffff8316600090815260056020526040902054600191506001600160a01b0316610ca2565b600080945094505050505b9250929050565b60405163130e5bbd60e11b815260048101859052602481018490526001600160a01b03831660448201526064810182905260009073093ce9a10b45f6481df2330e91cda4227cf26f349063261cb77a90608401602060405180830381865af4158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d919061152c565b95945050505050565b6040516332f256cf60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906365e4ad9e90604401602060405180830381865afa158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb919061160a565b80610e8f57506040516332f256cf60e11b81523360048201523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906365e4ad9e90604401602060405180830381865afa158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f919061160a565b610edb5760405162461bcd60e51b815260206004820152601c60248201527f6d73672e73656e646572206973206e6f7420617574686f72697a656400000000604482015260640161044c565b60405163fa54416160e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fa54416190602401602060405180830381865afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f66919061162c565b60048054600154604051633a02a42d60e01b81526001600160a01b0380861694820194909452939450600160a01b90910463ffffffff1692610fd792849186917f00000000000000000000000000000000000000000000000000000000000000001690633a02a42d906024016107d5565b6110235760405162461bcd60e51b815260206004820152601c60248201527f5573657220636f756c646e742070726f64756365206120626c6f636b00000000604482015260640161044c565b61103b61103663ffffffff8316436115f3565b61125a565b50919050565b604051634e9319b960e11b815260026004820152602481018490526000908190738568cba0f6d0459651cd9f0bbcb01547e51dd4bc90639d26337290604401602060405180830381865af415801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c1919061152c565b604080516060810182526001600160a01b03808816825263ffffffff43811660208085019182528486018a815260008881526005909252959020935184549151909216600160a01b026001600160c01b03199091169190921617178155905160019182015590915061113f90859061113a908490611649565b6111e6565b949350505050565b60405163130e5bbd60e11b815260048101859052602481018490526001600160a01b03831660448201526064810182905260009073093ce9a10b45f6481df2330e91cda4227cf26f349063261cb77a90608401602060405180830381865af41580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db919061152c565b431195945050505050565b604080516060810182526001600160a01b0390931680845263ffffffff4381166020860181905293169390910183905260048054600160c01b90940263ffffffff60c01b19600160a01b9094026001600160c01b03199095169092179390931791909116179055565b60006105e182611398565b600154604051635b01605f60e11b815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602481019190915263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660448301527f0000000000000000000000000000000000000000000000000000000000000000166064820152608481018290527365a28f07b7ce473c3c4535d896fc2be77b3824b99063b602c0be9060a401602060405180830381865af4158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d919061152c565b60018190556040519081527f5a790c48cbebdceff3f1fcd445afd12d57302b7196738d61c60dcd491bf3efba9060200160405180910390a150565b6000602882014381106113ae5750600092915050565b4381900361010081066000036113c957506101009392505050565b60ff169392505050565b6000602082840312156113e557600080fd5b5035919050565b6001600160a01b038116811461140157600080fd5b50565b60006020828403121561141657600080fd5b8135611421816113ec565b9392505050565b803563ffffffff8116811461143c57600080fd5b919050565b60008060006040848603121561145657600080fd5b61145f84611428565b9250602084013567ffffffffffffffff8082111561147c57600080fd5b818601915086601f83011261149057600080fd5b81358181111561149f57600080fd5b8760208285010111156114b157600080fd5b6020830194508093505050509250925092565b600080604083850312156114d757600080fd5b6114e083611428565b91506114ee60208401611428565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561153e57600080fd5b5051919050565b8183823760009101908152919050565b63ffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168083038211156115c6576115c6611591565b01949350505050565b600080604083850312156115e257600080fd5b505080516020909101519092909150565b60008282101561160557611605611591565b500390565b60006020828403121561161c57600080fd5b8151801515811461142157600080fd5b60006020828403121561163e57600080fd5b8151611421816113ec565b6000821982111561165c5761165c611591565b50019056fea26469706673582212203291662c61a2c9f5fc43d65c521899b577cc331f5149c50f62e8d1615b06165564736f6c634300080e003361010060405234801561001157600080fd5b50604051610d72380380610d7283398101604081905261003091610075565b6001600160a01b0393841660c0529190921660e05260809190915263ffffffff1660a0526100cd565b80516001600160a01b038116811461007057600080fd5b919050565b6000806000806080858703121561008b57600080fd5b61009485610059565b93506100a260208601610059565b925060408501519150606085015163ffffffff811681146100c257600080fd5b939692955090935050565b60805160a05160c05160e051610c4a6101286000396000818160c7015281816102bc015261052b0152600081816104ad015281816105f10152610630015260006103330152600081816106af01526106d60152610c4a6000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806309b290681461006757806312065fe01461008f57806385ac2fa9146100a55780638aec8542146100ba578063c56551b6146100c2578063e9ec1fc014610101575b600080fd5b61007a610075366004610a30565b610114565b60405190151581526020015b60405180910390f35b61009761019d565b604051908152602001610086565b6100b86100b3366004610a4b565b6101ac565b005b610097610516565b6100e97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610086565b6100b861010f366004610ad8565b610520565b6040516303fbaf7360e01b815260006004820181905263ffffffff83166024830152907333355945de3e9cae870246ae2c4a1f18b8514e27906303fbaf7390604401602060405180830381865af4158015610173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101979190610b1f565b92915050565b60006101a7610618565b905090565b60005b81811015610511577333355945de3e9cae870246ae2c4a1f18b8514e276303fbaf7360008585858181106101e5576101e5610b3a565b90506020020160208101906101fa9190610a30565b6040516001600160e01b031960e085901b168152600481019290925263ffffffff166024820152604401602060405180830381865af4158015610241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102659190610b1f565b156102b75760405162461bcd60e51b815260206004820152601b60248201527f54686520626c6f636b20686173206265656e207265776172646564000000000060448201526064015b60405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663faab2c908686868181106102fb576102fb610b3a565b90506020020160208101906103109190610a30565b60405160e083901b6001600160e01b031916815263ffffffff91821660048201527f000000000000000000000000000000000000000000000000000000000000000090911660248201526044016040805180830381865afa158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190610b50565b91509150816103de5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420626c6f636b60981b60448201526064016102ae565b60006103e86106a3565b90506000811161043a5760405162461bcd60e51b815260206004820152601a60248201527f5265776172644d616e6167657220686173206e6f2066756e647300000000000060448201526064016102ae565b85858581811061044c5761044c610b3a565b90506020020160208101906104619190610a30565b63ffffffff167fc03e4bb56a67f4e04f08102325c70cf9e42f888a19d6d634bbee5f2a3a0b73d98260405161049891815260200190565b60405180910390a26104d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610700565b6105038686868181106104e9576104e9610b3a565b90506020020160208101906104fe9190610a30565b610752565b8360010193505050506101af565b505050565b60006101a76106a3565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105985760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792074686520706f7320636f6e74726163742063616e2063616c6c000060448201526064016102ae565b60006105a26106a3565b90508263ffffffff167fc03e4bb56a67f4e04f08102325c70cf9e42f888a19d6d634bbee5f2a3a0b73d9826040516105dc91815260200190565b60405180910390a26105116001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610700565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561067f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610b7c565b60006106ad610618565b7f0000000000000000000000000000000000000000000000000000000000000000116106f857507f000000000000000000000000000000000000000000000000000000000000000090565b6101a7610618565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526105119084906107cb565b6040516306449da160e41b81526000600482015263ffffffff82166024820152600160448201527333355945de3e9cae870246ae2c4a1f18b8514e2790636449da109060640160006040518083038186803b1580156107b057600080fd5b505af41580156107c4573d6000803e3d6000fd5b5050505050565b6000610820826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661089d9092919063ffffffff16565b805190915015610511578080602001905181019061083e9190610b1f565b6105115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102ae565b60606108ac84846000856108b6565b90505b9392505050565b6060824710156109175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102ae565b843b6109655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ae565b600080866001600160a01b031685876040516109819190610bc5565b60006040518083038185875af1925050503d80600081146109be576040519150601f19603f3d011682016040523d82523d6000602084013e6109c3565b606091505b50915091506109d38282866109de565b979650505050505050565b606083156109ed5750816108af565b8251156109fd5782518084602001fd5b8160405162461bcd60e51b81526004016102ae9190610be1565b803563ffffffff81168114610a2b57600080fd5b919050565b600060208284031215610a4257600080fd5b6108af82610a17565b60008060208385031215610a5e57600080fd5b823567ffffffffffffffff80821115610a7657600080fd5b818501915085601f830112610a8a57600080fd5b813581811115610a9957600080fd5b8660208260051b8501011115610aae57600080fd5b60209290920196919550909350505050565b6001600160a01b0381168114610ad557600080fd5b50565b60008060408385031215610aeb57600080fd5b610af483610a17565b91506020830135610b0481610ac0565b809150509250929050565b80518015158114610a2b57600080fd5b600060208284031215610b3157600080fd5b6108af82610b0f565b634e487b7160e01b600052603260045260246000fd5b60008060408385031215610b6357600080fd5b610b6c83610b0f565b91506020830151610b0481610ac0565b600060208284031215610b8e57600080fd5b5051919050565b60005b83811015610bb0578181015183820152602001610b98565b83811115610bbf576000848401525b50505050565b60008251610bd7818460208701610b95565b9190910192915050565b6020815260008251806020840152610c00816040850160208701610b95565b601f01601f1916919091016040019291505056fea2646970667358221220812115d2871f2d81245a23d9f466dc71b977c995365b7517d0cd8f9ba243754664736f6c634300080e0033a264697066735822122036b85e3296e45a4c5bea7a2a3f6d3a78e4245cfe192004a38a4c085e61a924ee64736f6c634300080e0033