608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611c9e806100df6000396000f3fe6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e14610542578063df01febc146105a7578063ec18154e146105dc578063f2fde38b146105f257600080fd5b8063a9059cbb146104df578063a95411e0146104fa578063adc9772e1461050f578063c52249831461052257600080fd5b80638da5cb5b116100d15780638da5cb5b1461044d57806395d89b411461048a578063983784851461049f578063a154f1bb146104bf57600080fd5b8063715018a6146104035780638456cb5914610418578063892a810a1461042d57600080fd5b8063313ce5671161016f578063516c49d91161013e578063516c49d9146103665780635298b869146103865780635c975abb146103be57806370a08231146103e357600080fd5b8063313ce567146102f5578063397a1b28146103115780633f4ba83a14610331578063485cc9551461034657600080fd5b8063132cc7a7116101ab578063132cc7a71461024f57806318160ddd1461027c57806323b872dd146102ba57806325c89156146102d557600080fd5b806306fdde03146101d2578063095ea7b3146101fd57806311cfd2101461022d575b600080fd5b3480156101de57600080fd5b506101e7610612565b6040516101f49190611800565b60405180910390f35b34801561020957600080fd5b5061021d610218366004611866565b6106d5565b60405190151581526020016101f4565b34801561023957600080fd5b5061024d610248366004611890565b6106ef565b005b34801561025b57600080fd5b5061026f61026a3660046118fc565b61078c565b6040516101f49190611917565b34801561028857600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016101f4565b3480156102c657600080fd5b5061021d6101cd366004611966565b3480156102e157600080fd5b5061024d6102f03660046118fc565b61087a565b34801561030157600080fd5b50604051601281526020016101f4565b34801561031d57600080fd5b506102ac61032c366004611866565b61088e565b34801561033d57600080fd5b5061024d610992565b34801561035257600080fd5b5061024d6103613660046119a2565b6109a4565b34801561037257600080fd5b506102ac6103813660046118fc565b610b1a565b34801561039257600080fd5b506002546103a6906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b3480156103ca57600080fd5b50600080516020611c498339815191525460ff1661021d565b3480156103ef57600080fd5b506102ac6103fe3660046118fc565b610c3d565b34801561040f57600080fd5b5061024d610c65565b34801561042457600080fd5b5061024d610c77565b34801561043957600080fd5b506000546103a6906001600160a01b031681565b34801561045957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103a6565b34801561049657600080fd5b506101e7610c87565b3480156104ab57600080fd5b5061024d6104ba3660046118fc565b610cc6565b3480156104cb57600080fd5b5061024d6104da3660046118fc565b610d18565b3480156104eb57600080fd5b5061021d6101cd366004611866565b34801561050657600080fd5b506006546102ac565b61024d61051d366004611866565b610d42565b34801561052e57600080fd5b506001546103a6906001600160a01b031681565b34801561054e57600080fd5b506102ac61055d3660046119a2565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b3480156105b357600080fd5b506105c76105c23660046118fc565b610d82565b604080519283526020830191909152016101f4565b3480156105e857600080fd5b506102ac60065481565b3480156105fe57600080fd5b5061024d61060d3660046118fc565b610e89565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611c2983398151915291610651906119d5565b80601f016020809104026020016040519081016040528092919081815260200182805461067d906119d5565b80156106ca5780601f1061069f576101008083540402835291602001916106ca565b820191906000526020600020905b8154815290600101906020018083116106ad57829003601f168201915b505050505091505090565b6000336106e3818585610ec4565b60019150505b92915050565b60025460405163d505accf60e01b81526001600160a01b038981166004830152306024830152604482018890526064820187905260ff8616608483015260a4820185905260c482018490529091169063d505accf9060e401600060405180830381600087803b15801561076157600080fd5b505af1158015610775573d6000803e3d6000fd5b505050506107838787610ed6565b50505050505050565b6001600160a01b0381166000908152600460205260409020546060908067ffffffffffffffff8111156107c1576107c1611a0f565b60405190808252806020026020018201604052801561080657816020015b60408051808201909152600080825260208201528152602001906001900390816107df5790505b50915060005b81811015610873576001600160a01b03841660009081526003602090815260408083208484528252918290208251808401909352805483526001015490820152835184908390811061086057610860611a25565b602090810291909101015260010161080c565b5050919050565b610882610f02565b61088b81610f5d565b50565b600080546001600160a01b031633146108c25760405162461bcd60e51b81526004016108b990611a3b565b60405180910390fd5b6108cb83610c3d565b82111561090b5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016108b9565b6040805180820182528381524260208083019182526001600160a01b0387166000818152600383528581206004808552878320805484529185529682209551865593516001958601555292909252905461096491611a88565b6001600160a01b038416600090815260046020526040902081905561098b90600190611a9b565b9392505050565b61099a610f02565b6109a2610f7f565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109ea5750825b905060008267ffffffffffffffff166001148015610a075750303b155b905081158015610a15575080155b15610a335760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a5d57845460ff60401b1916600160401b1785555b610a6686610fdf565b610a6e610ff0565b610abb6040518060400160405280601081526020016f4f5241205374616b652053686172657360801b815250604051806040016040528060038152602001624f535360e81b815250611000565b610ac3611012565b610acc87610f5d565b831561078357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b600080546001600160a01b03163314610b455760405162461bcd60e51b81526004016108b990611a3b565b6001600160a01b0382166000908152600460205260408120549003610bac5760405162461bcd60e51b815260206004820152601a60248201527f4e6f207769746864726177207265717565737420666f756e642e00000000000060448201526064016108b9565b6001600160a01b03821660009081526005602090815260408083205460049092529091205403610c1e5760405162461bcd60e51b815260206004820152601860248201527f4e6f206e657720776974686472617720726571756573742e000000000000000060448201526064016108b9565b6000610c298361105b565b9050610c35838261117e565b90505b919050565b6001600160a01b03166000908152600080516020611c29833981519152602052604090205490565b610c6d610f02565b6109a26000611208565b610c7f610f02565b6109a2611012565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611c2983398151915291610651906119d5565b610cce610f02565b806001600160a01b038116610cf55760405162461bcd60e51b81526004016108b990611aae565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b610d20610f02565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d6c5760405162461bcd60e51b81526004016108b990611a3b565b610d74611279565b610d7e8282610ed6565b5050565b6001600160a01b03811660009081526005602052604081205481905b6001600160a01b038416600090815260046020526040902054811015610e83576001600160a01b038085166000908152600360209081526040808320858452825280832092548151632c00b8ef60e21b815291519394169263b002e3bc926004808401939192918290030181865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190611add565b8160010154610e519190611a88565b421015610e6b578054610e649084611a88565b9250610e7a565b8054610e779085611a88565b93505b50600101610d9e565b50915091565b610e91610f02565b6001600160a01b038116610ebb57604051631e4fbdf760e01b8152600060048201526024016108b9565b61088b81611208565b610ed183838360016112aa565b505050565b610ee08282611392565b8060066000828254610ef29190611a88565b90915550610d7e905082826113c8565b33610f347f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146109a25760405163118cdaa760e01b81523360048201526024016108b9565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610f87611537565b600080516020611c49833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610fe7611567565b61088b816115b0565b610ff8611567565b6109a26115b8565b611008611567565b610d7e82826115d9565b61101a611279565b600080516020611c49833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610fc1565b6001600160a01b03811660009081526005602052604081205481905b6001600160a01b038416600090815260046020526040902054811015611177576001600160a01b038085166000908152600360209081526040808320858452825280832092548151632c00b8ef60e21b815291519394169263b002e3bc926004808401939192918290030181865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190611add565b816001015461112a9190611a88565b42111561116857805461113d9084611a88565b925061114a826001611a88565b6001600160a01b03861660009081526005602052604090205561116e565b50611177565b50600101611077565b5092915050565b61118782610c3d565b8111156111d65760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642077697468647261772072657175657374000000000000000060448201526064016108b9565b8015610d7e576111e6828261162a565b80600660008282546111f89190611a9b565b90915550610d7e90508282611660565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611c498339815191525460ff16156109a25760405163d93c066560e01b815260040160405180910390fd5b600080516020611c298339815191526001600160a01b0385166112e35760405163e602df0560e01b8152600060048201526024016108b9565b6001600160a01b03841661130d57604051634a1406b160e11b8152600060048201526024016108b9565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561138b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161138291815260200190565b60405180910390a35b5050505050565b6001600160a01b0382166113bc5760405163ec442f0560e01b8152600060048201526024016108b9565b610d7e600083836116c2565b6002546001600160a01b0316806113f15760405162461bcd60e51b81526004016108b990611aae565b341561143f5760405162461bcd60e51b815260206004820152601760248201527f65746820616d6f756e742073686f756c6420626520302e00000000000000000060448201526064016108b9565b600254604051631920845160e01b8152600481018490526001600160a01b03909116906323b872dd90859030908490631920845190602401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b89190611add565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b6020604051808303816000875af115801561150d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115319190611af6565b50505050565b600080516020611c498339815191525460ff166109a257604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109a257604051631afcd79f60e31b815260040160405180910390fd5b610e91611567565b6115c0611567565b600080516020611c49833981519152805460ff19169055565b6115e1611567565b600080516020611c298339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361161b8482611b68565b50600481016115318382611b68565b6001600160a01b03821661165457604051634b637e8f60e11b8152600060048201526024016108b9565b610d7e826000836116c2565b6002546001600160a01b0316806116895760405162461bcd60e51b81526004016108b990611aae565b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016114ee565b600080516020611c298339815191526001600160a01b0384166116fe57818160020160008282546116f39190611a88565b909155506117709050565b6001600160a01b038416600090815260208290526040902054828110156117515760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016108b9565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661178e5760028101805483900390556117ad565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f291815260200190565b60405180910390a350505050565b60006020808352835180602085015260005b8181101561182e57858101830151858201604001528201611812565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c3857600080fd5b6000806040838503121561187957600080fd5b6118828361184f565b946020939093013593505050565b600080600080600080600060e0888a0312156118ab57600080fd5b6118b48861184f565b9650602088013595506040880135945060608801359350608088013560ff811681146118df57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121561190e57600080fd5b61098b8261184f565b602080825282518282018190526000919060409081850190868401855b8281101561195957815180518552860151868501529284019290850190600101611934565b5091979650505050505050565b60008060006060848603121561197b57600080fd5b6119848461184f565b92506119926020850161184f565b9150604084013590509250925092565b600080604083850312156119b557600080fd5b6119be8361184f565b91506119cc6020840161184f565b90509250929050565b600181811c908216806119e957607f821691505b602082108103611a0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252601a908201527f4861766520746f20696e766f6b652066726f6d20726f75746572000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106e9576106e9611a72565b818103818111156106e9576106e9611a72565b602080825260159082015274696e76616c696420746f6b656e206164647265737360581b604082015260600190565b600060208284031215611aef57600080fd5b5051919050565b600060208284031215611b0857600080fd5b8151801515811461098b57600080fd5b601f821115610ed1576000816000526020600020601f850160051c81016020861015611b415750805b601f850160051c820191505b81811015611b6057828155600101611b4d565b505050505050565b815167ffffffffffffffff811115611b8257611b82611a0f565b611b9681611b9084546119d5565b84611b18565b602080601f831160018114611bcb5760008415611bb35750858301515b600019600386901b1c1916600185901b178555611b60565b600085815260208120601f198616915b82811015611bfa57888601518255948401946001909101908401611bdb565b5085821015611c185787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220caa4f969413ff370bde3db58f15f6f1a6c420b69d1e39b307572de68e36d935b64736f6c63430008180033