solc-0.8.35 0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d optimized-low-runs

9695 bytes

6080604052600436106101a9575f3560e01c8063018a2c37146101ad57806301ffc9a7146101ce57806306fdde031461021b578063081812fc1461023c578063095ea7b314610273578063109695231461029257806318160ddd146102b157806318e20a38146102d357806323b872dd146102e85780632f745c591461030757806334918dfd146103265780633ccfd60b1461033a57806342842e0e1461034e5780634f6ccce71461036d57806355f804b31461038c578063571dff3b146103ab578063607e20e3146103bf5780636352211e146103d35780636c0360eb146103f257806370a0823114610406578063715018a6146104255780637a3f451e146104395780637d17fcbe146104545780638da5cb5b1461046857806395d89b411461047c578063a22cb46514610490578063a723533e146104af578063b0f67427146104c2578063b88d4fde146104d6578063bb8a16bd146104f5578063c87b56dd1461050a578063cb774d4714610529578063e36d64981461053e578063e985e9c514610553578063e986655014610572578063eb8d244414610586578063f2fde38b1461059f575b5f5ffd5b3480156101b8575f5ffd5b506101cc6101c7366004611eb1565b6105be565b005b3480156101d9575f5ffd5b506102066101e8366004611edd565b6001600160e01b0319165f9081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b348015610226575f5ffd5b5061022f6105fb565b6040516102129190611f26565b348015610247575f5ffd5b5061025b610256366004611eb1565b61068b565b6040516001600160a01b039091168152602001610212565b34801561027e575f5ffd5b506101cc61028d366004611f53565b610711565b34801561029d575f5ffd5b506101cc6102ac366004612004565b610820565b3480156102bc575f5ffd5b506102c561085f565b604051908152602001610212565b3480156102de575f5ffd5b506102c560105481565b3480156102f3575f5ffd5b506101cc610302366004612048565b61086f565b348015610312575f5ffd5b506102c5610321366004611f53565b6108a0565b348015610331575f5ffd5b506101cc6108ca565b348015610345575f5ffd5b506101cc61090d565b348015610359575f5ffd5b506101cc610368366004612048565b610968565b348015610378575f5ffd5b506102c5610387366004611eb1565b610982565b348015610397575f5ffd5b506101cc6103a6366004612004565b610997565b3480156103b6575f5ffd5b506102c5601481565b3480156103ca575f5ffd5b5061022f6109d2565b3480156103de575f5ffd5b5061025b6103ed366004611eb1565b610a5e565b3480156103fd575f5ffd5b5061022f610a85565b348015610411575f5ffd5b506102c5610420366004612082565b610a94565b348015610430575f5ffd5b506101cc610b1e565b348015610444575f5ffd5b506102c567011c37937e08000081565b34801561045f575f5ffd5b506101cc610b83565b348015610473575f5ffd5b5061025b610bd8565b348015610487575f5ffd5b5061022f610be7565b34801561049b575f5ffd5b506101cc6104aa36600461209b565b610bf6565b6101cc6104bd366004611eb1565b610cb5565b3480156104cd575f5ffd5b506101cc610ea1565b3480156104e1575f5ffd5b506101cc6104f03660046120d4565b610f01565b348015610500575f5ffd5b506102c5600e5481565b348015610515575f5ffd5b5061022f610524366004611eb1565b610f39565b348015610534575f5ffd5b506102c5600d5481565b348015610549575f5ffd5b506102c5600c5481565b34801561055e575f5ffd5b5061020661056d36600461214a565b6110a5565b34801561057d575f5ffd5b506101cc6110d2565b348015610591575f5ffd5b50600f546102069060ff1681565b3480156105aa575f5ffd5b506101cc6105b9366004612082565b6111a8565b336105c7610bd8565b6001600160a01b0316146105f65760405162461bcd60e51b81526004016105ed9061217b565b60405180910390fd5b601055565b60606006805461060a906121b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610636906121b0565b80156106815780601f1061065857610100808354040283529160200191610681565b820191905f5260205f20905b81548152906001019060200180831161066457829003601f168201915b5050505050905090565b5f61069582611284565b6106f65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ed565b505f908152600460205260409020546001600160a01b031690565b5f61071b82610a5e565b9050806001600160a01b0316836001600160a01b0316036107885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105ed565b336001600160a01b03821614806107a457506107a481336110a5565b6108115760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b60648201526084016105ed565b61081b8383611290565b505050565b33610829610bd8565b6001600160a01b03161461084f5760405162461bcd60e51b81526004016105ed9061217b565b600b61085b828261223e565b5050565b5f61086a60026112fd565b905090565b6108793382611306565b6108955760405162461bcd60e51b81526004016105ed906122fc565b61081b8383836113ce565b6001600160a01b0382165f9081526001602052604081206108c19083611539565b90505b92915050565b336108d3610bd8565b6001600160a01b0316146108f95760405162461bcd60e51b81526004016105ed9061217b565b600f805460ff19811660ff90911615179055565b33610916610bd8565b6001600160a01b03161461093c5760405162461bcd60e51b81526004016105ed9061217b565b6040514790339082156108fc029083905f818181858888f1935050505015801561085b573d5f5f3e3d5ffd5b61081b83838360405180602001604052805f815250610f01565b5f8061098f600284611544565b509392505050565b336109a0610bd8565b6001600160a01b0316146109c65760405162461bcd60e51b81526004016105ed9061217b565b6109cf8161155f565b50565b600b80546109df906121b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b906121b0565b8015610a565780601f10610a2d57610100808354040283529160200191610a56565b820191905f5260205f20905b815481529060010190602001808311610a3957829003601f168201915b505050505081565b5f6108c482604051806060016040528060298152602001612576602991396002919061156b565b60606009805461060a906121b0565b5f6001600160a01b038216610afe5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105ed565b6001600160a01b0382165f9081526001602052604090206108c4906112fd565b33610b27610bd8565b6001600160a01b031614610b4d5760405162461bcd60e51b81526004016105ed9061217b565b600a546040515f916001600160a01b0316905f51602061259f5f395f51905f52908390a3600a80546001600160a01b0319169055565b33610b8c610bd8565b6001600160a01b031614610bb25760405162461bcd60e51b81526004016105ed9061217b565b600d5415610bd25760405162461bcd60e51b81526004016105ed9061234d565b43600c55565b600a546001600160a01b031690565b60606007805461060a906121b0565b336001600160a01b03831603610c4a5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016105ed565b335f8181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600f5460ff16610d075760405162461bcd60e51b815260206004820152601f60248201527f53616c65206d7573742062652061637469766520746f206d696e74204170650060448201526064016105ed565b6014811115610d625760405162461bcd60e51b815260206004820152602160248201527f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d6044820152606560f81b60648201526084016105ed565b600e54610d7782610d7161085f565b90611581565b1115610dd65760405162461bcd60e51b815260206004820152602860248201527f507572636861736520776f756c6420657863656564206d617820737570706c79604482015267206f66204170657360c01b60648201526084016105ed565b34610de967011c37937e080000836115dd565b1115610e375760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016105ed565b5f5b81811015610e70575f610e4a61085f565b9050600e54610e5761085f565b1015610e6757610e67338261165b565b50600101610e39565b50600c54158015610e955750600e54610e8761085f565b1480610e9557506010544210155b156109cf5743600c5550565b33610eaa610bd8565b6001600160a01b031614610ed05760405162461bcd60e51b81526004016105ed9061217b565b5f610ed961085f565b90505f5b601e81101561085b57610ef933610ef48385612398565b61165b565b600101610edd565b610f0b3383611306565b610f275760405162461bcd60e51b81526004016105ed906122fc565b610f3384848484611674565b50505050565b6060610f4482611284565b610fa85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105ed565b5f8281526008602052604081208054610fc0906121b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fec906121b0565b80156110375780601f1061100e57610100808354040283529160200191611037565b820191905f5260205f20905b81548152906001019060200180831161101a57829003601f168201915b505050505090505f611047610a85565b905080515f03611058575092915050565b81511561108a5780826040516020016110729291906123c2565b60405160208183030381529060405292505050919050565b80611094856116a7565b6040516020016110729291906123c2565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b600d54156110f25760405162461bcd60e51b81526004016105ed9061234d565b600c545f036111435760405162461bcd60e51b815260206004820181905260248201527f5374617274696e6720696e64657820626c6f636b206d7573742062652073657460448201526064016105ed565b600e54600c546111549190406123ea565b600d55600c5460ff906111689043906117bb565b111561118b57600e5461117c6001436123fd565b6111879190406123ea565b600d555b600d545f036111a657600d546111a2906001611581565b600d555b565b336111b1610bd8565b6001600160a01b0316146111d75760405162461bcd60e51b81526004016105ed9061217b565b6001600160a01b03811661123c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ed565b600a546040516001600160a01b038084169216905f51602061259f5f395f51905f52905f90a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6108c4600283611816565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112c482610a5e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f6108c4825490565b5f61131082611284565b6113715760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ed565b5f61137b83610a5e565b9050806001600160a01b0316846001600160a01b031614806113b65750836001600160a01b03166113ab8461068b565b6001600160a01b0316145b806113c657506113c681856110a5565b949350505050565b826001600160a01b03166113e182610a5e565b6001600160a01b0316146114495760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105ed565b6001600160a01b0382166114ab5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ed565b6114b55f82611290565b6001600160a01b0383165f9081526001602052604090206114d69082611821565b506001600160a01b0382165f9081526001602052604090206114f8908261182c565b5061150560028284611837565b5080826001600160a01b0316846001600160a01b03165f5160206125bf5f395f51905f5260405160405180910390a4505050565b5f6108c1838361184c565b5f80808061155286866118ce565b9097909650945050505050565b600961085b828261223e565b5f611577848484611965565b90505b9392505050565b5f8061158d8385612398565b9050838110156108c15760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b60448201526064016105ed565b5f825f036115ec57505f6108c4565b5f6115f78385612410565b9050826116048583612427565b146108c15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016105ed565b61085b828260405180602001604052805f8152506119cb565b61167f8484846113ce565b61168b848484846119fd565b610f335760405162461bcd60e51b81526004016105ed9061243a565b6060815f036116cd5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156116f657806116e08161248c565b91506116ef9050600a83612427565b91506116d0565b5f816001600160401b0381111561170f5761170f611f7b565b6040519080825280601f01601f191660200182016040528015611739576020820181803683370190505b5090505f6117486001846123fd565b90508593505b83156117b25761175f600a856123ea565b61176a906030612398565b60f81b8282611778816124a4565b93508151811061178a5761178a6124b9565b60200101906001600160f81b03191690815f1a9053506117ab600a85612427565b935061174e565b50949350505050565b5f8282111561180c5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016105ed565b6108c182846123fd565b5f6108c18383611acb565b5f6108c18383611ae2565b5f6108c18383611bc4565b5f61157784846001600160a01b038516611c0b565b81545f9082106118a95760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016105ed565b825f0182815481106118bd576118bd6124b9565b905f5260205f200154905092915050565b81545f908190831061192d5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016105ed565b5f845f018481548110611942576119426124b9565b905f5260205f2090600202019050805f0154816001015492509250509250929050565b5f82815260018401602052604081205482816119945760405162461bcd60e51b81526004016105ed9190611f26565b50846119a16001836123fd565b815481106119b1576119b16124b9565b905f5260205f209060020201600101549150509392505050565b6119d58383611ca9565b6119e15f8484846119fd565b61081b5760405162461bcd60e51b81526004016105ed9061243a565b5f6001600160a01b0384163b611a15575060016113c6565b5f611a95630a85bd0160e11b33888787604051602401611a3894939291906124cd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001612544603291396001600160a01b0388169190611dab565b90505f81806020019051810190611aac9190612509565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b5f9081526001919091016020526040902054151590565b5f8181526001830160205260408120548015611bbb575f611b046001836123fd565b85549091505f90611b17906001906123fd565b90505f865f018281548110611b2e57611b2e6124b9565b905f5260205f200154905080875f018481548110611b4e57611b4e6124b9565b5f91825260209091200155611b64836001612398565b5f8281526001890160205260409020558654879080611b8557611b85612524565b600190038181905f5260205f20015f90559055866001015f8781526020019081526020015f205f905560019450505050506108c4565b5f9150506108c4565b5f611bcf8383611acb565b611c0457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556108c4565b505f6108c4565b5f828152600184016020526040812054808203611c7057505060408051808201825283815260208082018481528654600181810189555f898152848120955160029093029095019182559151908201558654868452818801909252929091205561157a565b8285611c7d6001846123fd565b81548110611c8d57611c8d6124b9565b905f5260205f209060020201600101819055505f91505061157a565b6001600160a01b038216611cff5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ed565b611d0881611284565b15611d545760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b60448201526064016105ed565b6001600160a01b0382165f908152600160205260409020611d75908261182c565b50611d8260028284611837565b5060405181906001600160a01b038416905f905f5160206125bf5f395f51905f52908290a45050565b606061157784845f8585843b611e035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ed565b5f5f866001600160a01b03168587604051611e1e9190612538565b5f6040518083038185875af1925050503d805f8114611e58576040519150601f19603f3d011682016040523d82523d5f602084013e611e5d565b606091505b5091509150611e6d828286611e78565b979650505050505050565b60608315611e8757508161157a565b825115611e975782518084602001fd5b8160405162461bcd60e51b81526004016105ed9190611f26565b5f60208284031215611ec1575f5ffd5b5035919050565b6001600160e01b0319811681146109cf575f5ffd5b5f60208284031215611eed575f5ffd5b81356108c181611ec8565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108c16020830184611ef8565b80356001600160a01b0381168114611f4e575f5ffd5b919050565b5f5f60408385031215611f64575f5ffd5b611f6d83611f38565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f806001600160401b03841115611fa857611fa8611f7b565b50604051601f19601f85018116603f011681018181106001600160401b0382111715611fd657611fd6611f7b565b604052838152905080828401851015611fed575f5ffd5b838360208301375f60208583010152509392505050565b5f60208284031215612014575f5ffd5b81356001600160401b03811115612029575f5ffd5b8201601f81018413612039575f5ffd5b6113c684823560208401611f8f565b5f5f5f6060848603121561205a575f5ffd5b61206384611f38565b925061207160208501611f38565b929592945050506040919091013590565b5f60208284031215612092575f5ffd5b6108c182611f38565b5f5f604083850312156120ac575f5ffd5b6120b583611f38565b9150602083013580151581146120c9575f5ffd5b809150509250929050565b5f5f5f5f608085870312156120e7575f5ffd5b6120f085611f38565b93506120fe60208601611f38565b92506040850135915060608501356001600160401b0381111561211f575f5ffd5b8501601f8101871361212f575f5ffd5b61213e87823560208401611f8f565b91505092959194509250565b5f5f6040838503121561215b575f5ffd5b61216483611f38565b915061217260208401611f38565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806121c457607f821691505b6020821081036121e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561081b578282111561081b57805f5260205f20601f840160051c602085101561221357505f5b90810190601f840160051c035f5b81811015612236575f83820155600101612221565b505050505050565b81516001600160401b0381111561225757612257611f7b565b61226b8161226584546121b0565b846121e8565b6020601f82116001811461229d575f83156122865750848201515b5f19600385901b1c1916600184901b1784556122f5565b5f84815260208120601f198516915b828110156122cc57878501518255602094850194600190920191016122ac565b50848210156122e957868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f5374617274696e6720696e64657820697320616c726561647920736574000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108c4576108c4612384565b5f81518060208401855e5f93019283525090919050565b5f6115776123d083866123ab565b846123ab565b634e487b7160e01b5f52601260045260245ffd5b5f826123f8576123f86123d6565b500690565b818103818111156108c4576108c4612384565b80820281158282048414176108c4576108c4612384565b5f82612435576124356123d6565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6001820161249d5761249d612384565b5060010190565b5f816124b2576124b2612384565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906124ff90830184611ef8565b9695505050505050565b5f60208284031215612519575f5ffd5b81516108c181611ec8565b634e487b7160e01b5f52603160045260245ffd5b5f6108c182846123ab56fe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef