60806040526000600e556040516129a33803806129a3833981016040819052610027916103f5565b8181858560006100378382610596565b5060016100448282610596565b505050805182511461005557600080fd5b600082511161006357600080fd5b60005b82518110156100b9576100b183828151811061008457610084610655565b602002602001015183838151811061009e5761009e610655565b60200260200101516100d360201b60201c565b600101610066565b506100c9915060009050336101c6565b505050505061068c565b6001600160a01b0382166100e657600080fd5b600081116100f357600080fd5b6001600160a01b0382166000908152600a60205260409020541561011657600080fd5b600c8054600181019091557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b0384169081179091556000908152600a6020526040902081905560085461017d9082610276565b600855604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff1661026c5760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102243390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610270565b5060005b92915050565b600080610283838561066b565b90508381101561029257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156102d7576102d7610299565b604052919050565b600082601f8301126102f057600080fd5b81516001600160401b0381111561030957610309610299565b602061031d601f8301601f191682016102af565b828152858284870101111561033157600080fd5b60005b8381101561034f578581018301518282018401528201610334565b506000928101909101919091529392505050565b60006001600160401b0382111561037c5761037c610299565b5060051b60200190565b600082601f83011261039757600080fd5b815160206103ac6103a783610363565b6102af565b8083825260208201915060208460051b8701019350868411156103ce57600080fd5b602086015b848110156103ea57805183529183019183016103d3565b509695505050505050565b6000806000806080858703121561040b57600080fd5b84516001600160401b038082111561042257600080fd5b61042e888389016102df565b955060209150818701518181111561044557600080fd5b61045189828a016102df565b95505060408701518181111561046657600080fd5b8701601f8101891361047757600080fd5b80516104856103a782610363565b81815260059190911b8201840190848101908b8311156104a457600080fd5b928501925b828410156104d85783516001600160a01b03811681146104c95760008081fd5b825292850192908501906104a9565b60608b01519097509450505050808211156104f257600080fd5b506104ff87828801610386565b91505092959194509250565b600181811c9082168061051f57607f821691505b60208210810361053f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610591576000816000526020600020601f850160051c8101602086101561056e5750805b601f850160051c820191505b8181101561058d5782815560010161057a565b5050505b505050565b81516001600160401b038111156105af576105af610299565b6105c3816105bd845461050b565b84610545565b602080601f8311600181146105f857600084156105e05750858301515b600019600386901b1c1916600185901b17855561058d565b600085815260208120601f198616915b8281101561062757888601518255948401946001909101908401610608565b50858210156106455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b8082018082111561027057634e487b7160e01b600052601160045260246000fd5b6123088061069b6000396000f3fe6080604052600436106102085760003560e01c80638fc88c4811610118578063c2f1f14a116100a0578063e030565e1161006f578063e030565e14610668578063e33b7de314610688578063e985e9c51461069d578063f3586fb9146106bd578063f67a769c146106dd5761020f565b8063c2f1f14a146105d2578063c87b56dd146105f2578063ce7c2ac214610612578063d547741f146106485761020f565b8063a217fddf116100e7578063a217fddf14610555578063a22cb4651461056a578063a7f93ebd1461058a578063b823618b1461059f578063b88d4fde146105b25761020f565b80638fc88c48146104ad57806391d14854146104ea57806395d89b411461050a5780639852595c1461051f5761020f565b80632f2ff15d1161019b57806342966c681161016a57806342966c681461040d57806353f37df41461042d5780636352211e1461044d57806370a082311461046d5780638b83209b1461048d5761020f565b80632f2ff15d1461039857806336568abe146103b85780633a98ef39146103d857806342842e0e146103ed5761020f565b806319165587116101d757806319165587146102fa5780631977efc91461031a57806323b872dd1461033a578063248a9ca31461035a5761020f565b806301ffc9a71461024957806306fdde031461027e578063081812fc146102a0578063095ea7b3146102d85761020f565b3661020f57005b604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b34801561025557600080fd5b50610269610264366004611b5e565b6106f2565b60405190151581526020015b60405180910390f35b34801561028a57600080fd5b50610293610703565b6040516102759190611bcb565b3480156102ac57600080fd5b506102c06102bb366004611bde565b610795565b6040516001600160a01b039091168152602001610275565b3480156102e457600080fd5b506102f86102f3366004611c0c565b6107be565b005b34801561030657600080fd5b506102f8610315366004611c38565b6107cd565b34801561032657600080fd5b506102f8610335366004611bde565b61092c565b34801561034657600080fd5b506102f8610355366004611c55565b610980565b34801561036657600080fd5b5061038a610375366004611bde565b60009081526007602052604090206001015490565b604051908152602001610275565b3480156103a457600080fd5b506102f86103b3366004611c96565b610a0b565b3480156103c457600080fd5b506102f86103d3366004611c96565b610a30565b3480156103e457600080fd5b5060085461038a565b3480156103f957600080fd5b506102f8610408366004611c55565b610a68565b34801561041957600080fd5b506102f8610428366004611bde565b610a83565b34801561043957600080fd5b506102f8610448366004611e35565b610af0565b34801561045957600080fd5b506102c0610468366004611bde565b610c59565b34801561047957600080fd5b5061038a610488366004611c38565b610c64565b34801561049957600080fd5b506102c06104a8366004611bde565b610cac565b3480156104b957600080fd5b5061038a6104c8366004611bde565b6000908152600f6020526040902054600160a01b90046001600160401b031690565b3480156104f657600080fd5b50610269610505366004611c96565b610cdc565b34801561051657600080fd5b50610293610d07565b34801561052b57600080fd5b5061038a61053a366004611c38565b6001600160a01b03166000908152600b602052604090205490565b34801561056157600080fd5b5061038a600081565b34801561057657600080fd5b506102f8610585366004611f01565b610d16565b34801561059657600080fd5b50600e5461038a565b6102f86105ad366004611f34565b610d21565b3480156105be57600080fd5b506102f86105cd366004611f7a565b610e30565b3480156105de57600080fd5b506102c06105ed366004611bde565b610e47565b3480156105fe57600080fd5b5061029361060d366004611bde565b610e91565b34801561061e57600080fd5b5061038a61062d366004611c38565b6001600160a01b03166000908152600a602052604090205490565b34801561065457600080fd5b506102f8610663366004611c96565b610e9c565b34801561067457600080fd5b506102f8610683366004611ff9565b610ec1565b34801561069457600080fd5b5060095461038a565b3480156106a957600080fd5b506102696106b8366004612047565b610fc2565b3480156106c957600080fd5b506102696106d8366004611c0c565b610ff0565b3480156106e957600080fd5b50600d5461038a565b60006106fd82611004565b92915050565b60606000805461071290612075565b80601f016020809104026020016040519081016040528092919081815260200182805461073e90612075565b801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b5050505050905090565b60006107a082611029565b506000828152600460205260409020546001600160a01b03166106fd565b6107c9828233611062565b5050565b6001600160a01b0381166000908152600a60205260409020546107ef57600080fd5b60006108066009544761106f90919063ffffffff16565b6001600160a01b0383166000908152600b6020908152604080832054600854600a909352908320549394509192610853929161084d9161084790879061108b565b906110c0565b906110e2565b90508060000361086257600080fd5b6001600160a01b0383166000908152600b6020526040902054610885908261106f565b6001600160a01b0384166000908152600b60205260409020556009546108ab908261106f565b6009556040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156108e4573d6000803e3d6000fd5b50604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b6000610937816110fd565b6000821161097a5760405162461bcd60e51b815260206004820152600b60248201526a04d757374206265203e20360ac1b60448201526064015b60405180910390fd5b50600e55565b6001600160a01b0382166109aa57604051633250574960e11b815260006004820152602401610971565b60006109b783833361110a565b9050836001600160a01b0316816001600160a01b031614610a05576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610971565b50505050565b600082815260076020526040902060010154610a26816110fd565b610a058383611203565b6001600160a01b0381163314610a595760405163334bd91960e11b815260040160405180910390fd5b610a638282611297565b505050565b610a6383838360405180602001604052806000815250610e30565b6000610a8e816110fd565b6000828152600260205260409020546001600160a01b03163314610ae75760405162461bcd60e51b815260206004820152601060248201526f2737ba10309027232a103437b63232b960811b6044820152606401610971565b6107c982611304565b6000610afb816110fd565b8251825114610b4c5760405162461bcd60e51b815260206004820152601f60248201527f55524920616e6420546f6b656e20494420636f756e74206d69736d61746368006044820152606401610971565b60005b8351811015610c525760006001600160a01b0316610b9b858381518110610b7857610b786120af565b60200260200101516000908152600260205260409020546001600160a01b031690565b6001600160a01b031614610beb5760405162461bcd60e51b8152602060048201526017602482015276546f6b656e20494420616c72656164792065786973747360481b6044820152606401610971565b610c0e85858381518110610c0157610c016120af565b602002602001015161133f565b610c4a848281518110610c2357610c236120af565b6020026020010151848381518110610c3d57610c3d6120af565b6020026020010151611359565b600101610b4f565b5050505050565b60006106fd82611029565b60006001600160a01b038216610c90576040516322718ad960e21b815260006004820152602401610971565b506001600160a01b031660009081526003602052604090205490565b6000600c8281548110610cc157610cc16120af565b6000918252602090912001546001600160a01b031692915050565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606001805461071290612075565b6107c93383836113a9565b6000600e5411610d735760405162461bcd60e51b815260206004820152601b60248201527f4c617a79204d696e74696e67206973206e6f7420656e61626c656400000000006044820152606401610971565b600e54341015610dbd5760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610971565b6000828152600260205260409020546001600160a01b031615610e1c5760405162461bcd60e51b8152602060048201526017602482015276546f6b656e20494420616c72656164792065786973747360481b6044820152606401610971565b610e26338361133f565b6107c98282611359565b610e3b848484610980565b610a0584848484611448565b6000818152600f602052604081205442600160a01b9091046001600160401b031610610e8957506000908152600f60205260409020546001600160a01b031690565b506000919050565b60606106fd8261156a565b600082815260076020526040902060010154610eb7816110fd565b610a058383611297565b6000838152600260205260409020546001600160a01b03163314610f425760405162461bcd60e51b815260206004820152603260248201527f455243343930373a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610971565b6000838152600f602090815260409182902080546001600160a01b0386166001600160e01b03199091168117600160a01b6001600160401b03871690810291909117835593519384529092909186917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe910160405180910390a350505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000610ffd338484611673565b9392505050565b60006001600160e01b03198216637965db0b60e01b14806106fd57506106fd826116d6565b6000818152600260205260408120546001600160a01b0316806106fd57604051637e27328960e01b815260048101849052602401610971565b610a6383838360016116fb565b60008061107c83856120db565b905083811015610ffd57600080fd5b60008260000361109d575060006106fd565b60006110a983856120ee565b9050826110b68583612105565b14610ffd57600080fd5b60008082116110ce57600080fd5b60006110da8385612105565b949350505050565b6000828211156110f157600080fd5b60006110da8385612127565b6111078133611801565b50565b6000828152600260205260408120546001600160a01b03908116908316156111375761113781848661183a565b6001600160a01b03811615611175576111546000856000806116fb565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156111a4576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061120f8383610cdc565b61128f5760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556112473390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106fd565b5060006106fd565b60006112a38383610cdc565b1561128f5760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106fd565b6000611313600083600061110a565b90506001600160a01b0381166107c957604051637e27328960e01b815260048101839052602401610971565b6107c982826040518060200160405280600081525061189e565b6000828152600660205260409020611371828261218a565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6001600160a01b0382166113db57604051630b61174360e31b81526001600160a01b0383166004820152602401610971565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610a0557604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061148a903390889087908790600401612249565b6020604051808303816000875af19250505080156114c5575060408051601f3d908101601f191682019092526114c291810190612286565b60015b61152e573d8080156114f3576040519150601f19603f3d011682016040523d82523d6000602084013e6114f8565b606091505b50805160000361152657604051633250574960e11b81526001600160a01b0385166004820152602401610971565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610c5257604051633250574960e11b81526001600160a01b0385166004820152602401610971565b606061157582611029565b506000828152600660205260408120805461158f90612075565b80601f01602080910402602001604051908101604052809291908181526020018280546115bb90612075565b80156116085780601f106115dd57610100808354040283529160200191611608565b820191906000526020600020905b8154815290600101906020018083116115eb57829003601f168201915b50505050509050600061162660408051602081019091526000815290565b90508051600003611638575092915050565b81511561166a5780826040516020016116529291906122a3565b60405160208183030381529060405292505050919050565b6110da846118b5565b60006001600160a01b038316158015906110da5750826001600160a01b0316846001600160a01b031614806116ad57506116ad8484610fc2565b806110da5750506000908152600460205260409020546001600160a01b03908116911614919050565b60006001600160e01b03198216632483248360e11b14806106fd57506106fd82611929565b808061170f57506001600160a01b03821615155b156117d157600061171f84611029565b90506001600160a01b0383161580159061174b5750826001600160a01b0316816001600160a01b031614155b801561175e575061175c8184610fc2565b155b156117875760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610971565b81156117cf5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61180b8282610cdc565b6107c95760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610971565b611845838383611673565b610a63576001600160a01b03831661187357604051637e27328960e01b815260048101829052602401610971565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610971565b6118a88383611979565b610a636000848484611448565b60606118c082611029565b5060006118d860408051602081019091526000815290565b905060008151116118f85760405180602001604052806000815250610ffd565b80611902846119de565b6040516020016119139291906122a3565b6040516020818303038152906040529392505050565b60006001600160e01b031982166380ac58cd60e01b148061195a57506001600160e01b03198216635b5e139f60e01b145b806106fd57506301ffc9a760e01b6001600160e01b03198316146106fd565b6001600160a01b0382166119a357604051633250574960e11b815260006004820152602401610971565b60006119b18383600061110a565b90506001600160a01b03811615610a63576040516339e3563760e11b815260006004820152602401610971565b606060006119eb83611a70565b60010190506000816001600160401b03811115611a0a57611a0a611cc6565b6040519080825280601f01601f191660200182016040528015611a34576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a3e57509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611aaf5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611adb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611af957662386f26fc10000830492506010015b6305f5e1008310611b11576305f5e100830492506008015b6127108310611b2557612710830492506004015b60648310611b37576064830492506002015b600a83106106fd5760010192915050565b6001600160e01b03198116811461110757600080fd5b600060208284031215611b7057600080fd5b8135610ffd81611b48565b60005b83811015611b96578181015183820152602001611b7e565b50506000910152565b60008151808452611bb7816020860160208601611b7b565b601f01601f19169290920160200192915050565b602081526000610ffd6020830184611b9f565b600060208284031215611bf057600080fd5b5035919050565b6001600160a01b038116811461110757600080fd5b60008060408385031215611c1f57600080fd5b8235611c2a81611bf7565b946020939093013593505050565b600060208284031215611c4a57600080fd5b8135610ffd81611bf7565b600080600060608486031215611c6a57600080fd5b8335611c7581611bf7565b92506020840135611c8581611bf7565b929592945050506040919091013590565b60008060408385031215611ca957600080fd5b823591506020830135611cbb81611bf7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611d0457611d04611cc6565b604052919050565b60006001600160401b03821115611d2557611d25611cc6565b5060051b60200190565b60006001600160401b03831115611d4857611d48611cc6565b611d5b601f8401601f1916602001611cdc565b9050828152838383011115611d6f57600080fd5b828260208301376000602084830101529392505050565b600082601f830112611d9757600080fd5b610ffd83833560208501611d2f565b600082601f830112611db757600080fd5b81356020611dcc611dc783611d0c565b611cdc565b82815260059290921b84018101918181019086841115611deb57600080fd5b8286015b84811015611e2a5780356001600160401b03811115611e0e5760008081fd5b611e1c8986838b0101611d86565b845250918301918301611def565b509695505050505050565b600080600060608486031215611e4a57600080fd5b8335611e5581611bf7565b92506020848101356001600160401b0380821115611e7257600080fd5b818701915087601f830112611e8657600080fd5b8135611e94611dc782611d0c565b81815260059190911b8301840190848101908a831115611eb357600080fd5b938501935b82851015611ed157843582529385019390850190611eb8565b965050506040870135925080831115611ee957600080fd5b5050611ef786828701611da6565b9150509250925092565b60008060408385031215611f1457600080fd5b8235611f1f81611bf7565b915060208301358015158114611cbb57600080fd5b60008060408385031215611f4757600080fd5b8235915060208301356001600160401b03811115611f6457600080fd5b611f7085828601611d86565b9150509250929050565b60008060008060808587031215611f9057600080fd5b8435611f9b81611bf7565b93506020850135611fab81611bf7565b92506040850135915060608501356001600160401b03811115611fcd57600080fd5b8501601f81018713611fde57600080fd5b611fed87823560208401611d2f565b91505092959194509250565b60008060006060848603121561200e57600080fd5b83359250602084013561202081611bf7565b915060408401356001600160401b038116811461203c57600080fd5b809150509250925092565b6000806040838503121561205a57600080fd5b823561206581611bf7565b91506020830135611cbb81611bf7565b600181811c9082168061208957607f821691505b6020821081036120a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106fd576106fd6120c5565b80820281158282048414176106fd576106fd6120c5565b60008261212257634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156106fd576106fd6120c5565b601f821115610a63576000816000526020600020601f850160051c810160208610156121635750805b601f850160051c820191505b818110156121825782815560010161216f565b505050505050565b81516001600160401b038111156121a3576121a3611cc6565b6121b7816121b18454612075565b8461213a565b602080601f8311600181146121ec57600084156121d45750858301515b600019600386901b1c1916600185901b178555612182565b600085815260208120601f198616915b8281101561221b578886015182559484019460019091019084016121fc565b50858210156122395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061227c90830184611b9f565b9695505050505050565b60006020828403121561229857600080fd5b8151610ffd81611b48565b600083516122b5818460208801611b7b565b8351908301906122c9818360208801611b7b565b0194935050505056fea264697066735822122072f417aed6d6639b815d517e08e0a221a1ad0eb5e118d9c5feb1e53a645e2f6464736f6c63430008190033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000b74657374627574746f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b74657374627574746f6e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fac7f1ecde707e1f8844af4cfdaeabc7f46e161800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064