0x61016060405234801561001157600080fd5b506040516126ad3803806126ad83398101604081905261003091610279565b6040518060400160405280600581526020016444414f564f60d81b81525080604051806040016040528060018152602001603160f81b815250836040518060400160405280600581526020016444414f564f60d81b8152506040518060400160405280600581526020016444414f564f60d81b81525081600390816100b59190610348565b5060046100c28282610348565b5050506001600160a01b0381166100f457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100fd816101b6565b50610109826006610208565b61012052610118816007610208565b61014052815160208084019190912060e052815190820120610100524660a0526101a560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506104789050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020835110156102245761021d8361023b565b9050610235565b8161022f8482610348565b5060ff90505b92915050565b600080829050601f81511115610266578260405163305a27a960e01b81526004016100eb9190610406565b805161027182610454565b179392505050565b60006020828403121561028b57600080fd5b81516001600160a01b03811681146102a257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806102d357607f821691505b6020821081036102f357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561034357806000526020600020601f840160051c810160208510156103205750805b601f840160051c820191505b81811015610340576000815560010161032c565b50505b505050565b81516001600160401b03811115610361576103616102a9565b6103758161036f84546102bf565b846102f9565b6020601f8211600181146103a957600083156103915750848201515b600019600385901b1c1916600184901b178455610340565b600084815260208120601f198516915b828110156103d957878501518255602094850194600190920191016103b9565b50848210156103f75786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156104345760208186018101516040868401015201610417565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102f35760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516121db6104d26000396000610fa201526000610f7501526000610c8801526000610c6001526000610bbb01526000610be501526000610c0f01526121db6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c8063715018a6116100f95780639ab24eb011610097578063d505accf11610071578063d505accf146103cd578063dd62ed3e146103e0578063f1127ed814610419578063f2fde38b1461045857600080fd5b80639ab24eb014610394578063a9059cbb146103a7578063c3cda520146103ba57600080fd5b80638da5cb5b116100d35780638da5cb5b146103495780638e539e8c1461035a57806391ddadf41461036d57806395d89b411461038c57600080fd5b8063715018a6146103135780637ecebe001461031b57806384b0196e1461032e57600080fd5b80633a46b1a811610166578063587cde1e11610140578063587cde1e1461026b5780635c19a95c146102af5780636fcfff45146102c257806370a08231146102ea57600080fd5b80633a46b1a81461023b57806340c10f191461024e5780634bf5d7e91461026357600080fd5b806323b872dd1161019757806323b872dd14610211578063313ce567146102245780633644e5151461023357600080fd5b806306fdde03146101be578063095ea7b3146101dc57806318160ddd146101ff575b600080fd5b6101c661046b565b6040516101d39190611dc8565b60405180910390f35b6101ef6101ea366004611df7565b6104fd565b60405190151581526020016101d3565b6002545b6040519081526020016101d3565b6101ef61021f366004611e21565b610517565b604051601281526020016101d3565b61020361053b565b610203610249366004611df7565b61054a565b61026161025c366004611df7565b6105d0565b005b6101c66105e6565b610297610279366004611e5e565b6001600160a01b039081166000908152600960205260409020541690565b6040516001600160a01b0390911681526020016101d3565b6102616102bd366004611e5e565b610677565b6102d56102d0366004611e5e565b610682565b60405163ffffffff90911681526020016101d3565b6102036102f8366004611e5e565b6001600160a01b031660009081526020819052604090205490565b61026161068d565b610203610329366004611e5e565b6106a1565b6103366106ac565b6040516101d39796959493929190611e79565b6005546001600160a01b0316610297565b610203610368366004611f2d565b61070e565b610375610778565b60405165ffffffffffff90911681526020016101d3565b6101c6610782565b6102036103a2366004611e5e565b610791565b6101ef6103b5366004611df7565b6107c1565b6102616103c8366004611f57565b6107cf565b6102616103db366004611faf565b6108a5565b6102036103ee36600461201a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61042c61042736600461204d565b610a11565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101d3565b610261610466366004611e5e565b610a36565b60606003805461047a9061208d565b80601f01602080910402602001604051908101604052809291908181526020018280546104a69061208d565b80156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b5050505050905090565b60003361050b818585610a8d565b60019150505b92915050565b600033610525858285610a9f565b610530858585610b36565b506001949350505050565b6000610545610bae565b905090565b600080610555610778565b90508065ffffffffffff16831061059557604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105bf6105a184610cd9565b6001600160a01b0386166000908152600a6020526040902090610d10565b6001600160d01b0316949350505050565b6105d8610dc9565b6105e28282610e0f565b5050565b60606105f0610e45565b65ffffffffffff16610600610778565b65ffffffffffff161461063f576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105e28183610e50565b600061051182610ecf565b610695610dc9565b61069f6000610ef1565b565b600061051182610f50565b6000606080600080600060606106c0610f6e565b6106c8610f9b565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff8216602482015260440161058c565b61076861076084610cd9565b600b90610d10565b6001600160d01b03169392505050565b6000610545610e45565b60606004805461047a9061208d565b6001600160a01b0381166000908152600a602052604081206107b290610fc8565b6001600160d01b031692915050565b60003361050b818585610b36565b8342111561080c576040517f4683af0e0000000000000000000000000000000000000000000000000000000081526004810185905260240161058c565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906108869061087e9060a00160405160208183030381529060405280519060200120611004565b85858561104c565b9050610892818761107a565b61089c8188610e50565b50505050505050565b834211156108e2576040517f627913020000000000000000000000000000000000000000000000000000000081526004810185905260240161058c565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861092f8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061098a82611004565b9050600061099a8287878761104c565b9050896001600160a01b0316816001600160a01b0316146109fa576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528b16602482015260440161058c565b610a058a8a8a610a8d565b50505050505050505050565b6040805180820190915260008082526020820152610a2f83836110e6565b9392505050565b610a3e610dc9565b6001600160a01b038116610a81576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161058c565b610a8a81610ef1565b50565b610a9a838383600161111c565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b305781811015610b21576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018290526044810183905260640161058c565b610b308484848403600061111c565b50505050565b6001600160a01b038316610b79576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161058c565b6001600160a01b038216610ba35760405163ec442f0560e01b81526000600482015260240161058c565b610a9a838383611223565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610c0757507f000000000000000000000000000000000000000000000000000000000000000046145b15610c3157507f000000000000000000000000000000000000000000000000000000000000000090565b610545604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610d0c576040516306dfcc6560e41b8152603060048201526024810183905260440161058c565b5090565b815460009081816005811115610d6f576000610d2b8461122e565b610d3590856120dd565b60008881526020902090915081015465ffffffffffff9081169087161015610d5f57809150610d6d565b610d6a8160016120f0565b92505b505b6000610d7d87878585611394565b90508015610dbb57610da287610d946001846120dd565b600091825260209091200190565b54660100000000000090046001600160d01b0316610dbe565b60005b979650505050505050565b6005546001600160a01b0316331461069f576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161058c565b6001600160a01b038216610e395760405163ec442f0560e01b81526000600482015260240161058c565b6105e260008383611223565b600061054543610cd9565b6001600160a01b03828116600081815260096020526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a9a8183610eca866113f6565b611414565b6001600160a01b0381166000908152600a602052604081205461051190611580565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038116600090815260086020526040812054610511565b60606105457f000000000000000000000000000000000000000000000000000000000000000060066115b1565b60606105457f000000000000000000000000000000000000000000000000000000000000000060076115b1565b80546000908015610ffb57610fe283610d946001846120dd565b54660100000000000090046001600160d01b0316610a2f565b60009392505050565b6000610511611011610bae565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060008061105e8888888861165c565b92509250925061106e828261172b565b50909695505050505050565b6001600160a01b0382166000908152600860205260409020805460018101909155818114610a9a576040517f752d88c00000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260440161058c565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020610a2f908361182f565b6001600160a01b03841661115f576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161058c565b6001600160a01b0383166111a2576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161058c565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610b3057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161121591815260200190565b60405180910390a350505050565b610a9a8383836118a2565b60006001821161123c575090565b81600170010000000000000000000000000000000082106112625760809190911c9060401b5b68010000000000000000821061127d5760409190911c9060201b5b64010000000082106112945760209190911c9060101b5b6201000082106112a95760109190911c9060081b5b61010082106112bd5760089190911c9060041b5b601082106112d05760049190911c9060021b5b600482106112dc5760011b5b600302600190811c908185816112f4576112f4612103565b048201901c9050600181858161130c5761130c612103565b048201901c9050600181858161132457611324612103565b048201901c9050600181858161133c5761133c612103565b048201901c9050600181858161135457611354612103565b048201901c9050600181858161136c5761136c612103565b048201901c905061138b81858161138557611385612103565b04821190565b90039392505050565b60005b818310156113ee5760006113ab8484611922565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156113da578092506113e8565b6113e58160016120f0565b93505b50611397565b509392505050565b6001600160a01b038116600090815260208190526040812054610511565b816001600160a01b0316836001600160a01b0316141580156114365750600081115b15610a9a576001600160a01b038316156114de576001600160a01b0383166000908152600a6020526040812081906114799061193d61147486611949565b61197d565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516114d3929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a9a576001600160a01b0382166000908152600a602052604081208190611517906119b661147486611949565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611571929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610d0c576040516306dfcc6560e41b8152602060048201526024810183905260440161058c565b606060ff83146115cb576115c4836119c2565b9050610511565b8180546115d79061208d565b80601f01602080910402602001604051908101604052809291908181526020018280546116039061208d565b80156116505780601f1061162557610100808354040283529160200191611650565b820191906000526020600020905b81548152906001019060200180831161163357829003601f168201915b50505050509050610511565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116975750600091506003905082611721565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116eb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661171757506000925060019150829050611721565b9250600091508190505b9450945094915050565b600082600381111561173f5761173f612119565b03611748575050565b600182600381111561175c5761175c612119565b03611793576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156117a7576117a7612119565b036117e1576040517ffce698f70000000000000000000000000000000000000000000000000000000081526004810182905260240161058c565b60038260038111156117f5576117f5612119565b036105e2576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240161058c565b6040805180820190915260008082526020820152826000018263ffffffff168154811061185e5761185e61212f565b60009182526020918290206040805180820190915291015465ffffffffffff81168252660100000000000090046001600160d01b0316918101919091529392505050565b6118ad838383611a01565b6001600160a01b0383166119175760006118c660025490565b90506001600160d01b0380821115611914576040517f1cb15d26000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161058c565b50505b610a9a838383611b44565b60006119316002848418612145565b610a2f908484166120f0565b6000610a2f8284612167565b60006001600160d01b03821115610d0c576040516306dfcc6560e41b815260d060048201526024810183905260440161058c565b6000806119a961198b610778565b6119a161199788610fc8565b868863ffffffff16565b879190611bba565b915091505b935093915050565b6000610a2f8284612186565b606060006119cf83611bc8565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038316611a2c578060026000828254611a2191906120f0565b90915550611ab79050565b6001600160a01b03831660009081526020819052604090205481811015611a98576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602481018290526044810183905260640161058c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611ad357600280548290039055611af2565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3791815260200190565b60405180910390a3505050565b6001600160a01b038316611b6657611b63600b6119b661147484611949565b50505b6001600160a01b038216611b8857611b85600b61193d61147484611949565b50505b6001600160a01b03838116600090815260096020526040808220548584168352912054610a9a92918216911683611414565b6000806119a9858585611c09565b600060ff8216601f811115610511576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825460009081908015611d24576000611c2787610d946001856120dd565b805490915065ffffffffffff80821691660100000000000090046001600160d01b0316908816821115611c86576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603611cc257825465ffffffffffff1666010000000000006001600160d01b03891602178355611d16565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f5560008f815291909120945191519092166601000000000000029216919091179101555b94508593506119ae92505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a81529182209551925190931666010000000000000291909316179201919091559050816119ae565b6000815180845260005b81811015611da857602081850181015186830182015201611d8c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a2f6020830184611d82565b80356001600160a01b0381168114611df257600080fd5b919050565b60008060408385031215611e0a57600080fd5b611e1383611ddb565b946020939093013593505050565b600080600060608486031215611e3657600080fd5b611e3f84611ddb565b9250611e4d60208501611ddb565b929592945050506040919091013590565b600060208284031215611e7057600080fd5b610a2f82611ddb565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611eb460e0830189611d82565b8281036040840152611ec68189611d82565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611f1c578351835260209384019390920191600101611efe565b50909b9a5050505050505050505050565b600060208284031215611f3f57600080fd5b5035919050565b803560ff81168114611df257600080fd5b60008060008060008060c08789031215611f7057600080fd5b611f7987611ddb565b95506020870135945060408701359350611f9560608801611f46565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215611fca57600080fd5b611fd388611ddb565b9650611fe160208901611ddb565b95506040880135945060608801359350611ffd60808901611f46565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561202d57600080fd5b61203683611ddb565b915061204460208401611ddb565b90509250929050565b6000806040838503121561206057600080fd5b61206983611ddb565b9150602083013563ffffffff8116811461208257600080fd5b809150509250929050565b600181811c908216806120a157607f821691505b6020821081036120c157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610511576105116120c7565b80820180821115610511576105116120c7565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008261216257634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b038281168282160390811115610511576105116120c7565b6001600160d01b038181168382160190811115610511576105116120c756fea2646970667358221220b46f8e8ec45331dd4f307e8f88a27ae38410ac40dc08e5db73153a96c6be58fb64736f6c634300081a003300000000000000000000000050ff1dea3b61e4d1d038d3b9eb5a07a511c0d758