60806040525f600a55348015610013575f80fd5b503360405180604001604052806009815260200168115b19505c9d13999d60ba1b81525060405180604001604052806005815260200164115310539560da1b815250815f9081610063919061019d565b506001610070828261019d565b50506001600655506001600160a01b0381166100a557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100ae816100b4565b5061025c565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061012d57607f821691505b60208210810361014b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561019857805f5260205f20601f840160051c810160208510156101765750805b601f840160051c820191505b81811015610195575f8155600101610182565b50505b505050565b81516001600160401b038111156101b6576101b6610105565b6101ca816101c48454610119565b84610151565b602080601f8311600181146101fd575f84156101e65750858301515b5f19600386901b1c1916600185901b178555610254565b5f85815260208120601f198616915b8281101561022b5788860151825594840194600190910190840161020c565b508582101561024857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6123b7806102695f395ff3fe608060405260043610610212575f3560e01c806370a082311161011e578063b14c63c5116100a8578063e985e9c51161006d578063e985e9c514610666578063ef4aa80b14610685578063f2824b53146106b5578063f2fde38b146106d4578063f4bf28a0146106f3575f80fd5b8063b14c63c5146105a7578063b88d4fde146105d2578063c87b56dd146105f1578063e5afe3e614610610578063e75722301461063b575f80fd5b80638da5cb5b116100ee5780638da5cb5b1461050d57806395d89b411461052a5780639d1534951461053e5780639fc554091461055d578063a22cb46514610588575f80fd5b806370a0823114610497578063715018a6146104b657806375794a3c146104ca5780638546d002146104df575f80fd5b806342842e0e1161019f5780634fee13fc1161016f5780634fee13fc146103fc57806358dc2cdb1461041b5780636352211e1461043a5780636739f3a41461045957806369e9cae114610478575f80fd5b806342842e0e14610352578063451df52e14610371578063454a2ab3146103a5578063454cc4bc146103b8575f80fd5b80630fd48884116101e55780630fd48884146102c3578063150bde03146102e25780631c35f962146102f55780631f4f5a231461031457806323b872dd14610333575f80fd5b806301ffc9a71461021657806306fdde031461024a578063081812fc1461026b578063095ea7b3146102a2575b5f80fd5b348015610221575f80fd5b50610235610230366004611c70565b61071f565b60405190151581526020015b60405180910390f35b348015610255575f80fd5b5061025e610770565b6040516102419190611cc0565b348015610276575f80fd5b5061028a610285366004611cd2565b6107ff565b6040516001600160a01b039091168152602001610241565b3480156102ad575f80fd5b506102c16102bc366004611d04565b610826565b005b3480156102ce575f80fd5b506102c16102dd366004611dd1565b610835565b6102c16102f0366004611cd2565b6108e0565b348015610300575f80fd5b506102c161030f366004611e5d565b610aff565b34801561031f575f80fd5b5061025e61032e366004611cd2565b610b80565b34801561033e575f80fd5b506102c161034d366004611e7d565b610c1f565b34801561035d575f80fd5b506102c161036c366004611e7d565b610ca8565b34801561037c575f80fd5b5061028a61038b366004611cd2565b600b6020525f90815260409020546001600160a01b031681565b6102c16103b3366004611cd2565b610cc7565b3480156103c3575f80fd5b506103ee6103d2366004611eb6565b600d60209081525f928352604080842090915290825290205481565b604051908152602001610241565b348015610407575f80fd5b506102c1610416366004611e5d565b610ec0565b348015610426575f80fd5b506102c1610435366004611cd2565b610fa1565b348015610445575f80fd5b5061028a610454366004611cd2565b611084565b348015610464575f80fd5b506103ee610473366004611cd2565b61108e565b348015610483575f80fd5b506102c1610492366004611e7d565b6110f3565b3480156104a2575f80fd5b506103ee6104b1366004611ee0565b61115d565b3480156104c1575f80fd5b506102c16111a2565b3480156104d5575f80fd5b506103ee600a5481565b3480156104ea575f80fd5b506102356104f9366004611cd2565b60096020525f908152604090205460ff1681565b348015610518575f80fd5b506007546001600160a01b031661028a565b348015610535575f80fd5b5061025e6111b5565b348015610549575f80fd5b506102c1610558366004611cd2565b6111c4565b348015610568575f80fd5b506103ee610577366004611cd2565b600e6020525f908152604090205481565b348015610593575f80fd5b506102c16105a2366004611ef9565b61127b565b3480156105b2575f80fd5b506103ee6105c1366004611cd2565b600c6020525f908152604090205481565b3480156105dd575f80fd5b506102c16105ec366004611f32565b611286565b3480156105fc575f80fd5b5061025e61060b366004611cd2565b61129d565b34801561061b575f80fd5b506103ee61062a366004611cd2565b60086020525f908152604090205481565b348015610646575f80fd5b506103ee610655366004611cd2565b5f9081526008602052604090205490565b348015610671575f80fd5b50610235610680366004611f9d565b6112c8565b348015610690575f80fd5b506106a461069f366004611e5d565b6112f5565b604051610241959493929190611fc5565b3480156106c0575f80fd5b5061025e6106cf366004611cd2565b6113d7565b3480156106df575f80fd5b506102c16106ee366004611ee0565b61146e565b3480156106fe575f80fd5b5061071261070d366004611cd2565b6114a8565b6040516102419190612009565b5f6001600160e01b031982166380ac58cd60e01b148061074f57506001600160e01b03198216635b5e139f60e01b145b8061076a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f805461077e906120aa565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa906120aa565b80156107f55780601f106107cc576101008083540402835291602001916107f5565b820191905f5260205f20905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b5f610809826115de565b505f828152600460205260409020546001600160a01b031661076a565b610831828233611616565b5050565b61083d611623565b61085a6108526007546001600160a01b031690565b600a54611650565b600a545f90815260086020908152604091829020869055905161088391859185918591016120f9565b60408051601f19818403018152918152600a545f908152600f60205220906108ab90826121a6565b50600a80545f908152600960205260408120805460ff19166001179055815491906108d58361227a565b919050555050505050565b6108e86116b1565b5f8181526009602052604090205460ff1661093d5760405162461bcd60e51b815260206004820152601060248201526f4e4654206e6f7420666f722073616c6560801b60448201526064015b60405180910390fd5b3361094782611084565b6001600160a01b03160361099d5760405162461bcd60e51b815260206004820152601f60248201527f43726561746f722063616e6e6f74207075726368617365206f776e204e4654006044820152606401610934565b5f818152600860205260409020543410156109ef5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610934565b5f818152600960209081526040808320805460ff191690556010825291829020825160a0810190935233835291908101610a2884611084565b6001600160a01b039081168252346020808401919091524260408085019190915280518082018252600f81526e44697265637420507572636861736560881b818401526060948501528554600181810188555f97885296839020865160059092020180549185166001600160a01b031992831617815592860151968301805497909416961695909517909155928201516002840155810151600383015560808101519091906004820190610adc90826121a6565b505050610af2610aeb82611084565b33836116db565b610afc6001600655565b50565b33610b0983611084565b6001600160a01b031614610b595760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b6044820152606401610934565b5f91825260086020908152604080842092909255600990529020805460ff19166001179055565b5f818152600f60205260409020805460609190610b9c906120aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc8906120aa565b8015610c135780601f10610bea57610100808354040283529160200191610c13565b820191905f5260205f20905b815481529060010190602001808311610bf657829003601f168201915b50505050509050919050565b6001600160a01b038216610c4857604051633250574960e11b81525f6004820152602401610934565b5f610c54838333611788565b9050836001600160a01b0316816001600160a01b031614610ca2576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610934565b50505050565b610cc283838360405180602001604052805f815250611286565b505050565b610ccf6116b1565b5f818152600e60205260409020544210610d1b5760405162461bcd60e51b815260206004820152600d60248201526c105d58dd1a5bdb88195b991959609a1b6044820152606401610934565b5f818152600c60205260409020543411610d655760405162461bcd60e51b815260206004820152600b60248201526a42696420746f6f206c6f7760a81b6044820152606401610934565b5f818152600c602052604090205415610dbf575f818152600c6020908152604080832054600d8352818420600b8452828520546001600160a01b031685529092528220805491929091610db9908490612292565b90915550505b5f818152601060209081526040808320815160a081018352338152858552600b8452828520546001600160a01b039081168286019081523483860190815242606085019081528651808801909752600787526620bab1ba34b7b760c91b8789015260808501968752855460018181018855968a5297909820845160059098020180549784166001600160a01b03199889161781559151948201805495909316949096169390931790559251600282015592516003840155519091906004820190610e8990826121a6565b5050505f818152600b6020908152604080832080546001600160a01b03191633179055600c9091529020349055610afc6001600655565b610ec8611623565b6007546001600160a01b0316610edd83611084565b6001600160a01b031614610f2d5760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b6044820152606401610934565b5f8111610f6f5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610934565b5f610f7d82620151806122a5565b90505f610f8a8242612292565b5f948552600e602052604090942093909355505050565b5f818152600e6020526040902054421015610ff65760405162461bcd60e51b8152602060048201526015602482015274105d58dd1a5bdb881b9bdd081e595d08195b991959605a1b6044820152606401610934565b5f818152600b60205260409020546001600160a01b031633146110505760405162461bcd60e51b81526020600482015260126024820152712737ba103434b3b432b9ba103134b23232b960711b6044820152606401610934565b61105c610aeb82611084565b5f908152600b6020908152604080832080546001600160a01b0319169055600c909152812055565b5f61076a826115de565b5f818152600e602052604081205442106110da5760405162461bcd60e51b815260206004820152600d60248201526c105d58dd1a5bdb88195b991959609a1b6044820152606401610934565b5f828152600e602052604090205461076a9042906122bc565b6111066110ff82611084565b338361187a565b6111525760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610934565b610cc28383836116db565b5f6001600160a01b038216611187576040516322718ad960e21b81525f6004820152602401610934565b506001600160a01b03165f9081526003602052604090205490565b6111aa611623565b6111b35f6118de565b565b60606001805461077e906120aa565b6111cc6116b1565b5f818152600d6020908152604080832033808552925280832080549084905590519092919083908381818185875af1925050503d805f8114611229576040519150601f19603f3d011682016040523d82523d5f602084013e61122e565b606091505b505090508061126f5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606401610934565b5050610afc6001600655565b61083133838361192f565b611291848484610c1f565b610ca2848484846119cd565b60606112a882611084565b506040518060a001604052806065815260200161231d6065913992915050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6010602052815f5260405f20818154811061130e575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004850180546001600160a01b039586169850939094169550909390929091611356906120aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611382906120aa565b80156113cd5780601f106113a4576101008083540402835291602001916113cd565b820191905f5260205f20905b8154815290600101906020018083116113b057829003601f168201915b5050505050905085565b600f6020525f9081526040902080546113ef906120aa565b80601f016020809104026020016040519081016040528092919081815260200182805461141b906120aa565b80156114665780601f1061143d57610100808354040283529160200191611466565b820191905f5260205f20905b81548152906001019060200180831161144957829003601f168201915b505050505081565b611476611623565b6001600160a01b03811661149f57604051631e4fbdf760e01b81525f6004820152602401610934565b610afc816118de565b606060105f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156115d3575f8481526020908190206040805160a0810182526005860290920180546001600160a01b0390811684526001820154169383019390935260028301549082015260038201546060820152600482018054919291608084019190611544906120aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611570906120aa565b80156115bb5780601f10611592576101008083540402835291602001916115bb565b820191905f5260205f20905b81548152906001019060200180831161159e57829003601f168201915b505050505081525050815260200190600101906114da565b505050509050919050565b5f818152600260205260408120546001600160a01b03168061076a57604051637e27328960e01b815260048101849052602401610934565b610cc28383836001611af3565b6007546001600160a01b031633146111b35760405163118cdaa760e01b8152336004820152602401610934565b6001600160a01b03821661167957604051633250574960e11b81525f6004820152602401610934565b5f61168583835f611788565b90506001600160a01b03811615610cc2576040516339e3563760e11b81525f6004820152602401610934565b6002600654036116d457604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b6001600160a01b03821661170457604051633250574960e11b81525f6004820152602401610934565b5f61171083835f611788565b90506001600160a01b03811661173c57604051637e27328960e01b815260048101839052602401610934565b836001600160a01b0316816001600160a01b031614610ca2576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610934565b5f828152600260205260408120546001600160a01b03908116908316156117b4576117b4818486611bf7565b6001600160a01b038116156117ee576117cf5f855f80611af3565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561181c576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f6001600160a01b038316158015906118d65750826001600160a01b0316846001600160a01b031614806118b357506118b384846112c8565b806118d657505f828152600460205260409020546001600160a01b038481169116145b949350505050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661196157604051630b61174360e31b81526001600160a01b0383166004820152602401610934565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610ca257604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611a0f9033908890879087906004016122cf565b6020604051808303815f875af1925050508015611a49575060408051601f3d908101601f19168201909252611a4691810190612301565b60015b611ab0573d808015611a76576040519150601f19603f3d011682016040523d82523d5f602084013e611a7b565b606091505b5080515f03611aa857604051633250574960e11b81526001600160a01b0385166004820152602401610934565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611aec57604051633250574960e11b81526001600160a01b0385166004820152602401610934565b5050505050565b8080611b0757506001600160a01b03821615155b15611bc8575f611b16846115de565b90506001600160a01b03831615801590611b425750826001600160a01b0316816001600160a01b031614155b8015611b555750611b5381846112c8565b155b15611b7e5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610934565b8115611bc65783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b611c0283838361187a565b610cc2576001600160a01b038316611c3057604051637e27328960e01b815260048101829052602401610934565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610934565b6001600160e01b031981168114610afc575f80fd5b5f60208284031215611c80575f80fd5b8135611c8b81611c5b565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611c8b6020830184611c92565b5f60208284031215611ce2575f80fd5b5035919050565b80356001600160a01b0381168114611cff575f80fd5b919050565b5f8060408385031215611d15575f80fd5b611d1e83611ce9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611d5a57611d5a611d2c565b604051601f8501601f19908116603f01168101908282118183101715611d8257611d82611d2c565b81604052809350858152868686011115611d9a575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611dc2575f80fd5b611c8b83833560208501611d40565b5f805f8060808587031215611de4575f80fd5b84359350602085013567ffffffffffffffff80821115611e02575f80fd5b611e0e88838901611db3565b94506040870135915080821115611e23575f80fd5b611e2f88838901611db3565b93506060870135915080821115611e44575f80fd5b50611e5187828801611db3565b91505092959194509250565b5f8060408385031215611e6e575f80fd5b50508035926020909101359150565b5f805f60608486031215611e8f575f80fd5b611e9884611ce9565b9250611ea660208501611ce9565b9150604084013590509250925092565b5f8060408385031215611ec7575f80fd5b82359150611ed760208401611ce9565b90509250929050565b5f60208284031215611ef0575f80fd5b611c8b82611ce9565b5f8060408385031215611f0a575f80fd5b611f1383611ce9565b915060208301358015158114611f27575f80fd5b809150509250929050565b5f805f8060808587031215611f45575f80fd5b611f4e85611ce9565b9350611f5c60208601611ce9565b925060408501359150606085013567ffffffffffffffff811115611f7e575f80fd5b8501601f81018713611f8e575f80fd5b611e5187823560208401611d40565b5f8060408385031215611fae575f80fd5b611fb783611ce9565b9150611ed760208401611ce9565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90611ffe90830184611c92565b979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101561209c57888303603f19018552815180516001600160a01b03908116855288820151168885015286810151878501526060808201519085015260809081015160a09185018290529061208881860183611c92565b968901969450505090860190600101612030565b509098975050505050505050565b600181811c908216806120be57607f821691505b6020821081036120dc57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f81518060208401855e5f93019283525090919050565b6702930b934ba3c9d160c51b81525f61211560088301866120e2565b6b016102234b9b1b7bab73a1d160a51b8152612134600c8201866120e2565b90506e016102234b9b1b7bab73a1027b71d1608d1b8152612158600f8201856120e2565b9695505050505050565b601f821115610cc257805f5260205f20601f840160051c810160208510156121875750805b601f840160051c820191505b81811015611aec575f8155600101612193565b815167ffffffffffffffff8111156121c0576121c0611d2c565b6121d4816121ce84546120aa565b84612162565b602080601f831160018114612207575f84156121f05750858301515b5f19600386901b1c1916600185901b17855561225e565b5f85815260208120601f198616915b8281101561223557888601518255948401946001909101908401612216565b508582101561225257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161228b5761228b612266565b5060010190565b8082018082111561076a5761076a612266565b808202811582820484141761076a5761076a612266565b8181038181111561076a5761076a612266565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061215890830184611c92565b5f60208284031215612311575f80fd5b8151611c8b81611c5b56fe68747470733a2f2f6372696d736f6e2d666f726d616c2d62757a7a6172642d3133322e6d7970696e6174612e636c6f75642f697066732f516d4e79765074636655346369647054636233656f64654b3246427452645a68764a566343367234484c39576a71a2646970667358221220343c6c5b227b6a59c3f560af154610c066551bdbfed6fa4ebfa23949cdaa2d4164736f6c63430008190033