solc-0.8.35 0x83bc649fcdb2c8da146b2154a559ddedf937ef12 optimized
20925 bytes
608060405260043610610445575f3560e01c806353f3fcb111610236578063c00b2d6111610134578063e4537934116100b3578063f2fde38b11610078578063f2fde38b14610e6f578063f340fa0114610e8e578063f3fef3a314610ea1578063f9609f0814610ec0578063fc6dfe4e14610ed3575f5ffd5b8063e453793414610da7578063e74b981b14610ddf578063e939482314610dfe578063ee30511614610e31578063f2c5998a14610e50575f5ffd5b8063d6951aa9116100f9578063d6951aa914610d07578063da79205814610d26578063da8ed1f714610d4a578063dcbfb6c314610d69578063de70b59f14610d88575f5ffd5b8063c00b2d6114610c7a578063c00c2d7314610c99578063c98bea5b14610cb8578063d0e30db014610ce0578063d67b8fee14610ce8575f5ffd5b80637c8dc440116101c05780639a8a302b116101855780639a8a302b14610bf5578063aaf10f4214610c14578063b46a130e14610c28578063baaff11614610c47578063bac1520314610c66575f5ffd5b80637c8dc44014610b465780637c90fbf014610b655780638da5cb5b14610b8b578063917266fa14610ba85780639795947314610bc7575f5ffd5b80635c975abb116102065780635c975abb14610ab4578063616e6c1b14610ad4578063715018a614610af357806371cb700f14610b075780637346f1aa14610b26575f5ffd5b806353f3fcb114610a2a5780635460172614610a43578063561bddf814610a7657806356f1199b14610a95575f5ffd5b806322828cc2116103435780633a53acb0116102cd57806346d4b7141161029257806346d4b714146109a65780634c73f498146109c55780634f1ef286146109e457806351199700146109f757806352d1902d14610a16575f5ffd5b80633a53acb014610916578063439766ce14610935578063456a23a6146109495780634690484014610968578063469963aa14610987575f5ffd5b80632db004a3116103135780632db004a31461087a57806335876476146108a55780633659cfe6146108c457806337cfdaca146108e3578063397a1b28146108f7575f5ffd5b806322828cc2146107cd57806326d5d54a146107ec57806328a947d91461084657806328ac82e71461085b575f5ffd5b806310ddce8e116103cf57806317e51e801161039457806317e51e80146107325780631991c225146107515780631aab9ef1146107705780631e95e60e1461078f5780631ee665c4146107ae575f5ffd5b806310ddce8e1461067757806312c53c9b146106b5578063158f8f59146106d55780631665f66d146106f45780631729d10b14610713575f5ffd5b8063083884261161041557806308388426146105c4578063086e16c0146105e357806308c73259146106015780630de371e2146106385780630ea9e85214610657575f5ffd5b806303dcfbdc1461050057806306be9c53146105325780630716e2421461056557806308061aeb14610586575f5ffd5b366104fc576001600160801b033411156104725760405163162908e360e11b815260040160405180910390fd5b60cf80543491905f9061048f9084906001600160801b031661442f565b92506101000a8154816001600160801b0302191690836001600160801b031602179055503460cf60108282829054906101000a90046001600160801b03166104d7919061444e565b92506101000a8154816001600160801b0302191690836001600160801b031602179055005b5f5ffd5b34801561050b575f5ffd5b5061051f61051a366004614481565b610f01565b6040519081526020015b60405180910390f35b34801561053d575f5ffd5b5061051f7fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef081565b348015610570575f5ffd5b5061058461057f36600461450e565b610fca565b005b348015610591575f5ffd5b506105b46105a036600461454c565b60db6020525f908152604090205460ff1681565b6040519015158152602001610529565b3480156105cf575f5ffd5b506105846105de3660046145ab565b6110c0565b3480156105ee575f5ffd5b506105846105fd3660046146c7565b5050565b34801561060c575f5ffd5b5060e054610620906001600160a01b031681565b6040516001600160a01b039091168152602001610529565b348015610643575f5ffd5b5060ce54610620906001600160a01b031681565b348015610662575f5ffd5b5061051f5f51602061519d5f395f51905f5281565b348015610682575f5ffd5b5060d45461069d90600160801b90046001600160801b031681565b6040516001600160801b039091168152602001610529565b3480156106c0575f5ffd5b5060ce546105b490600160a01b900460ff1681565b3480156106e0575f5ffd5b506105846106ef36600461454c565b6116a9565b3480156106ff575f5ffd5b5061058461070e36600461470c565b6117f6565b34801561071e575f5ffd5b5060de54610620906001600160a01b031681565b34801561073d575f5ffd5b5060dd54610620906001600160a01b031681565b34801561075c575f5ffd5b5061058461076b36600461470c565b61186c565b34801561077b575f5ffd5b5061051f61078a366004614727565b6118f3565b34801561079a575f5ffd5b506106206107a9366004614759565b611a53565b3480156107b9575f5ffd5b506105846107c8366004614770565b611a7b565b3480156107d8575f5ffd5b5060c954610620906001600160a01b031681565b3480156107f7575f5ffd5b506108296108063660046147f1565b60d76020525f908152604090205463ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610529565b348015610851575f5ffd5b5061051f60e15481565b348015610866575f5ffd5b5060cb54610620906001600160a01b031681565b348015610885575f5ffd5b5061051f610894366004614759565b60d86020525f908152604090205481565b3480156108b0575f5ffd5b506105846108bf36600461480f565b611b1d565b3480156108cf575f5ffd5b506105846108de36600461454c565b611d46565b3480156108ee575f5ffd5b5061051f611e0d565b348015610902575f5ffd5b5061051f6109113660046148a0565b611e3c565b348015610921575f5ffd5b5061051f610930366004614759565b611f72565b348015610940575f5ffd5b5061058461200c565b348015610954575f5ffd5b5060cf5461069d906001600160801b031681565b348015610973575f5ffd5b5060d054610620906001600160a01b031681565b348015610992575f5ffd5b5060ca54610620906001600160a01b031681565b3480156109b1575f5ffd5b506105846109c03660046148ca565b6121a4565b3480156109d0575f5ffd5b506105846109df3660046148ca565b6122f8565b6105846109f2366004614927565b6123ae565b348015610a02575f5ffd5b5061051f610a1136600461454c565b612463565b348015610a21575f5ffd5b5061051f612574565b348015610a35575f5ffd5b5060dc546105b49060ff1681565b348015610a4e575f5ffd5b5061051f7f20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db581565b348015610a81575f5ffd5b5061051f610a90366004614759565b612625565b348015610aa0575f5ffd5b50610584610aaf36600461454c565b6126b5565b348015610abf575f5ffd5b5060dc546105b490600160881b900460ff1681565b348015610adf575f5ffd5b50610584610aee366004614759565b61280c565b348015610afe575f5ffd5b506105846128e8565b348015610b12575f5ffd5b5060d254610620906001600160a01b031681565b348015610b31575f5ffd5b5060d9546105b490600160a01b900460ff1681565b348015610b51575f5ffd5b50610584610b603660046149b3565b6128fb565b348015610b70575f5ffd5b5060cf5461069d90600160801b90046001600160801b031681565b348015610b96575f5ffd5b506033546001600160a01b0316610620565b348015610bb3575f5ffd5b5061051f610bc2366004614759565b612a5b565b348015610bd2575f5ffd5b506105b4610be136600461454c565b60da6020525f908152604090205460ff1681565b348015610c00575f5ffd5b5060d154610620906001600160a01b031681565b348015610c1f575f5ffd5b50610620612b16565b348015610c33575f5ffd5b5061051f610c423660046149d3565b612b24565b348015610c52575f5ffd5b50610584610c61366004614a12565b612bbd565b348015610c71575f5ffd5b50610584612da8565b348015610c85575f5ffd5b50610584610c94366004614a59565b612f2a565b348015610ca4575f5ffd5b5060d954610620906001600160a01b031681565b348015610cc3575f5ffd5b5060d5546108299063ffffffff8082169164010000000090041682565b61051f61303e565b348015610cf3575f5ffd5b5060cd54610620906001600160a01b031681565b348015610d12575f5ffd5b5060d45461069d906001600160801b031681565b348015610d31575f5ffd5b5060dc5461069d9061010090046001600160801b031681565b348015610d55575f5ffd5b50610584610d64366004614a86565b613048565b348015610d74575f5ffd5b5060df54610620906001600160a01b031681565b348015610d93575f5ffd5b50610584610da2366004614770565b6130f5565b348015610db2575f5ffd5b5060d054610dca90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610529565b348015610dea575f5ffd5b50610584610df936600461454c565b613238565b348015610e09575f5ffd5b506106207f000000000000000000000000000000000000000000000000000000000000000081565b348015610e3c575f5ffd5b5060cc54610620906001600160a01b031681565b348015610e5b575f5ffd5b50610584610e6a366004614759565b613320565b348015610e7a575f5ffd5b50610584610e8936600461454c565b6133fb565b61051f610e9c36600461454c565b613471565b348015610eac575f5ffd5b5061051f610ebb3660046148a0565b6134d3565b61051f610ece3660046148ca565b61390f565b348015610ede575f5ffd5b506105b4610eed36600461454c565b60d66020525f908152604090205460ff1681565b5f610f0a613993565b60ce546001600160a01b031663d505accf333085356020870135610f346060890160408a01614aa1565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610fa4575f5ffd5b505af1925050508015610fb5575060015b50610fc08484611e3c565b90505b9392505050565b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015611023573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110479190614ac1565b6110645760405163209296a360e01b815260040160405180910390fd5b5f5b818110156110bb5782828281811061108057611080614adc565b905060200201357f339b23d24a078f6403801d644f7cba5045424e28175a49da36de4445b66387da60405160405180910390a2600101611066565b505050565b6110c8613993565b60e054604051632474521560e21b81527fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef060048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015611134573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111589190614ac1565b6111755760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000060e15410806111985750686f05b59d3b2000000060e154115b156111b657604051633f4219cd60e21b815260040160405180910390fd5b845115806111c5575084518314155b806111d1575084518114155b156111ef5760405163a9854bc960e01b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015611237573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125b9190614af0565b60e1546112689190614b07565b90505f86516001600160401b0381111561128457611284614567565b6040519080825280602002602001820160405280156112df57816020015b6112cc604051806080016040528060608152602001606081526020015f8152602001606081525090565b8152602001906001900390816112a25790505b5090505f5b87518110156116225760ca5488515f916001600160a01b03169063b165e295908b908590811061131657611316614adc565b60200260200101516040518263ffffffff1660e01b815260040161133c91815260200190565b602060405180830381865afa158015611357573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137b9190614b1a565b90505f816001600160a01b031663bcbb073a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190614b1a565b60ca54604051632a25a9af60e11b81526001600160a01b0380841660048301529293505f929091169063544b535e906024015f60405180830381865afa15801561142a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114519190810190614b35565b60c9549091505f906001600160a01b031663125ae56b8c8c8881811061147957611479614adc565b905060200281019061148b9190614ba9565b8c8c8a81811061149d5761149d614adc565b90506020028101906114af9190614ba9565b878d6040518763ffffffff1660e01b81526004016114d296959493929190614c41565b602060405180830381865afa1580156114ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115119190614af0565b90505f60405180608001604052808d8d8981811061153157611531614adc565b90506020028101906115439190614ba9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018b8b8981811061158e5761158e614adc565b90506020028101906115a09190614ba9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060208083018690526040805191820181529181529101528751909150819088908890811061160557611605614adc565b6020026020010181905250505050505080806001019150506112e4565b505f8751836116319190614c8f565b905061163c816139e0565b60c95460e154604051635d57f88b60e11b81526001600160a01b039092169163baaff116918491611671918791600401614ca6565b5f604051808303818588803b158015611688575f5ffd5b505af115801561169a573d5f5f3e3d5ffd5b50505050505050505050505050565b6001600160a01b0381165f90815260db602052604090205460ff166117065760405162461bcd60e51b815260206004820152600e60248201526d139bdd081c9959da5cdd195c995960921b60448201526064015b60405180910390fd5b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561175f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117839190614ac1565b61179f5760405162461bcd60e51b81526004016116fd90614d5c565b6001600160a01b0381165f81815260db6020908152604091829020805460ff1916905590519182527f8a5afe4e68ed1b812242442424ef608ee7b0a23b6111c6183e781ac4656e817391015b60405180910390a150565b60d9546001600160a01b03163314611821576040516317fe949f60e01b815260040160405180910390fd5b8060dc60018282829054906101000a90046001600160801b0316611845919061444e565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050565b60d9546001600160a01b03163314611897576040516317fe949f60e01b815260040160405180910390fd5b6040516001600160801b03821681527fafea3ee583ed00355634c0a2f47d947b6af95fda2bc1dbe0ff919c45166789d49060200160405180910390a160d0546105fd906001600160a01b03166001600160801b0383165f612b24565b5f6118fc613993565b60cc546001600160a01b03163314611927576040516317fe949f60e01b815260040160405180910390fd5b5f61193184611f72565b90506001600160601b03841180611946575083155b8061194f575080155b1561196d5760405163162908e360e11b815260040160405180910390fd5b60d25460ce5461198c916001600160a01b039182169133911687613a45565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb0906119c290889086908b908a90600401614d86565b6020604051808303815f875af11580156119de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a029190614af0565b9050336001600160a01b03167fb9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e0287876002604051611a4293929190614dd8565b60405180910390a295945050505050565b60d38181548110611a62575f80fd5b5f918252602090912001546001600160a01b0316905081565b611a83613993565b335f90815260db602052604090205460ff16611ab15760405162461bcd60e51b81526004016116fd90614d5c565b60c954604051637c561c3960e11b81526001600160a01b039091169063f8ac387290611ae99088908890889088908890600401614f0f565b5f604051808303815f87803b158015611b00575f5ffd5b505af1158015611b12573d5f5f3e3d5ffd5b505050505050505050565b5f54610100900460ff1615808015611b3b57505f54600160ff909116105b80611b545750303b158015611b5457505f5460ff166001145b611bb75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016116fd565b5f805460ff191660011790558015611bd8575f805461ff0019166101001790555b6001600160a01b0388161580611bf557506001600160a01b038716155b80611c0757506001600160a01b038616155b80611c1957506001600160a01b038516155b80611c2b57506001600160a01b038416155b15611c495760405163baca868960e01b815260040160405180910390fd5b611c51613aa5565b611c59613ad3565b60ce80546001600160a01b03199081166001600160a01b038b81169190911790925560c9805482168a841617905560ca8054821689841617905560cc8054821688841617905560cd8054821687841617905560dc8054600160881b71ffffffffffffffffffffffffffffffffffff1990911617905560d98054821686841617905560d2805490911691841691909117905560de805460ff60a01b191690558015611d3c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611d8e5760405162461bcd60e51b81526004016116fd90614f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dc0613af9565b6001600160a01b031614611de65760405162461bcd60e51b81526004016116fd90614fba565b611def81613b14565b604080515f80825260208201909252611e0a91839190613b67565b50565b60cf545f90611e2e906001600160801b03600160801b82048116911661444e565b6001600160801b0316905090565b5f611e45613993565b5f611e4f83611f72565b90506001600160601b03831180611e64575082155b80611e6d575080155b15611e8b5760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611eaa916001600160a01b039182169133911686613a45565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb090611ee090879086908a908790600401614d86565b6020604051808303815f875af1158015611efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f209190614af0565b9050336001600160a01b03167fb9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e0286866001604051611f6093929190614dd8565b60405180910390a29150505b92915050565b5f5f611f7c611e0d565b9050805f03611f8d57505f92915050565b60ce5460408051633a98ef3960e01b8152905183926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015611fd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190614af0565b6120029085614c8f565b610fc39190615006565b60e05460408051633bd48c9f60e11b815290516001600160a01b03909216916391d148549183916377a9193e916004808201926020929091908290030181865afa15801561205c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120809190614af0565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa1580156120c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e49190614ac1565b6121015760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff161561215b5760405162461bcd60e51b815260206004820152601860248201527f5061757361626c653a20616c726561647920706175736564000000000000000060448201526064016116fd565b60dc805460ff60881b1916600160881b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b6121ac613cd1565b60df546001600160a01b03161580156121cd57506001600160a01b03811615155b6122035760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016116fd565b60e0546001600160a01b0316156122525760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016116fd565b60df80546001600160a01b038084166001600160a01b03199283161790925560e08054928516929091169190911790555f61228b611e0d565b60cf80546001600160801b03478116600160801b90810292821692909217928390559293506122bd929104168261442f565b60cf80546001600160801b0319166001600160801b03929092169190911790556122e5611e0d565b816001600160801b0316146110bb575f5ffd5b612300613cd1565b6001600160a01b0382161580159061232057506001600160a01b03811615155b8015612335575060dd546001600160a01b0316155b801561234a575060de546001600160a01b0316155b6123805760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016116fd565b60dd80546001600160a01b039384166001600160a01b03199182161790915560de8054929093169116179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036123f65760405162461bcd60e51b81526004016116fd90614f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612428613af9565b6001600160a01b03161461244e5760405162461bcd60e51b81526004016116fd90614fba565b61245782613b14565b6105fd82826001613b67565b5f5f5f60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124da9190614af0565b9050801561256d5760ce5460405163673e156160e11b81526001600160a01b0386811660048301528392169063ce7c2ac290602401602060405180830381865afa15801561252a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254e9190614af0565b612556611e0d565b6125609190614c8f565b61256a9190615006565b91505b5092915050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126135760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016116fd565b505f5160206151565f395f51905f5290565b5f5f60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015612677573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061269b9190614af0565b9050805f036126ac57505f92915050565b80611ff8611e0d565b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa15801561270e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127329190614ac1565b61274f5760405163209296a360e01b815260040160405180910390fd5b6001600160a01b0381165f90815260db602052604090205460ff16156127ac5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016116fd565b6040805160208082018352600182526001600160a01b0384165f81815260db83528490209251835460ff19169015151790925591519081527f8bef88cac8d05094711d367d04bf4f2fcb4b589ca12a6ed8c8f375000e1e848e91016117eb565b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015612865573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128899190614ac1565b6128a65760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec8000008110806128c55750686f05b59d3b2000000081115b156128e357604051633f4219cd60e21b815260040160405180910390fd5b60e155565b6128f0613cd1565b6128f95f613d2b565b565b5f61290582612a5b565b60df549091506001600160a01b03163314612933576040516317fe949f60e01b815260040160405180910390fd5b82158061293e575081155b1561295c5760405163162908e360e11b815260040160405180910390fd5b8281111561297d5760405163162908e360e11b815260040160405180910390fd5b60cf80548391905f9061299a9084906001600160801b031661442f565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b8152336004820152602481018590526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b158015612a06575f5ffd5b505af1158015612a18573d5f5f3e3d5ffd5b505060408051868152602081018690527f888a2432cd9af74ee23f9ebdf262368f5434dffe681b3c7426880c6639b2a74a935001905060405180910390a1505050565b5f5f612a65611e0d565b9050805f03612a7657505f92915050565b60ce5460408051633a98ef3960e01b815290515f926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015612abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae19190614af0565b612aeb9085614c8f565b9050816001612afa8284615025565b612b049190614b07565b612b0e9190615006565b949350505050565b5f612b1f613af9565b905090565b5f612b2d613993565b60de546001600160a01b0316331480612b50575060d9546001600160a01b031633145b612b6c5760405162461bcd60e51b81526004016116fd90614d5c565b836001600160a01b03167fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d84600185604051612baa93929190615038565b60405180910390a2610fc0845f85613d7c565b612bc5613993565b60e054604051632474521560e21b81527fc6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef060048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015612c31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c559190614ac1565b612c725760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec800000811080612c915750686f05b59d3b2000000081115b15612caf57604051633f4219cd60e21b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015612cf7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d1b9190614af0565b612d259083614b07565b90505f612d328483614c8f565b9050612d3d816139e0565b60c954604051635d57f88b60e11b81526001600160a01b039091169063baaff116908390612d7390899089908990600401615065565b5f604051808303818588803b158015612d8a575f5ffd5b505af1158015612d9c573d5f5f3e3d5ffd5b50505050505050505050565b60e0546040805163421d0eb360e01b815290516001600160a01b03909216916391d1485491839163421d0eb3916004808201926020929091908290030181865afa158015612df8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e1c9190614af0565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa158015612e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e809190614ac1565b612e9d5760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff16612eed5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016116fd565b60dc805460ff60881b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9060200161219a565b60cc546001600160a01b03163314612f55576040516317fe949f60e01b815260040160405180910390fd5b60cf54612f6c9082906001600160801b0316615088565b60cf80546001600160801b0319166001600160801b03929092169190911790557f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511612fb5611e0d565b60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015613005573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130299190614af0565b604080519283526020830191909152016117eb565b5f612b1f5f613471565b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa1580156130a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130c59190614ac1565b6130e25760405163209296a360e01b815260040160405180910390fd5b60dc805460ff1916911515919091179055565b6130fd613993565b60e054604051632474521560e21b81527f20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db560048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015613169573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318d9190614ac1565b6131aa5760405163209296a360e01b815260040160405180910390fd5b5f6131bd83670de0b6b3a7640000614c8f565b90506131c8816139e0565b60c954604051632dc4817560e21b81526001600160a01b039091169063b71205d4908390613202908a908a908a908a908a90600401614f0f565b5f604051808303818588803b158015613219575f5ffd5b505af115801561322b573d5f5f3e3d5ffd5b5050505050505050505050565b60e054604051632474521560e21b81525f51602061519d5f395f51905f5260048201523360248201526001600160a01b03909116906391d1485490604401602060405180830381865afa158015613291573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132b59190614ac1565b6132d25760405163209296a360e01b815260040160405180910390fd5b60d080546001600160a01b0319166001600160a01b0383169081179091556040519081527fbf5406678e9fe702eaea01d92d3b62ac5be0a14e1802562e2a428364d30d1b11906020016117eb565b60df546001600160a01b03163314801590613346575060d2546001600160a01b03163314155b801561337b5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15613399576040516317fe949f60e01b815260040160405180910390fd5b60ce54604051633b9e9f0160e21b8152336004820152602481018390526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b1580156133e2575f5ffd5b505af11580156133f4573d5f5f3e3d5ffd5b5050505050565b613403613cd1565b6001600160a01b0381166134685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016116fd565b611e0a81613d2b565b5f61347a613993565b336001600160a01b03167fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d346001856040516134b893929190615038565b60405180910390a26134cb33345f613d7c565b90505b919050565b5f6134dc613993565b5f6134e683612a5b565b60d2549091506001600160a01b031633148061350c575060cc546001600160a01b031633145b80613521575060df546001600160a01b031633145b806135545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6135705760405162461bcd60e51b81526004016116fd90614d5c565b60cf54600160801b90046001600160801b03168311806135f7575060ce546040516370a0823160e01b815233600482015284916001600160a01b0316906370a0823190602401602060405180830381865afa1580156135d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135f59190614af0565b105b156136155760405163bb55fd2760e01b815260040160405180910390fd5b6001600160801b03831180613628575082155b80613631575080155b1561364f5760405163162908e360e11b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156136b8575060dc5460cf5484916136ad916001600160801b03610100909204821691600160801b9091041661442f565b6001600160801b0316105b156136d65760405163bb55fd2760e01b815260040160405180910390fd5b60d2546001600160a01b0316330361385f5760dc5461010090046001600160801b03168311156137195760405163bb55fd2760e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615613816575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663341c6b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c991906150c7565b60cf5490915084906137ec908390600160801b90046001600160801b031661442f565b6001600160801b031610156138145760405163bb55fd2760e01b815260040160405180910390fd5b505b8260dc60018282829054906101000a90046001600160801b031661383a919061442f565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b8260cf60108282829054906101000a90046001600160801b0316613883919061442f565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b8152336004820152602481018390526001600160a01b039091169063ee7a7c04906044015f604051808303815f87803b1580156138ef575f5ffd5b505af1158015613901573d5f5f3e3d5ffd5b50505050610fc38484613ecc565b5f613918613993565b60cc546001600160a01b031633146139425760405162461bcd60e51b81526004016116fd90614d5c565b336001600160a01b03167fa241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d3460028560405161398093929190615038565b60405180910390a2610fc333345f613d7c565b60dc54600160881b900460ff16156128f95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016116fd565b60cf80548291905f906139fd9084906001600160801b031661444e565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508060cf60108282829054906101000a90046001600160801b0316611845919061442f565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a9f908590613f6c565b50505050565b5f54610100900460ff16613acb5760405162461bcd60e51b81526004016116fd906150e2565b6128f961403d565b5f54610100900460ff166128f95760405162461bcd60e51b81526004016116fd906150e2565b5f5160206151565f395f51905f52546001600160a01b031690565b60e054604051635006bb7b60e01b81523360048201526001600160a01b0390911690635006bb7b906024015f6040518083038186803b158015613b55575f5ffd5b505afa1580156133f4573d5f5f3e3d5ffd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613b9a576110bb8361406c565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613bf4575060408051601f3d908101601f19168201909252613bf191810190614af0565b60015b613c575760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016116fd565b5f5160206151565f395f51905f528114613cc55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016116fd565b506110bb838383614107565b6033546001600160a01b031633146128f95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016116fd565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8260cf60108282829054906101000a90046001600160801b0316613da1919061444e565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508160cf5f8282829054906101000a90046001600160801b0316613de8919061444e565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505f8284613e199190615025565b90505f613e258261412b565b90506001600160801b03821180613e3a575081155b80613e43575080155b15613e615760405163162908e360e11b815260040160405180910390fd5b60ce546040516329460cc560e11b81526001600160a01b038881166004830152602482018490529091169063528c198a906044015f604051808303815f87803b158015613eac575f5ffd5b505af1158015613ebe573d5f5f3e3d5ffd5b509298975050505050505050565b60405147905f906001600160a01b0385169084908381818185875af1925050503d805f8114613f16576040519150601f19603f3d011682016040523d82523d5f602084013e613f1b565b606091505b50509050808015613f355750613f318383614b07565b4710155b613a9f5760405162461bcd60e51b815260206004820152600860248201526714d95b9911985a5b60c21b60448201526064016116fd565b5f613fc0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141509092919063ffffffff16565b8051909150156110bb5780806020019051810190613fde9190614ac1565b6110bb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016116fd565b5f54610100900460ff166140635760405162461bcd60e51b81526004016116fd906150e2565b6128f933613d2b565b6001600160a01b0381163b6140d95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016116fd565b5f5160206151565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6141108361415e565b5f8251118061411c5750805b156110bb57613a9f838361419d565b5f5f82614136611e0d565b6141409190614b07565b9050805f03611f8d575090919050565b6060610fc084845f8561428d565b6141678161406c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606001600160a01b0383163b6142055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016116fd565b5f5f846001600160a01b03168460405161421f919061512d565b5f60405180830381855af49150503d805f8114614257576040519150601f19603f3d011682016040523d82523d5f602084013e61425c565b606091505b5091509150614284828260405180606001604052806027815260200161517660279139614364565b95945050505050565b6060824710156142ee5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016116fd565b5f5f866001600160a01b03168587604051614309919061512d565b5f6040518083038185875af1925050503d805f8114614343576040519150601f19603f3d011682016040523d82523d5f602084013e614348565b606091505b50915091506143598783838761437d565b979650505050505050565b60608315614373575081610fc3565b610fc383836143f1565b606083156143eb5782515f036143e4576001600160a01b0385163b6143e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016116fd565b5081612b0e565b612b0e83835b8151156144015781518083602001fd5b8060405162461bcd60e51b81526004016116fd9190615143565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b038281168282160390811115611f6c57611f6c61441b565b6001600160801b038181168382160190811115611f6c57611f6c61441b565b6001600160a01b0381168114611e0a575f5ffd5b5f5f5f83850360e0811215614494575f5ffd5b843561449f8161446d565b93506020850135925060a0603f19820112156144b9575f5ffd5b506040840190509250925092565b5f5f83601f8401126144d7575f5ffd5b5081356001600160401b038111156144ed575f5ffd5b6020830191508360208260051b8501011115614507575f5ffd5b9250929050565b5f5f6020838503121561451f575f5ffd5b82356001600160401b03811115614534575f5ffd5b614540858286016144c7565b90969095509350505050565b5f6020828403121561455c575f5ffd5b8135610fc38161446d565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156145a3576145a3614567565b604052919050565b5f5f5f5f5f606086880312156145bf575f5ffd5b85356001600160401b038111156145d4575f5ffd5b8601601f810188136145e4575f5ffd5b80356001600160401b038111156145fd576145fd614567565b8060051b61460d6020820161457b565b9182526020818401810192908101908b841115614628575f5ffd5b6020850194505b8385101561464e5784358083526020958601959093509091019061462f565b9850505050602087013590506001600160401b0381111561466d575f5ffd5b614679888289016144c7565b90955093505060408601356001600160401b03811115614697575f5ffd5b6146a3888289016144c7565b969995985093965092949392505050565b803563ffffffff811681146134ce575f5ffd5b5f5f604083850312156146d8575f5ffd5b6146e1836146b4565b91506146ef602084016146b4565b90509250929050565b6001600160801b0381168114611e0a575f5ffd5b5f6020828403121561471c575f5ffd5b8135610fc3816146f8565b5f5f5f60608486031215614739575f5ffd5b83356147448161446d565b95602085013595506040909401359392505050565b5f60208284031215614769575f5ffd5b5035919050565b5f5f5f5f5f60608688031215614784575f5ffd5b85356001600160401b03811115614799575f5ffd5b6147a5888289016144c7565b90965094505060208601356001600160401b038111156147c3575f5ffd5b6147cf888289016144c7565b90945092505060408601356147e38161446d565b809150509295509295909350565b5f60208284031215614801575f5ffd5b813560048110610fc3575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614825575f5ffd5b87356148308161446d565b965060208801356148408161446d565b955060408801356148508161446d565b945060608801356148608161446d565b935060808801356148708161446d565b925060a08801356148808161446d565b915060c08801356148908161446d565b8091505092959891949750929550565b5f5f604083850312156148b1575f5ffd5b82356148bc8161446d565b946020939093013593505050565b5f5f604083850312156148db575f5ffd5b82356148e68161446d565b915060208301356148f68161446d565b809150509250929050565b5f6001600160401b0382111561491957614919614567565b50601f01601f191660200190565b5f5f60408385031215614938575f5ffd5b82356149438161446d565b915060208301356001600160401b0381111561495d575f5ffd5b8301601f8101851361496d575f5ffd5b803561498061497b82614901565b61457b565b818152866020838501011115614994575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156149c4575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156149e5575f5ffd5b83356149f08161446d565b9250602084013591506040840135614a078161446d565b809150509250925092565b5f5f5f60408486031215614a24575f5ffd5b83356001600160401b03811115614a39575f5ffd5b614a45868287016144c7565b909790965060209590950135949350505050565b5f60208284031215614a69575f5ffd5b813580600f0b8114610fc3575f5ffd5b8015158114611e0a575f5ffd5b5f60208284031215614a96575f5ffd5b8135610fc381614a79565b5f60208284031215614ab1575f5ffd5b813560ff81168114610fc3575f5ffd5b5f60208284031215614ad1575f5ffd5b8151610fc381614a79565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614b00575f5ffd5b5051919050565b81810381811115611f6c57611f6c61441b565b5f60208284031215614b2a575f5ffd5b8151610fc38161446d565b5f60208284031215614b45575f5ffd5b81516001600160401b03811115614b5a575f5ffd5b8201601f81018413614b6a575f5ffd5b8051614b7861497b82614901565b818152856020838501011115614b8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f8335601e19843603018112614bbe575f5ffd5b8301803591506001600160401b03821115614bd7575f5ffd5b602001915036819003821315614507575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f614c5460808301888a614beb565b8281036020840152614c67818789614beb565b90508281036040840152614c7b8186614c13565b915050826060830152979650505050505050565b8082028115828204841417611f6c57611f6c61441b565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614d4857605f198786030184528151805160808752614cf26080880182614c13565b905060208201518782036020890152614d0b8282614c13565b91505060408201516040880152606082015191508681036060880152614d318183614c13565b965050506020938401939190910190600101614ccc565b505050506020929092019290925292915050565b60208082526010908201526f24b731b7b93932b1ba1021b0b63632b960811b604082015260600190565b6001600160601b0394851681529290931660208301526001600160a01b03166040820152606081019190915260800190565b60048110614dd457634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03841681526020810183905260608101612b0e6040830184614db8565b5f5f8335601e19843603018112614e11575f5ffd5b83016020810192503590506001600160401b03811115614e2f575f5ffd5b803603821315614507575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015614f0357838303601f19018852813536879003607e19018112614e79575f5ffd5b8601614e858180614dfc565b60808652614e97608087018284614beb565b915050614ea76020830183614dfc565b8683036020880152614eba838284614beb565b9250505060408201356040860152614ed56060830183614dfc565b92508582036060870152614eea828483614beb565b60209b8c019b9096509490940193505050600101614e54565b50909695505050505050565b606081525f614f22606083018789614e3d565b82810360208401528481526001600160fb1b03851115614f40575f5ffd5b8460051b808760208401376001600160a01b0394909416604093909301929092525001602001949350505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f8261502057634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611f6c57611f6c61441b565b8381526060810161504c6020830185614db8565b6001600160a01b03929092166040919091015292915050565b604081525f615078604083018587614e3d565b9050826020830152949350505050565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff1982121715611f6c57611f6c61441b565b5f602082840312156150d7575f5ffd5b8151610fc3816146f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610fc36020830184614c1356fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640e8d94121b3383f03d9ae60b39295aa793469d7230d51a3f62cbf47cd45481d9