solc-0.8.36-doubleshift20 0x4e90495f66fb04a5fba401967abd607e2ea0ab46 optimized-low-runs
10439 bytes
608060405234801561000f575f5ffd5b50600436106101c0575f3560e01c806301ffc9a7146101c457806302c37ddc146101ec57806306fdde0314610201578063081812fc14610216578063095ea7b314610236578063127a529814610249578063166c4b05146102775780631785f53c1461028a57806318160ddd1461029d57806323b872dd146102a557806324d7806c146102b8578063278d9c41146102cb57806328db38b4146102de5780632f745c59146102f15780633f4ba83a1461030457806342842e0e1461030c57806342966c681461031f5780634f6ccce71461033257806355f804b3146103455780635c975abb146103585780636352211e1461036457806367e971ce14610377578063704802751461039f57806370a08231146103b25780638129fc1c146103c55780638456cb59146103cd5780638bad0c0a146103d55780638d232094146103dd57806395d89b41146103f05780639cd3cad6146103f8578063a140ae231461040b578063a22cb4651461041e578063b88d4fde14610431578063c4d66de814610444578063c87b56dd14610457578063d890c8e21461046a578063e985e9c51461047d578063f980f3dc14610490575b5f5ffd5b6101d76101d2366004612016565b6104a3565b60405190151581526020015b60405180910390f35b6101ff6101fa366004612031565b6104c1565b005b6102096104ce565b6040516101e39190612076565b610229610224366004612031565b61055f565b6040516101e39190612088565b6101ff6102443660046120b7565b61058c565b610269610257366004612031565b5f90815261013d602052604090205490565b6040519081526020016101e3565b6101ff6102853660046120df565b6105c7565b6101ff610298366004612100565b6105f6565b609e54610269565b6101ff6102b3366004612119565b610624565b6101d76102c6366004612100565b610658565b6101d76102d936600461222a565b61066a565b6101d76102ec3660046120df565b61072c565b6102696102ff3660046120b7565b61075a565b6101ff6107a8565b6101ff61031a366004612119565b61085e565b6101ff61032d366004612031565b61088d565b610269610340366004612031565b6108fb565b6101ff6103533660046122e3565b610932565b6101065460ff166101d7565b610229610372366004612031565b610988565b61038a6103853660046120b7565b6109a8565b604080519283526020830191909152016101e3565b6101ff6103ad366004612100565b6109d0565b6102696103c0366004612100565b6109fe565b6101ff610a2e565b6101ff610ad9565b6101ff610b60565b6101ff6103eb366004612314565b610b6b565b610209610c6e565b6101ff6104063660046120df565b610c7e565b6101d76104193660046120df565b610caf565b6101ff61042c3660046123c9565b610d2c565b6101ff61043f366004612402565b610d5a565b6101ff610452366004612100565b610d90565b610209610465366004612031565b610e15565b6101d761047836600461246c565b610ef6565b6101d761048b36600461249e565b610f57565b6101d761049e3660046124c6565b610f84565b6001600160e01b0319165f9081526033602052604090205460ff1690565b6104cb8133611043565b50565b606061013980546104de9061255f565b80601f016020809104026020016040519081016040528092919081815260200182805461050a9061255f565b80156105555780601f1061052c57610100808354040283529160200191610555565b820191905f5260205f20905b81548152906001019060200180831161053857829003601f168201915b5050505050905090565b5f61056982611093565b610571575f5ffd5b505f908152606760205260409020546001600160a01b031690565b6101065460ff16156105b95760405162461bcd60e51b81526004016105b090612597565b60405180910390fd5b6105c382826110af565b5050565b6105d033610658565b6105ec5760405162461bcd60e51b81526004016105b0906125c3565b6105c38282611043565b6105ff33610658565b61061b5760405162461bcd60e51b81526004016105b0906125c3565b6104cb81611151565b6101065460ff16156106485760405162461bcd60e51b81526004016105b090612597565b610653838383611192565b505050565b5f61066460d2836111af565b92915050565b610106545f9060ff16156106905760405162461bcd60e51b81526004016105b090612597565b8261069b813361072c565b6106b75760405162461bcd60e51b81526004016105b0906125f0565b5f5b835181101561070957610700858261013c5460016106d79190612638565b6106e19190612638565b8684815181106106f3576106f361264b565b60200260200101516111e1565b506001016106b9565b50825161013c5f82825461071d9190612638565b90915550600195945050505050565b5f61073682610658565b8061075357505f83815260d36020526040902061075390836111af565b9392505050565b5f610764836109fe565b821061076e575f5ffd5b6001600160a01b0383165f908152609c602052604090208054839081106107975761079761264b565b905f5260205f200154905092915050565b6107b133610658565b6107cd5760405162461bcd60e51b81526004016105b0906125c3565b6101065460ff166108195760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd0814185d5cd95960521b60448201526064016105b0565b610106805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90610854903390612088565b60405180910390a1565b6101065460ff16156108825760405162461bcd60e51b81526004016105b090612597565b610653838383611241565b610897338261125b565b806108a657506108a633610658565b6108f25760405162461bcd60e51b815260206004820152601e60248201527f53656e64657220646f65736e27742068617665207065726d697373696f6e000060448201526064016105b0565b6104cb816112ab565b5f610905609e5490565b821061090f575f5ffd5b609e82815481106109225761092261264b565b905f5260205f2001549050919050565b61093b33610658565b6109575760405162461bcd60e51b81526004016105b0906125c3565b6101065460ff161561097b5760405162461bcd60e51b81526004016105b090612597565b61013b6105c382826126b5565b5f818152606660205260408120546001600160a01b031680610664575f5ffd5b5f5f6109b4848461075a565b5f81815261013d60205260409020549092505b90509250929050565b6109d933610658565b6109f55760405162461bcd60e51b81526004016105b0906125c3565b6104cb816112bd565b5f6001600160a01b038216610a11575f5ffd5b6001600160a01b0382165f90815260686020526040902054610664565b5f54610100900460ff1680610a425750303b155b80610a4f57505f5460ff16155b610a6b5760405162461bcd60e51b81526004016105b090612773565b5f805461ffff1981166101011790915560405162461bcd60e51b815260206004820152602360248201527f506f61703a2075736520706172616d65746572697a656420696e697469616c696044820152623d32b960e91b606482015261010090910460ff16906084016105b0565b610ae233610658565b610afe5760405162461bcd60e51b81526004016105b0906125c3565b6101065460ff1615610b225760405162461bcd60e51b81526004016105b090612597565b610106805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890610854903390612088565b610b6933611151565b565b5f54610100900460ff1680610b7f5750303b155b80610b8c57505f5460ff16155b610ba85760405162461bcd60e51b81526004016105b090612773565b5f805461ffff19811661010117909155610100900460ff16610bc86112fe565b610bd0611384565b610bd933610d90565b610be16113f9565b5f5b8251811015610c1657610c0e838281518110610c0157610c0161264b565b60200260200101516112bd565b600101610be3565b50610139610c2486826126b5565b5061013a610c3285826126b5565b5061013b610c4084826126b5565b50610c51635b5e139f60e01b611461565b5f80549115156101000261ff001990921691909117905550505050565b606061013a80546104de9061255f565b81610c89813361072c565b610ca55760405162461bcd60e51b81526004016105b0906125f0565b610653838361149b565b610106545f9060ff1615610cd55760405162461bcd60e51b81526004016105b090612597565b82610ce0813361072c565b610cfc5760405162461bcd60e51b81526004016105b0906125f0565b600161013c5f828254610d0f9190612638565b92505081905550610d248461013c54856111e1565b949350505050565b6101065460ff1615610d505760405162461bcd60e51b81526004016105b090612597565b6105c382826114eb565b6101065460ff1615610d7e5760405162461bcd60e51b81526004016105b090612597565b610d8a8484848461156a565b50505050565b5f54610100900460ff1680610da45750303b155b80610db157505f5460ff16155b610dcd5760405162461bcd60e51b81526004016105b090612773565b5f805461ffff19811661010117909155610100900460ff16610dee82610658565b610dfb57610dfb826112bd565b5f80549115156101000261ff001990921691909117905550565b5f81815261013d602052604090205461013b80546060929161075391610e3a9061255f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e669061255f565b8015610eb15780601f10610e8857610100808354040283529160200191610eb1565b820191905f5260205f20905b815481529060010190602001808311610e9457829003601f168201915b5050505050610ebf83611589565b604051806040016040528060018152602001602f60f81b815250610ee287611589565b60405180602001604052805f81525061169a565b610106545f9060ff1615610f1c5760405162461bcd60e51b81526004016105b090612597565b83610f27813361072c565b610f435760405162461bcd60e51b81526004016105b0906125f0565b610f4e8585856111e1565b95945050505050565b6001600160a01b039182165f90815260696020908152604080832093909416825291909152205460ff1690565b610106545f9060ff1615610faa5760405162461bcd60e51b81526004016105b090612597565b610fb333610658565b610fcf5760405162461bcd60e51b81526004016105b0906125c3565b5f5b835181101561102157611018848281518110610fef57610fef61264b565b60200260200101518261013c5460016110089190612638565b6110129190612638565b856111e1565b50600101610fd1565b50825161013c5f8282546110359190612638565b909155506001949350505050565b5f82815260d36020526040902061105a9082611941565b6040516001600160a01b0382169083907fb6882c4d609d560f6d57e78e73dd96027f0d9852739b0b922537a6dd3c8e944c905f90a35050565b5f908152606660205260409020546001600160a01b0316151590565b5f6110b982610988565b90506001600160a01b03808216908416036110d2575f5ffd5b336001600160a01b03821614806110ee57506110ee8133610f57565b6110f6575f5ffd5b5f8281526067602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61115c60d282611941565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f905f90a250565b61119c338261125b565b6111a4575f5ffd5b610653838383611986565b5f6001600160a01b0382166111c2575f5ffd5b506001600160a01b03165f908152602091909152604090205460ff1690565b5f6111ec82846119a5565b5f83815261013d602090815260409182902086905581518681529081018590527f4b3711cd7ece062b0828c1b6e08d814a72d4c003383a016c833cbb1b45956e34910160405180910390a15060019392505050565b61065383838360405180602001604052805f815250610d5a565b5f5f61126683610988565b90506001600160a01b03848116908216148061129b57506001600160a01b0384166112908461055f565b6001600160a01b0316145b80610d245750610d248185610f57565b6104cb6112b782610988565b82611a00565b6112c860d282611a1c565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339905f90a250565b5f54610100900460ff16806113125750303b155b8061131f57505f5460ff16155b61133b5760405162461bcd60e51b81526004016105b090612773565b5f805461ffff19811661010117909155610100900460ff1661135b611a65565b61136b6380ac58cd60e01b611461565b5f80549115156101000261ff0019909216919091179055565b5f54610100900460ff16806113985750303b155b806113a557505f5460ff16155b6113c15760405162461bcd60e51b81526004016105b090612773565b5f805461ffff19811661010117909155610100900460ff166113e1611aca565b6113e9575f5ffd5b61136b63780e9d6360e01b611461565b5f54610100900460ff168061140d5750303b155b8061141a57505f5460ff16155b6114365760405162461bcd60e51b81526004016105b090612773565b5f8054610106805460ff1916905561ffff1981166101009182900460ff161515909102176001179055565b6001600160e01b03198082169003611477575f5ffd5b6001600160e01b0319165f908152603360205260409020805460ff19166001179055565b5f82815260d3602052604090206114b29082611a1c565b6040516001600160a01b0382169083907fe1bd660d9f7c60e6fb12dd6479fdde12d21fc96385dc7b9b022c0b2f319e7391905f90a35050565b336001600160a01b038316036114ff575f5ffd5b335f8181526069602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611575848484610624565b61158184848484611ae0565b610d8a575f5ffd5b6060815f036115af5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156115d857806115c2816127c1565b91506115d19050600a836127ed565b91506115b2565b5f816001600160401b038111156115f1576115f1612153565b6040519080825280601f01601f19166020018201604052801561161b576020820181803683370190505b5090505f61162a600184612800565b90505b85156116915761163e600a87612813565b611649906030612638565b60f81b828261165781612826565b9350815181106116695761166961264b565b60200101906001600160f81b03191690815f1a90535061168a600a876127ed565b955061162d565b50949350505050565b805182518451865188516060948a948a948a948a948a945f949093909290916116c39190612638565b6116cd9190612638565b6116d79190612638565b6116e19190612638565b6001600160401b038111156116f8576116f8612153565b6040519080825280601f01601f191660200182016040528015611722576020820181803683370190505b509050805f805b885181101561178e578881815181106117445761174461264b565b01602001516001600160f81b031916838361175e816127c1565b9450815181106117705761177061264b565b60200101906001600160f81b03191690815f1a905350600101611729565b505f5b87518110156117f6578781815181106117ac576117ac61264b565b01602001516001600160f81b03191683836117c6816127c1565b9450815181106117d8576117d861264b565b60200101906001600160f81b03191690815f1a905350600101611791565b505f5b865181101561185e578681815181106118145761181461264b565b01602001516001600160f81b031916838361182e816127c1565b9450815181106118405761184061264b565b60200101906001600160f81b03191690815f1a9053506001016117f9565b505f5b85518110156118c65785818151811061187c5761187c61264b565b01602001516001600160f81b0319168383611896816127c1565b9450815181106118a8576118a861264b565b60200101906001600160f81b03191690815f1a905350600101611861565b505f5b845181101561192e578481815181106118e4576118e461264b565b01602001516001600160f81b03191683836118fe816127c1565b9450815181106119105761191061264b565b60200101906001600160f81b03191690815f1a9053506001016118c9565b50909d9c50505050505050505050505050565b6001600160a01b038116611953575f5ffd5b61195d82826111af565b611965575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19169055565b611991838383611b8a565b61199b8382611c52565b6106538282611d4e565b6119af8282611d8b565b6119b98282611d4e565b6105c381609e80545f838152609f60205260408120829055600182018355919091527fcfe2a20ff701a1f3e14f63bd70d6c6bc6fba8172ec6d5a505cdab3927c0a9de60155565b611a0a8282611e15565b5f90815261013d602052604081205550565b6001600160a01b038116611a2e575f5ffd5b611a3882826111af565b15611a41575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19166001179055565b5f54610100900460ff1680611a795750303b155b80611a8657505f5460ff16155b611aa25760405162461bcd60e51b81526004016105b090612773565b5f805461ffff19811661010117909155610100900460ff1661136b6301ffc9a760e01b611461565b5f611adb6380ac58cd60e01b6104a3565b905090565b5f6001600160a01b0384163b611af857506001610d24565b604051630a85bd0160e11b81525f906001600160a01b0386169063150b7a0290611b2c9033908a908990899060040161283b565b6020604051808303815f875af1158015611b48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6c9190612877565b6001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b038316611b9d82610988565b6001600160a01b031614611baf575f5ffd5b6001600160a01b038216611bc1575f5ffd5b611bca81611e40565b6001600160a01b0383165f908152606860205260409020611bea90611e79565b6001600160a01b0382165f908152606860205260409020611c0a90611e8a565b5f8181526066602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716915f5160206128a75f395f51905f5291a4505050565b6001600160a01b0382165f908152609c6020526040812054611c75906001611ea5565b5f838152609d6020526040902054909150808214611d0f576001600160a01b0384165f908152609c60205260408120805484908110611cb657611cb661264b565b5f9182526020808320909101546001600160a01b0388168352609c90915260409091208054919250829184908110611cf057611cf061264b565b5f918252602080832090910192909255918252609d9052604090208190555b6001600160a01b0384165f908152609c60205260409020805480611d3557611d35612892565b600190038181905f5260205f20015f9055905550505050565b6001600160a01b039091165f908152609c602081815260408084208054868652609d84529185208290559282526001810183559183529091200155565b6001600160a01b038216611d9d575f5ffd5b611da681611093565b15611daf575f5ffd5b5f81815260666020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260689091529020611ded90611e8a565b60405181906001600160a01b038416905f905f5160206128a75f395f51905f52908290a45050565b611e1f8282611ebd565b611e298282611c52565b5f818152609d60205260408120556105c381611f4c565b5f818152606760205260409020546001600160a01b0316156104cb575f90815260676020526040902080546001600160a01b0319169055565b8054611e86906001611ea5565b9055565b6001815f015f828254611e9d9190612638565b909155505050565b5f82821115611eb2575f5ffd5b5f610d248385612800565b6001600160a01b038216611ed082610988565b6001600160a01b031614611ee2575f5ffd5b611eeb81611e40565b6001600160a01b0382165f908152606860205260409020611f0b90611e79565b5f8181526066602052604080822080546001600160a01b0319169055518291906001600160a01b038516905f5160206128a75f395f51905f52908390a45050565b609e545f90611f5c906001611ea5565b5f838152609f6020526040812054609e8054939450909284908110611f8357611f8361264b565b905f5260205f200154905080609e8381548110611fa257611fa261264b565b5f918252602080832090910192909255828152609f90915260409020829055609e805480611fd257611fd2612892565b600190038181905f5260205f20015f905590555f609f5f8681526020019081526020015f208190555050505050565b6001600160e01b0319811681146104cb575f5ffd5b5f60208284031215612026575f5ffd5b813561075381612001565b5f60208284031215612041575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6107536020830184612048565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146120b2575f5ffd5b919050565b5f5f604083850312156120c8575f5ffd5b6120d18361209c565b946020939093013593505050565b5f5f604083850312156120f0575f5ffd5b823591506109c76020840161209c565b5f60208284031215612110575f5ffd5b6107538261209c565b5f5f5f6060848603121561212b575f5ffd5b6121348461209c565b92506121426020850161209c565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561218f5761218f612153565b604052919050565b5f6001600160401b038211156121af576121af612153565b5060051b60200190565b5f82601f8301126121c8575f5ffd5b81356121db6121d682612197565b612167565b8082825260208201915060208360051b8601019250858311156121fc575f5ffd5b602085015b83811015612220576122128161209c565b835260209283019201612201565b5095945050505050565b5f5f6040838503121561223b575f5ffd5b8235915060208301356001600160401b03811115612257575f5ffd5b612263858286016121b9565b9150509250929050565b5f806001600160401b0384111561228657612286612153565b50601f8301601f191660200161229b81612167565b9150508281528383830111156122af575f5ffd5b828260208301375f602084830101529392505050565b5f82601f8301126122d4575f5ffd5b6107538383356020850161226d565b5f602082840312156122f3575f5ffd5b81356001600160401b03811115612308575f5ffd5b610d24848285016122c5565b5f5f5f5f60808587031215612327575f5ffd5b84356001600160401b0381111561233c575f5ffd5b612348878288016122c5565b94505060208501356001600160401b03811115612363575f5ffd5b61236f878288016122c5565b93505060408501356001600160401b0381111561238a575f5ffd5b612396878288016122c5565b92505060608501356001600160401b038111156123b1575f5ffd5b6123bd878288016121b9565b91505092959194509250565b5f5f604083850312156123da575f5ffd5b6123e38361209c565b9150602083013580151581146123f7575f5ffd5b809150509250929050565b5f5f5f5f60808587031215612415575f5ffd5b61241e8561209c565b935061242c6020860161209c565b92506040850135915060608501356001600160401b0381111561244d575f5ffd5b8501601f8101871361245d575f5ffd5b6123bd8782356020840161226d565b5f5f5f6060848603121561247e575f5ffd5b83359250602084013591506124956040850161209c565b90509250925092565b5f5f604083850312156124af575f5ffd5b6124b88361209c565b91506109c76020840161209c565b5f5f604083850312156124d7575f5ffd5b82356001600160401b038111156124ec575f5ffd5b8301601f810185136124fc575f5ffd5b803561250a6121d682612197565b8082825260208201915060208360051b85010192508783111561252b575f5ffd5b6020840193505b8284101561254d578335825260209384019390910190612532565b94506109c7925050506020840161209c565b600181811c9082168061257357607f821691505b60208210810361259157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526012908201527110dbdb9d1c9858dd081a5cc814185d5cd95960721b604082015260600190565b60208082526013908201527229b2b73232b91034b9903737ba1020b236b4b760691b604082015260600190565b6020808252601a908201527929b2b73232b91034b9903737ba1022bb32b73a1026b4b73a32b960311b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561066457610664612624565b634e487b7160e01b5f52603260045260245ffd5b601f821115610653578282111561065357805f5260205f20601f840160051c602085101561268a57505f5b90810190601f840160051c035f5b818110156126ad575f83820155600101612698565b505050505050565b81516001600160401b038111156126ce576126ce612153565b6126e2816126dc845461255f565b8461265f565b6020601f821160018114612714575f83156126fd5750848201515b5f19600385901b1c1916600184901b17845561276c565b5f84815260208120601f198516915b828110156127435787850151825560209485019460019092019101612723565b508482101561276057868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b5f600182016127d2576127d2612624565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f826127fb576127fb6127d9565b500490565b8181038181111561066457610664612624565b5f82612821576128216127d9565b500690565b5f8161283457612834612624565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061286d90830184612048565b9695505050505050565b5f60208284031215612887575f5ffd5b815161075381612001565b634e487b7160e01b5f52603160045260245ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef