solc-0.8.35 0x8b0e044e364f2ce913799d53b300e15a6974dc97 optimized-low-runs

20632 bytes

608060405234801561000f575f5ffd5b506004361061015d575f3560e01c8063022c0d9f1461016157806304c785bc1461017657806307d3277f146101935780630902f1ac146101c75780630cf6c461146101fb578063182148ef1461020e57806321d0ee70146102e4578063259982e5146102e4578063575e24b41461031057806367e4ac2c1461034e57806369ef7317146103645780636c2bbe7e146103795780636fe7e6eb146103ac5780637165485d146103bf57806374e750bb146103e357806374f792fa1461044657806379d8353b146104595780638e0dc28d146104805780639f063efc14610379578063a5e90eee14610493578063a70354a1146104a1578063aaed87a3146104c7578063b47b2fb1146104ef578063b6a8b0fa14610525578063c4e833ce14610538578063dc4c90d31461054d578063dc98354e14610574578063e1b4af6914610525578063fdff9b4d14610587575b5f5ffd5b61017461016f366004614451565b61059a565b005b61017e610821565b60405190151581526020015b60405180910390f35b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405161018a91906144b5565b6101cf610900565b604080516001600160701b03948516815293909216602084015263ffffffff169082015260600161018a565b6101746102093660046144d6565b610976565b6102916040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b60405161018a919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6102f76102f2366004614541565b610982565b6040516001600160e01b0319909116815260200161018a565b61032361031e3660046145aa565b6109e3565b604080516001600160e01b03199094168452602084019290925262ffffff169082015260600161018a565b610356610a4d565b60405161018a929190614603565b61036c610b2a565b60405161018a919061462a565b61038c610387366004614751565b610b3f565b604080516001600160e01b0319909316835260208301919091520161018a565b6102f76103ba3660046147e9565b610ba9565b6103d56b22bab632b929bbb0b8103b1960a11b81565b60405190815260200161018a565b6103eb610c0a565b60405161018a919081516001600160a01b03908116825260208084015182169083015260408084015182169083015260608084015182169083015260808084015182169083015260a092830151169181019190915260c00190565b6101746104543660046144d6565b610c1a565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6103d561048e36600461484f565b610c32565b610174610209366004614894565b7f00000000000000000000000000000000000000000000000000000000000000006101ba565b6104da6104d53660046148cb565b610cc8565b6040805192835260208301919091520161018a565b6105026104fd3660046148f7565b610e6a565b604080516001600160e01b03199093168352600f9190910b60208301520161018a565b6102f7610533366004614977565b610ed2565b610540610f35565b60405161018a91906149d0565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6102f7610582366004614aea565b611019565b61017e610595366004614b31565b611078565b6105a26110a6565b5f6105ab611132565b8054909150600160e01b900463ffffffff166001146105dd576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781556001600160701b03861180159061060e57506001600160701b038511155b61062b57604051636b2f218360e01b815260040160405180910390fd5b5f61067f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610679611156565b8861121b565b905061068c8188886113a8565b610695816113ba565b61069e816114dc565b821561070d57846001600160a01b0316638f536f3e6106bb611156565b898988886040518663ffffffff1660e01b81526004016106df959493929190614b4c565b5f604051808303815f87803b1580156106f6575f5ffd5b505af1158015610708573d5f5f3e3d5ffd5b505050505b6107f48182608001516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161074191906144b5565b602060405180830381865afa15801561075c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107809190614b97565b8360a001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016107b091906144b5565b602060405180830381865afa1580156107cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ef9190614b97565b6114f4565b6107fd81611506565b6108068161151b565b5080546001600160e01b0316600160e01b1790555050505050565b5f5f61082b611132565b8054909150600160e01b900463ffffffff1660020361085d576040516303cb96db60e21b815260040160405180910390fd5b5f6108666116d5565b6080810151604051630b23949560e11b81529192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631647292a916108ba913090600401614603565b602060405180830381865afa1580156108d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f99190614bae565b9250505090565b5f5f5f5f61090c611132565b8054909150600160e01b900463ffffffff1660020361093e576040516303cb96db60e21b815260040160405180910390fd5b5f610947611132565b546001600160701b038082169650600160701b820416945063ffffffff600160e01b9091041692505050909192565b61097e61171c565b5050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109cc5760405163570c108560e11b815260040160405180910390fd5b6109d986868686866117a7565b9695505050505050565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a2f5760405163570c108560e11b815260040160405180910390fd5b610a3c88888888886117c1565b925092509250955095509592505050565b5f5f5f610a586116d5565b9050805f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abd9190614bc9565b925080602001516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190614bc9565b9150509091565b610b326142c8565b610b3a611c13565b905090565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b8a5760405163570c108560e11b815260040160405180910390fd5b610b9989898989898989611d93565b9150915097509795505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf35760405163570c108560e11b815260040160405180910390fd5b610bff858585856117a7565b90505b949350505050565b610c12614333565b610b3a6116d5565b610c2261171c565b61097e610c2d6116d5565b611dae565b5f5f610c3c611132565b8054909150600160e01b900463ffffffff16600203610c6e576040516303cb96db60e21b815260040160405180910390fd5b5f610c776116d5565b90505f610c82611c13565b9050610cbc7f00000000000000000000000000000000000000000000000000000000000000008383610cb5868d8d61204d565b8a8a6121bc565b98975050505050505050565b5f5f5f610cd3611132565b8054909150600160e01b900463ffffffff16600203610d05576040516303cb96db60e21b815260040160405180910390fd5b5f610d0e6116d5565b90505f610d19611c13565b6080830151604051630b23949560e11b81529192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631647292a91610d6d913090600401614603565b602060405180830381865afa158015610d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac9190614bae565b610dbd575f5f945094505050610e62565b61014081015164ffffffffff1615801590610de457504281610140015164ffffffffff1611155b15610df6575f5f945094505050610e62565b5f610e0283898961204d565b90505f610e0f83836123f5565b6001600160401b03169050670de0b6b3a76400008110610e38575f5f9650965050505050610e62565b610e4484848484612556565b90975095508515610e5d5785610e5981614bf8565b9650505b505050505b509250929050565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eb55760405163570c108560e11b815260040160405180910390fd5b610ec3888888888888611d93565b91509150965096945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f1c5760405163570c108560e11b815260040160405180910390fd5b610f2a8787878787876117a7565b979650505050505050565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018190526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110635760405163570c108560e11b815260040160405180910390fd5b61106e8484846117a7565b90505b9392505050565b5f5f611082611132565b6001600160a01b039093165f90815260019093016020525050604090205460ff1690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811633036110da5750565b631f8b521560e01b5f52306004523360245234604452608060645236608452365f60a4375f3660a401525f5f601f19601f36011660a4015f34855af13d5f5f3e8080156111295760403d036040f35b3d5ffd5b505050565b7f10ee9b31f73104ff2cf413742414a498e1f7b56c11cb512bca58a9c50727bb5890565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016810361121657604051630c281d0f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318503a1e906111d4905f906004016144b5565b6040805180830381865afa1580156111ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112129190614c0d565b5090505b919050565b611223614367565b6001600160a01b0380861682528416602082015261123f6116d5565b604082015261124c611c13565b816060018190525080604001515f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611297573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bb9190614bc9565b81608001906001600160a01b031690816001600160a01b0316815250508060400151602001516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113409190614bc9565b6001600160a01b0390811660a083015283811660c0830152821660e08201526060810151610140015164ffffffffff16158061138b5750428160600151610140015164ffffffffff16115b610c0257604051630407b05b60e31b815260040160405180910390fd5b61014083019190915261016090910152565b606081015161016001516001165f036113d05750565b5f5f826060015161018001516001600160a01b03168361014001518461016001518560c001518660e00151604051602401611430949392919093845260208401929092526001600160a01b03908116604084015216606082015260800190565b60408051601f198184030181529181526020820180516001600160e01b03166337b9cd0d60e11b179052516114659190614c3a565b5f604051808303815f865af19150503d805f811461149e576040519150601f19603f3d011682016040523d82523d5f602084013e6114a3565b606091505b509092509050600181836114d557604051630351728360e61b81526004016114cc929190614c7e565b60405180910390fd5b5050505050565b6114e6815f612b54565b6114f1816001612b54565b50565b61010083019190915261012090910152565b611511816001612bcc565b6114f1815f612bcc565b5f611524611132565b61014083015161018084015182549293505f9261154a91906001600160701b0316614c99565b6115549190614cac565b6101608401516101a085015184549293505f926115819190600160701b90046001600160701b0316614c99565b61158b9190614cac565b905061159c84606001518383612e2d565b6115b95760405163d93c670b60e01b815260040160405180910390fd5b82546001600160701b03828116600160701b026001600160e01b0319909216908416171783556101808401516101008501515f916115f691614cac565b90505f856101a0015186610120015161160f9190614cac565b60e08781015160c0808a01516101808b01516101a08c01516101408d01516101608e01518d546040805195865260208601949094529284019190915260608301526080820189905260a082018790526001600160701b0380821694830194909452600160701b9004909216938201939093529293506001600160a01b03908116929116907f8337ab1cd063c6a0121e4b67ad00ec5640783101bb89ad879ffb0fe28b503e95906101000160405180910390a36116cd86868484612f81565b505050505050565b6116dd614333565b60c03610156116ff5760405163a7c1249960e01b815260040160405180910390fd5b61170f3660bf198101815f614cbf565b810190610b3a9190614d2a565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f36604051611758929190614dd4565b5f60405180830381855af49150503d805f8114611790576040519150601f19603f3d011682016040523d82523d5f602084013e611795565b606091505b50915091508161097e57805181602001fd5b5f604051630a85dc2960e01b815260040160405180910390fd5b5f5f5f5f6117cd611132565b8054909150600160e01b900463ffffffff166001146117ff576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781555f61185f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c3361121b565b90505f808060208b0135811380156118cf5761187e60208d0135614de3565b93506118c87f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f0160208101906118c09190614dfd565b8860016121bc565b9250611920565b8b60200135925061191d7f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f0160208101906119169190614dfd565b875f6121bc565b93505b61192d60208d018d614dfd565b1561194d5761193d855f856113a8565b61194885855f6114f4565b611963565b61195885845f6113a8565b611963855f866114f4565b61196c856113ba565b806119a7576119a261197d84613103565b61198690614e18565b61198f86613103565b6001600160801b031660809190911b1790565b6119c5565b6119c56119b385613103565b6119bc85613103565b61198f90614e18565b91506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b0d9c09611a0360208f018f614dfd565b611a1f578e6020016020810190611a1a9190614b31565b611a31565b8e5f016020810190611a319190614b31565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018790526064015f604051808303815f87803b158015611a7c575f5ffd5b505af1158015611a8e573d5f5f3e3d5ffd5b50505050611a9b85611506565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a5841194611ad760208f018f614dfd565b611af2578e5f016020810190611aed9190614b31565b611b05565b8e6020016020810190611b059190614b31565b6040518263ffffffff1660e01b8152600401611b2191906144b5565b5f604051808303815f87803b158015611b38575f5ffd5b505af1158015611b4a573d5f5f3e3d5ffd5b50505050611b57856114dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190614b97565b50611be28561151b565b5084546001600160e01b0316600160e01b17909455506315d7892d60e21b9b929a505f995091975050505050505050565b611c1b6142c8565b50604080516101a0810182527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb219546001600160701b038082168352600160701b91829004811660208401527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21a5480821694840194909452920490911660608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21b546001600160501b038082166080840152600160501b82041660a0830152600160a01b90046001600160401b0390811660c08301527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21c5480821660e0840152600160401b81048216610100840152600160801b8104909116610120830152600160c01b810464ffffffffff16610140830152600160e81b900460ff166101608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21d546001600160a01b031661018082015290565b5f5f604051630a85dc2960e01b815260040160405180910390fd5b5f611db7611132565b8054909150600160e01b900463ffffffff16600114611de9576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161561203757611e3c30611e37610f35565b613123565b5f825f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea09190614bc9565b90505f83602001516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190614bc9565b6040805160a080820183526001600160a01b03868116808452858216602085018190525f85870181905260016060870181905230608090970187905281546001600160a01b0319908116851790925580546001600160d01b031916909217600160b81b17918290556002805490911686178155955163313b65df60e11b8152600481019290925280831660248301529283901c62ffffff16604482015260b89290921c90930b60648201526084810191909152600160601b60a48201529192507f00000000000000000000000000000000000000000000000000000000000000001690636276cbbe9060c4016020604051808303815f875af115801561200f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120339190614e39565b5050505b80546001600160e01b0316600160e01b17905550565b5f5f845f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b29190614bc9565b90505f85602001516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121199190614bc9565b9050816001600160a01b0316856001600160a01b031614801561214d5750806001600160a01b0316846001600160a01b0316145b1561215b57600192506121b3565b806001600160a01b0316856001600160a01b031614801561218d5750816001600160a01b0316846001600160a01b0316145b1561219a575f92506121b3565b604051634617192b60e01b815260040160405180910390fd5b50509392505050565b5f825f036121cb57505f6109d9565b6001600160701b038311156121f357604051630e8d18f560e31b815260040160405180910390fd5b6080860151604051630b23949560e11b81526001600160a01b03891691631647292a9161222591903090600401614603565b602060405180830381865afa158015612240573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122649190614bae565b6122815760405163715756a960e01b815260040160405180910390fd5b61014085015164ffffffffff1615806122a557504285610140015164ffffffffff16115b6122c257604051630407b05b60e31b815260040160405180910390fd5b5f6122cd86866123f5565b6001600160401b03169050670de0b6b3a7640000811061230057604051631f77084960e01b815260040160405180910390fd5b5f5f61230e89898986612556565b91509150841561234257670de0b6b3a764000061232b8488614e54565b6123359190614e6b565b61233f9087614cac565b95505b5f61234f8988888b613350565b90508515612389578287111580156123675750818111155b61238457604051630e8d18f560e31b815260040160405180910390fd5b6123e7565b8187111580156123995750828111155b6123b657604051630e8d18f560e31b815260040160405180910390fd5b6123c884670de0b6b3a7640000614cac565b6123da82670de0b6b3a7640000614e54565b6123e49190614e6b565b90505b9a9950505050505050505050565b6101608201516001600160401b03906002161561251e575f612415611132565b61018085015181546040519293505f9283926001600160a01b0316916124589188916001600160701b0380821692600160701b9092041690600190602401614e8a565b60408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b1790525161248d9190614c3a565b5f60405180830381855afa9150503d805f81146124c5576040519150601f19603f3d011682016040523d82523d5f602084013e6124ca565b606091505b50915091508180156124de57506020815110155b600282909161250257604051630351728360e61b81526004016114cc929190614c7e565b5050808060200190518101906125189190614ec9565b93505050505b6002600160401b03196001600160401b0382160161255057816125465782610120015161254d565b8261010001515b90505b92915050565b5f5f5f612561611132565b60808801519091506001600160701b039081905f88612584578a60200151612587565b8a515b90505f89612599578b6060015161259f565b8b604001515b90505f826001600160a01b031663402d267d856040518263ffffffff1660e01b81526004016125ce91906144b5565b602060405180830381865afa1580156125e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260d9190614b97565b90506001600160a01b038216156126965760405163d283e75f60e01b81526001600160a01b0383169063d283e75f9061264a9087906004016144b5565b602060405180830381865afa158015612665573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126899190614b97565b6126939082614c99565b90505b858110156126a2578095505b5050505f886126ca5760408a015185546126c591906001600160701b0316614ee2565b6126eb565b60608a015185546126eb9190600160701b90046001600160701b0316614ee2565b905082816001600160701b0316101561270b57806001600160701b031692505b505f88612719578a5161271f565b8a602001515b90505f89612731578b60400151612737565b8b606001515b90505f826001600160a01b03166307a2d13a846001600160a01b03166370a08231876040518263ffffffff1660e01b815260040161277591906144b5565b602060405180830381865afa158015612790573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b49190614b97565b6040518263ffffffff1660e01b81526004016127d291815260200190565b602060405180830381865afa1580156127ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128119190614b97565b90505f836001600160a01b031663961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612850573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128749190614b97565b9050808211806128955750826001600160a01b0316846001600160a01b0316145b156128ab57858110156128a6578095505b612936565b816001600160a01b0384161561292857836001600160a01b031663961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061291b9190614b97565b6129259082614c99565b90505b86811015612934578096505b505b506001600160a01b03821615612a5b575f826001600160a01b03166318e22d986040518163ffffffff1660e01b81526004016040805180830381865afa158015612982573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a69190614f12565b9150505f6129b78261ffff166135da565b90505f198114612a58575f846001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a229190614b97565b90505f828211612a3b57612a368284614cac565b612a3d565b5f5b612a479086614c99565b905088811015612a55578098505b50505b50505b5050505f612a6b8a845f8c613350565b90506001600160701b038111612ab95783811015612ab457612a9588670de0b6b3a7640000614cac565b612aa782670de0b6b3a7640000614e54565b612ab19190614e6b565b93505b612b44565b5f612aed8b670de0b6b3a7640000612ad18c82614cac565b612adb9089614e54565b612ae59190614e6b565b60018d613350565b905083811015612b4257925082612b0c89670de0b6b3a7640000614cac565b612b188c865f8e613350565b612b2a90670de0b6b3a7640000614e54565b612b349190614e6b565b915084821015612b42578194505b505b5091999098509650505050505050565b5f81612b6557826101400151612b6c565b8261016001515b9050805f03612b7a57505050565b61112d835f015184604001516080015184612b9a57604086015151612ba4565b8560400151602001515b85612bb757866040015160400151612bc1565b8660400151606001515b858860e00151613600565b5f81612bdd57826101200151612be4565b8261010001515b9050805f03612bf257505050565b5f82612c02578360a00151612c08565b83608001515b90505f612c198560600151856138fb565b6001600160401b03169050670de0b6b3a76400008110612c4c57604051631f77084960e01b815260040160405180910390fd5b5f670de0b6b3a7640000612c608386614e54565b612c6a9190614e6b565b90505f5f87602001516001600160a01b0316630a992e0c306040518263ffffffff1660e01b8152600401612c9e91906144b5565b6040805180830381865afa158015612cb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdc9190614f43565b91509150806001600160401b03165f14612d4e575f670de0b6b3a7640000612d0d6001600160401b03841686614e54565b612d179190614e6b565b90508015612d4c57612d336001600160a01b03871684836139cb565b612d3d8188614cac565b9650612d498185614cac565b93505b505b5050604086015160a001516001600160a01b031615801590612d6f57508015155b15612da257604086015160a00151612d92906001600160a01b03851690836139cb565b612d9c8185614cac565b93505f90505b612def865f015187604001516080015187612dc557886040015160200151612dcc565b6040890151515b88612ddf57896040015160600151612de9565b8960400151604001515b88613a1d565b9350808411612dfe575f612e08565b612e088185614cac565b93508415612e1d5761018086018490526116cd565b6101a08601849052505050505050565b5f6001600160701b03831180612e4957506001600160701b0382115b15612e5557505f611071565b83604001516001600160701b0316831080612e7c575083606001516001600160701b031682105b15612e8857505f611071565b83516001600160701b03168310612f0d5783602001516001600160701b03168210612eb557506001611071565b612f03828560a001516001600160501b031686608001516001600160501b031687602001516001600160701b0316885f01516001600160701b03168960e001516001600160401b0316613d5f565b8310159050611071565b83602001516001600160701b0316821015612f2957505f611071565b612f778385608001516001600160501b03168660a001516001600160501b0316875f01516001600160701b031688602001516001600160701b03168960c001516001600160401b0316613d5f565b8210159050611071565b60608401516101600151600416156130fd578254600160e01b6001600160e01b03821617808555606086015161018090810151908701516101a08801516101408901516101608a015160c08b015160e08c0151604051602481019690965260448601949094526064850192909252608484015260a4830188905260c483018790526001600160a01b0390811660e48401529081166101048301526001600160701b03948516610124830152600160701b9093049093166101448401525f928392909116906101640160408051601f198184030181529181526020820180516001600160e01b0316630714f6d160e01b1790525161307e9190614c3a565b5f604051808303815f865af19150503d805f81146130b7576040519150601f19603f3d011682016040523d82523d5f602084013e6130bc565b606091505b509092509050600481836130e557604051630351728360e61b81526004016114cc929190614c7e565b505084546001600160e01b0316600160e11b17855550505b50505050565b5f6001607f1b821061311f5761311f6393dafdf160e01b613de1565b5090565b6131386001600160a01b038316612000613de9565b81511515901515141580613168575061315c6001600160a01b038316611000613de9565b15158160200151151514155b8061318f57506131836001600160a01b038316610800613de9565b15158160400151151514155b806131b657506131aa6001600160a01b038316610400613de9565b15158160600151151514155b806131dd57506131d16001600160a01b038316610200613de9565b15158160800151151514155b8061320457506131f86001600160a01b038316610100613de9565b15158160a00151151514155b8061322a575061321e6001600160a01b0383166080613de9565b15158160c00151151514155b8061325057506132446001600160a01b0383166040613de9565b15158160e00151151514155b80613277575061326a6001600160a01b0383166020613de9565b1515816101000151151514155b8061329e57506132916001600160a01b0383166010613de9565b1515816101200151151514155b806132c557506132b86001600160a01b0383166008613de9565b1515816101400151151514155b806132ec57506132df6001600160a01b0383166004613de9565b1515816101600151151514155b8061331357506133066001600160a01b0383166002613de9565b1515816101800151151514155b8061333a575061332d6001600160a01b0383166001613de9565b1515816101a00151151514155b1561097e5761097e630732d7b560e51b83613df8565b5f5f61335a611132565b8054608088015160a0890151895160208b015160c08c015160e08d01519697506001600160701b0380871697600160701b9097048116966001600160501b039687169690951694938116939216916001600160401b0391821691165f808d156134a0578c15613435576133d68f6001600160701b038c16614c99565b91508582116133f4576133ed828989898989613d5f565b9050613405565b61340282888a888a88613e0d565b90505b80896001600160701b03161161341b575f61342e565b61342e816001600160701b038b16614cac565b9b506135c7565b6134488f6001600160701b038b16614c99565b90508481116134665761345f81888a888a88613d5f565b9150613477565b613474818989898989613e0d565b91505b818a6001600160701b03161161348d575f61342e565b61342e826001600160701b038c16614cac565b8c15613535578e896001600160701b0316116134ca575f199b505050505050505050505050610c02565b6134dd8f6001600160701b038b16614cac565b90508481116134fb576134f481888a888a88613d5f565b915061350c565b613509818989898989613e0d565b91505b896001600160701b03168211613522575f61342e565b61342e6001600160701b038b1683614cac565b8e8a6001600160701b031611613559575f199b505050505050505050505050610c02565b61356c8f6001600160701b038c16614cac565b915085821161358a57613583828989898989613d5f565b905061359b565b61359882888a888a88613e0d565b90505b886001600160701b031681116135b1575f6135c4565b6135c46001600160701b038a1682614cac565b9b505b5050505050505050505050949350505050565b5f815f036135ea57505f19919050565b6064603f8316600a0a600684901c020492915050565b5f5f856001600160a01b03166370a08231886040518263ffffffff1660e01b815260040161362e91906144b5565b602060405180830381865afa158015613649573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366d9190614b97565b905080156136e1576040516303d1689d60e11b8152600481018290526001600160a01b038716906307a2d13a90602401602060405180830381865afa1580156136b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136dc9190614b97565b6136e3565b5f5b91505080156137dc575f8184106136fa57816136fc565b835b9050876001600160a01b0316631f8b521587895f85888d60405160240161373f939291909283526001600160a01b03918216602084015216604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b0316632d182be560e21b179052516001600160e01b031960e087901b16815261378b9493929190600401614f6d565b5f604051808303815f875af11580156137a6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137cd9190810190614f9f565b506137d88185614cac565b9350505b82156138f2576040516330da145b60e21b81526001600160a01b0388169063c368516c906138109089908890600401614603565b5f604051808303815f87803b158015613827575f5ffd5b505af1158015613839573d5f5f3e3d5ffd5b50505050866001600160a01b0316631f8b521585885f8787604051602401613862929190615031565b60408051601f198184030181529181526020820180516001600160e01b0316630967fa2960e31b179052516001600160e01b031960e087901b1681526138ae9493929190600401614f6d565b5f604051808303815f875af11580156138c9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138f09190810190614f9f565b505b50505050505050565b6101608201516001600160401b03906002161561251e575f61391b611132565b61018085015181546040519293505f9283926001600160a01b03169161395d9188916001600160701b0380821692600160701b90920416908690602401614e8a565b60408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b179052516139929190614c3a565b5f604051808303815f865af19150503d805f81146124c5576040519150601f19603f3d011682016040523d82523d5f602084013e6124ca565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261112d908490613f82565b5f5f866001600160a01b03166347cfdac487866040518363ffffffff1660e01b8152600401613a4d929190614603565b602060405180830381865afa158015613a68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8c9190614bae565b15613c495760405163d283e75f60e01b81525f906001600160a01b0386169063d283e75f90613abf908a906004016144b5565b602060405180830381865afa158015613ada573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afe9190614b97565b90505f856001600160a01b031663acb70815838711613b1d5786613b1f565b835b8a6040518363ffffffff1660e01b8152600401613b3d929190615031565b6020604051808303815f875af1158015613b59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7d9190614b97565b9050613b898186614cac565b9450613b958183614cac565b9150613ba18184614c99565b9250815f03613c46576040805160048082526024820183526020820180516001600160e01b031663869e50c760e01b1790529151631f8b521560e01b81526001600160a01b038c1692631f8b521592613c02928b928e925f92909101614f6d565b5f604051808303815f875af1158015613c1d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c449190810190614f9f565b505b50505b82156109d957604051636e553f6560e01b81526001600160a01b03861690636e553f6590613c7d9086908a90600401615031565b6020604051808303815f875af1925050508015613cb7575060408051601f3d908101601f19168201909252613cb491810190614b97565b60015b613d53573d808015613ce4576040519150601f19603f3d011682016040523d82523d5f602084013e613ce9565b606091505b5063ca0985cf60e01b613cfb82615048565b6001600160e01b0319161480613d295750639811e0c760e01b613d1d82615048565b6001600160e01b031916145b8190613d49576040516320d0a2b560e21b81526004016114cc9190615086565b505f935050613d55565b505b610f2a8382614c99565b5f5f82670de0b6b3a764000003613d90575f613d85898703890288808206151591040190565b85019150613dc89050565b8785038702670de0b6b3a76400008481038702858b020190888b02025f613db8848484613fe5565b8881019081105f03179450505050505b6001600160701b03811115610f2a575f199150506109d9565b805f5260045ffd5b166001600160a01b0316151590565b815f526001600160a01b03811660045260245ffd5b5f600182901b84028602670de0b6b3a764000084890387028887020102818110918391908383038183031884018a8106151585168b82048101613e4f565b0190565b9450505050505f5f613e6f607f613e6585614049565b9080821191030290565b90505f613e88606d613e658b6503782dace9d902614049565b9050808210613e975781613e99565b805b92505050600181901b5f8415613f0a575f613ec7670de0b6b3a7640000899003890260021b8b8002856140cf565b90505f613ed58680866140cf565b90508181015f86613ee583614102565b901b9050613eff88820160018d901b808206151591040190565b945050505050613f6e565b5f613f28670de0b6b3a7640000899003890260021b8b80028561411b565b90505f613f3686808661411b565b90508181015f86613f4683614140565b901b9050613f67670de0b6b3a76400008c900360011b8e80028a8401614158565b9450505050505b9788119097039a9950505050505050505050565b5f5f60205f8451602086015f885af180613fa1576040513d5f823e3d81fd5b50505f513d91508115613fb8578060011415613fc5565b6001600160a01b0384163b155b156130fd5783604051635274afe760e01b81526004016114cc91906144b5565b5f5f5f5f613ff487878761417f565b919450925090505f19828611015f83900361402d57614022818786048887061515015b81019081105f031790565b945050505050611071565b610cbc81614017845f1061404388888c896141a7565b906141fd565b80157ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c601f161a909118016101000390565b5f5f19838509838502808210818303039150836101000382811b82861c1793508382821b5f100193505050509392505050565b5f61410c82614212565b80800292909210909101919050565b5f5f198385099290930280831092819003929092036101008290031b91901c17919050565b5f61414a82614212565b918290048211909103919050565b5f5f5f5f61416787878761417f565b925092509250610f2a815f10613e4b858589866141a7565b5f5f5f61418c868661428d565b909350915061419c8686866142aa565b905093509350939050565b5f8281038316908190038190046001018583119094039390930293038290049290921791046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003020290565b818101828110156125505761255060116142b7565b6001600160881b03811160071b81811c6001600160481b031060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c91829004909101901c90565b5f5f5f198385098385029250828110838203039150509250929050565b5f81838509949350505050565b634e487b715f52806020526024601cfd5b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c0810182525f8082526020820152908101614386614333565b81526020016143936142c8565b81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6001600160a01b03811681146114f1575f5ffd5b5f5f83601f84011261441d575f5ffd5b5081356001600160401b03811115614433575f5ffd5b60208301915083602082850101111561444a575f5ffd5b9250929050565b5f5f5f5f5f60808688031215614465575f5ffd5b8535945060208601359350604086013561447e816143f9565b925060608601356001600160401b03811115614498575f5ffd5b6144a48882890161440d565b969995985093965092949392505050565b6001600160a01b0391909116815260200190565b6001600160701b03169052565b5f5f8284036101e08112156144e9575f5ffd5b6101a08112156144f7575f5ffd5b839250604061019f198201121561450c575f5ffd5b506101a0830190509250929050565b5f60a0828403121561452b575f5ffd5b50919050565b5f6080828403121561452b575f5ffd5b5f5f5f5f5f6101608688031215614556575f5ffd5b8535614561816143f9565b9450614570876020880161451b565b935061457f8760c08801614531565b92506101408601356001600160401b03811115614498575f5ffd5b5f6060828403121561452b575f5ffd5b5f5f5f5f5f61014086880312156145bf575f5ffd5b85356145ca816143f9565b94506145d9876020880161451b565b93506145e88760c0880161459a565b92506101208601356001600160401b03811115614498575f5ffd5b6001600160a01b0392831681529116602082015260400190565b6001600160401b03169052565b5f6101a08201905061463d8284516144c9565b602083015161464f60208401826144c9565b50604083015161466260408401826144c9565b50606083015161467560608401826144c9565b50608083015161469060808401826001600160501b03169052565b5060a08301516146ab60a08401826001600160501b03169052565b5060c08301516146be60c084018261461d565b5060e08301516146d160e084018261461d565b506101008301516146e661010084018261461d565b506101208301516146fb61012084018261461d565b5061014083015161471661014084018264ffffffffff169052565b5061016083015161472d61016084018260ff169052565b5061018083015161474a6101808401826001600160a01b03169052565b5092915050565b5f5f5f5f5f5f5f6101a0888a031215614768575f5ffd5b8735614773816143f9565b96506147828960208a0161451b565b95506147918960c08a01614531565b9450610140880135935061016088013592506101808801356001600160401b038111156147bc575f5ffd5b6147c88a828b0161440d565b989b979a50959850939692959293505050565b8060020b81146114f1575f5ffd5b5f5f5f5f61010085870312156147fd575f5ffd5b8435614808816143f9565b9350614817866020870161451b565b925060c0850135614827816143f9565b915060e0850135614837816147db565b939692955090935050565b80151581146114f1575f5ffd5b5f5f5f5f60808587031215614862575f5ffd5b843561486d816143f9565b9350602085013561487d816143f9565b925060408501359150606085013561483781614842565b5f5f604083850312156148a5575f5ffd5b82356148b0816143f9565b915060208301356148c081614842565b809150509250929050565b5f5f604083850312156148dc575f5ffd5b82356148e7816143f9565b915060208301356148c0816143f9565b5f5f5f5f5f5f610160878903121561490d575f5ffd5b8635614918816143f9565b9550614927886020890161451b565b94506149368860c0890161459a565b935061012087013592506101408701356001600160401b03811115614959575f5ffd5b61496589828a0161440d565b979a9699509497509295939492505050565b5f5f5f5f5f5f610120878903121561498d575f5ffd5b8635614998816143f9565b95506149a7886020890161451b565b945060c0870135935060e087013592506101008701356001600160401b03811115614959575f5ffd5b8151151581526101c0810160208301516149ee602084018215159052565b506040830151614a02604084018215159052565b506060830151614a16606084018215159052565b506080830151614a2a608084018215159052565b5060a0830151614a3e60a084018215159052565b5060c0830151614a5260c084018215159052565b5060e0830151614a6660e084018215159052565b50610100830151614a7c61010084018215159052565b50610120830151614a9261012084018215159052565b50610140830151614aa861014084018215159052565b50610160830151614abe61016084018215159052565b50610180830151614ad461018084018215159052565b506101a083015161474a6101a084018215159052565b5f5f5f60e08486031215614afc575f5ffd5b8335614b07816143f9565b9250614b16856020860161451b565b915060c0840135614b26816143f9565b809150509250925092565b5f60208284031215614b41575f5ffd5b8135611071816143f9565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215614ba7575f5ffd5b5051919050565b5f60208284031215614bbe575f5ffd5b815161107181614842565b5f60208284031215614bd9575f5ffd5b8151611071816143f9565b634e487b7160e01b5f52601160045260245ffd5b5f81614c0657614c06614be4565b505f190190565b5f5f60408385031215614c1e575f5ffd5b8251614c29816143f9565b60208401519092506148c081614842565b5f82518060208501845e5f920191825250919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff83168152604060208201525f61106e6040830184614c50565b8082018082111561255057612550614be4565b8181038181111561255057612550614be4565b5f5f85851115614ccd575f5ffd5b83861115614cd9575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614d2257614d22614ce6565b604052919050565b5f60c0828403128015614d3b575f5ffd5b5060405160c081016001600160401b0381118282101715614d5e57614d5e614ce6565b6040528235614d6c816143f9565b81526020830135614d7c816143f9565b60208201526040830135614d8f816143f9565b60408201526060830135614da2816143f9565b60608201526080830135614db5816143f9565b608082015260a0830135614dc8816143f9565b60a08201529392505050565b818382375f9101908152919050565b5f600160ff1b8201614df757614df7614be4565b505f0390565b5f60208284031215614e0d575f5ffd5b813561107181614842565b5f600f82900b6001607f1b8101614e3157614e31614be4565b5f0392915050565b5f60208284031215614e49575f5ffd5b8151611071816147db565b808202811582820484141761255057612550614be4565b5f82614e8557634e487b7160e01b5f52601260045260245ffd5b500490565b93151584526001600160701b039283166020850152911660408301521515606082015260800190565b80516001600160401b0381168114611216575f5ffd5b5f60208284031215614ed9575f5ffd5b61254d82614eb3565b6001600160701b03828116828216039081111561255057612550614be4565b805161ffff81168114611216575f5ffd5b5f5f60408385031215614f23575f5ffd5b614f2c83614f01565b9150614f3a60208401614f01565b90509250929050565b5f5f60408385031215614f54575f5ffd5b8251614f5f816143f9565b9150614f3a60208401614eb3565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906109d990830184614c50565b5f60208284031215614faf575f5ffd5b81516001600160401b03811115614fc4575f5ffd5b8201601f81018413614fd4575f5ffd5b80516001600160401b03811115614fed57614fed614ce6565b615000601f8201601f1916602001614cfa565b818152856020838501011115615014575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b9182526001600160a01b0316602082015260400190565b805160208201516001600160e01b031981169190600482101561507f576001600160e01b0319600483900360031b81901b82161692505b5050919050565b602081525f61254d6020830184614c5056