solc-0.8.36-doubleshift20 0x4e90495f66fb04a5fba401967abd607e2ea0ab46 optimized

10580 bytes

608060405234801561000f575f5ffd5b5060043610610229575f3560e01c80635c975abb1161012a57806395d89b41116100b4578063c4d66de811610079578063c4d66de8146104d1578063c87b56dd146104e4578063d890c8e2146104f7578063e985e9c51461050a578063f980f3dc1461051d575f5ffd5b806395d89b411461047d5780639cd3cad614610485578063a140ae2314610498578063a22cb465146104ab578063b88d4fde146104be575f5ffd5b806370a08231116100fa57806370a082311461043f5780638129fc1c146104525780638456cb591461045a5780638bad0c0a146104625780638d2320941461046a575f5ffd5b80635c975abb146103e55780636352211e146103f157806367e971ce14610404578063704802751461042c575f5ffd5b806323b872dd116101b65780633f4ba83a1161017b5780633f4ba83a1461039157806342842e0e1461039957806342966c68146103ac5780634f6ccce7146103bf57806355f804b3146103d2575f5ffd5b806323b872dd1461033257806324d7806c14610345578063278d9c411461035857806328db38b41461036b5780632f745c591461037e575f5ffd5b8063095ea7b3116101fc578063095ea7b3146102c3578063127a5298146102d6578063166c4b05146103045780631785f53c1461031757806318160ddd1461032a575f5ffd5b806301ffc9a71461022d57806302c37ddc1461026e57806306fdde0314610283578063081812fc14610298575b5f5ffd5b61025961023b3660046120d5565b6001600160e01b0319165f9081526033602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61028161027c3660046120f0565b610530565b005b61028b61053d565b6040516102659190612135565b6102ab6102a63660046120f0565b6105ce565b6040516001600160a01b039091168152602001610265565b6102816102d1366004612162565b610608565b6102f66102e43660046120f0565b5f90815261013d602052604090205490565b604051908152602001610265565b61028161031236600461218a565b610643565b6102816103253660046121ab565b610672565b609e546102f6565b6102816103403660046121c4565b6106a0565b6102596103533660046121ab565b6106d4565b6102596103663660046122d5565b6106e6565b61025961037936600461218a565b6107a8565b6102f661038c366004612162565b6107d6565b610281610824565b6102816103a73660046121c4565b6108d6565b6102816103ba3660046120f0565b610905565b6102f66103cd3660046120f0565b610973565b6102816103e036600461238e565b6109aa565b6101065460ff16610259565b6102ab6103ff3660046120f0565b610a00565b610417610412366004612162565b610a20565b60408051928352602083019190915201610265565b61028161043a3660046121ab565b610a48565b6102f661044d3660046121ab565b610a76565b610281610aa6565b610281610b51565b610281610bd8565b6102816104783660046123bf565b610be3565b61028b610ce6565b61028161049336600461218a565b610cf6565b6102596104a636600461218a565b610d27565b6102816104b9366004612474565b610da4565b6102816104cc3660046124ad565b610dd2565b6102816104df3660046121ab565b610e08565b61028b6104f23660046120f0565b610e8d565b610259610505366004612517565b610f6e565b610259610518366004612549565b610fcf565b61025961052b366004612571565b610ffc565b61053a81336110bb565b50565b6060610139805461054d9061260a565b80601f01602080910402602001604051908101604052809291908181526020018280546105799061260a565b80156105c45780601f1061059b576101008083540402835291602001916105c4565b820191905f5260205f20905b8154815290600101906020018083116105a757829003601f168201915b5050505050905090565b5f818152606660205260408120546001600160a01b03166105ed575f5ffd5b505f908152606760205260409020546001600160a01b031690565b6101065460ff16156106355760405162461bcd60e51b815260040161062c90612642565b60405180910390fd5b61063f828261110b565b5050565b61064c336106d4565b6106685760405162461bcd60e51b815260040161062c9061266e565b61063f82826110bb565b61067b336106d4565b6106975760405162461bcd60e51b815260040161062c9061266e565b61053a816111ad565b6101065460ff16156106c45760405162461bcd60e51b815260040161062c90612642565b6106cf8383836111ee565b505050565b5f6106e060d28361120b565b92915050565b610106545f9060ff161561070c5760405162461bcd60e51b815260040161062c90612642565b8261071781336107a8565b6107335760405162461bcd60e51b815260040161062c9061269b565b5f5b83518110156107855761077c858261013c54600161075391906126e6565b61075d91906126e6565b86848151811061076f5761076f6126f9565b602002602001015161123d565b50600101610735565b50825161013c5f82825461079991906126e6565b90915550600195945050505050565b5f6107b2826106d4565b806107cf57505f83815260d3602052604090206107cf908361120b565b9392505050565b5f6107e083610a76565b82106107ea575f5ffd5b6001600160a01b0383165f908152609c60205260409020805483908110610813576108136126f9565b905f5260205f200154905092915050565b61082d336106d4565b6108495760405162461bcd60e51b815260040161062c9061266e565b6101065460ff166108955760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd0814185d5cd95960521b604482015260640161062c565b610106805460ff191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6101065460ff16156108fa5760405162461bcd60e51b815260040161062c90612642565b6106cf83838361129d565b61090f33826112b7565b8061091e575061091e336106d4565b61096a5760405162461bcd60e51b815260206004820152601e60248201527f53656e64657220646f65736e27742068617665207065726d697373696f6e0000604482015260640161062c565b61053a81611307565b5f61097d609e5490565b8210610987575f5ffd5b609e828154811061099a5761099a6126f9565b905f5260205f2001549050919050565b6109b3336106d4565b6109cf5760405162461bcd60e51b815260040161062c9061266e565b6101065460ff16156109f35760405162461bcd60e51b815260040161062c90612642565b61013b61063f8282612763565b5f818152606660205260408120546001600160a01b0316806106e0575f5ffd5b5f5f610a2c84846107d6565b5f81815261013d60205260409020549092505b90509250929050565b610a51336106d4565b610a6d5760405162461bcd60e51b815260040161062c9061266e565b61053a81611319565b5f6001600160a01b038216610a89575f5ffd5b6001600160a01b0382165f908152606860205260409020546106e0565b5f54610100900460ff1680610aba5750303b155b80610ac757505f5460ff16155b610ae35760405162461bcd60e51b815260040161062c90612821565b5f805461ffff1981166101011790915560405162461bcd60e51b815260206004820152602360248201527f506f61703a2075736520706172616d65746572697a656420696e697469616c696044820152623d32b960e91b606482015261010090910460ff169060840161062c565b610b5a336106d4565b610b765760405162461bcd60e51b815260040161062c9061266e565b6101065460ff1615610b9a5760405162461bcd60e51b815260040161062c90612642565b610106805460ff191660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108cc565b610be1336111ad565b565b5f54610100900460ff1680610bf75750303b155b80610c0457505f5460ff16155b610c205760405162461bcd60e51b815260040161062c90612821565b5f805461ffff19811661010117909155610100900460ff16610c4061135a565b610c486113e0565b610c5133610e08565b610c59611487565b5f5b8251811015610c8e57610c86838281518110610c7957610c796126f9565b6020026020010151611319565b600101610c5b565b50610139610c9c8682612763565b5061013a610caa8582612763565b5061013b610cb88482612763565b50610cc9635b5e139f60e01b6114ef565b5f80549115156101000261ff001990921691909117905550505050565b606061013a805461054d9061260a565b81610d0181336107a8565b610d1d5760405162461bcd60e51b815260040161062c9061269b565b6106cf8383611529565b610106545f9060ff1615610d4d5760405162461bcd60e51b815260040161062c90612642565b82610d5881336107a8565b610d745760405162461bcd60e51b815260040161062c9061269b565b600161013c5f828254610d8791906126e6565b92505081905550610d9c8461013c548561123d565b949350505050565b6101065460ff1615610dc85760405162461bcd60e51b815260040161062c90612642565b61063f8282611579565b6101065460ff1615610df65760405162461bcd60e51b815260040161062c90612642565b610e02848484846115f8565b50505050565b5f54610100900460ff1680610e1c5750303b155b80610e2957505f5460ff16155b610e455760405162461bcd60e51b815260040161062c90612821565b5f805461ffff19811661010117909155610100900460ff16610e66826106d4565b610e7357610e7382611319565b5f80549115156101000261ff001990921691909117905550565b5f81815261013d602052604090205461013b8054606092916107cf91610eb29061260a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ede9061260a565b8015610f295780601f10610f0057610100808354040283529160200191610f29565b820191905f5260205f20905b815481529060010190602001808311610f0c57829003601f168201915b5050505050610f3783611617565b604051806040016040528060018152602001602f60f81b815250610f5a87611617565b60405180602001604052805f815250611728565b610106545f9060ff1615610f945760405162461bcd60e51b815260040161062c90612642565b83610f9f81336107a8565b610fbb5760405162461bcd60e51b815260040161062c9061269b565b610fc685858561123d565b95945050505050565b6001600160a01b039182165f90815260696020908152604080832093909416825291909152205460ff1690565b610106545f9060ff16156110225760405162461bcd60e51b815260040161062c90612642565b61102b336106d4565b6110475760405162461bcd60e51b815260040161062c9061266e565b5f5b835181101561109957611090848281518110611067576110676126f9565b60200260200101518261013c54600161108091906126e6565b61108a91906126e6565b8561123d565b50600101611049565b50825161013c5f8282546110ad91906126e6565b909155506001949350505050565b5f82815260d3602052604090206110d290826119cf565b6040516001600160a01b0382169083907fb6882c4d609d560f6d57e78e73dd96027f0d9852739b0b922537a6dd3c8e944c905f90a35050565b5f61111582610a00565b90506001600160a01b038082169084160361112e575f5ffd5b336001600160a01b038216148061114a575061114a8133610fcf565b611152575f5ffd5b5f8281526067602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6111b860d2826119cf565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f905f90a250565b6111f833826112b7565b611200575f5ffd5b6106cf838383611a14565b5f6001600160a01b03821661121e575f5ffd5b506001600160a01b03165f908152602091909152604090205460ff1690565b5f6112488284611a33565b5f83815261013d602090815260409182902086905581518681529081018590527f4b3711cd7ece062b0828c1b6e08d814a72d4c003383a016c833cbb1b45956e34910160405180910390a15060019392505050565b6106cf83838360405180602001604052805f815250610dd2565b5f5f6112c283610a00565b90506001600160a01b0384811690821614806112f757506001600160a01b0384166112ec846105ce565b6001600160a01b0316145b80610d9c5750610d9c8185610fcf565b61053a61131382610a00565b82611a8e565b61132460d282611aaa565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339905f90a250565b5f54610100900460ff168061136e5750303b155b8061137b57505f5460ff16155b6113975760405162461bcd60e51b815260040161062c90612821565b5f805461ffff19811661010117909155610100900460ff166113b7611af3565b6113c76380ac58cd60e01b6114ef565b5f80549115156101000261ff0019909216919091179055565b5f54610100900460ff16806113f45750303b155b8061140157505f5460ff16155b61141d5760405162461bcd60e51b815260040161062c90612821565b5f805461ffff19811661010117909155610100900460ff1661146f6380ac58cd60e01b5f5260336020527fe940c21e8a07a63a671103a94dc940004f6cc2e4962299c5f9e061f0d862c93b5460ff1690565b611477575f5ffd5b6113c763780e9d6360e01b6114ef565b5f54610100900460ff168061149b5750303b155b806114a857505f5460ff16155b6114c45760405162461bcd60e51b815260040161062c90612821565b5f8054610106805460ff1916905561ffff1981166101009182900460ff161515909102176001179055565b6001600160e01b03198082169003611505575f5ffd5b6001600160e01b0319165f908152603360205260409020805460ff19166001179055565b5f82815260d3602052604090206115409082611aaa565b6040516001600160a01b0382169083907fe1bd660d9f7c60e6fb12dd6479fdde12d21fc96385dc7b9b022c0b2f319e7391905f90a35050565b336001600160a01b0383160361158d575f5ffd5b335f8181526069602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6116038484846106a0565b61160f84848484611b58565b610e02575f5ffd5b6060815f0361163d5750506040805180820190915260018152600360fc1b602082015290565b815f5b811561166657806116508161286f565b915061165f9050600a8361289b565b9150611640565b5f816001600160401b0381111561167f5761167f6121fe565b6040519080825280601f01601f1916602001820160405280156116a9576020820181803683370190505b5090505f6116b86001846128ae565b90505b851561171f576116cc600a876128c1565b6116d79060306126e6565b60f81b82826116e5816128d4565b9350815181106116f7576116f76126f9565b60200101906001600160f81b03191690815f1a905350611718600a8761289b565b95506116bb565b50949350505050565b805182518451865188516060948a948a948a948a948a945f9490939092909161175191906126e6565b61175b91906126e6565b61176591906126e6565b61176f91906126e6565b6001600160401b03811115611786576117866121fe565b6040519080825280601f01601f1916602001820160405280156117b0576020820181803683370190505b509050805f805b885181101561181c578881815181106117d2576117d26126f9565b01602001516001600160f81b03191683836117ec8161286f565b9450815181106117fe576117fe6126f9565b60200101906001600160f81b03191690815f1a9053506001016117b7565b505f5b87518110156118845787818151811061183a5761183a6126f9565b01602001516001600160f81b03191683836118548161286f565b945081518110611866576118666126f9565b60200101906001600160f81b03191690815f1a90535060010161181f565b505f5b86518110156118ec578681815181106118a2576118a26126f9565b01602001516001600160f81b03191683836118bc8161286f565b9450815181106118ce576118ce6126f9565b60200101906001600160f81b03191690815f1a905350600101611887565b505f5b85518110156119545785818151811061190a5761190a6126f9565b01602001516001600160f81b03191683836119248161286f565b945081518110611936576119366126f9565b60200101906001600160f81b03191690815f1a9053506001016118ef565b505f5b84518110156119bc57848181518110611972576119726126f9565b01602001516001600160f81b031916838361198c8161286f565b94508151811061199e5761199e6126f9565b60200101906001600160f81b03191690815f1a905350600101611957565b50909d9c50505050505050505050505050565b6001600160a01b0381166119e1575f5ffd5b6119eb828261120b565b6119f3575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19169055565b611a1f838383611c02565b611a298382611cdd565b6106cf8282611dd9565b611a3d8282611e16565b611a478282611dd9565b61063f81609e80545f838152609f60205260408120829055600182018355919091527fcfe2a20ff701a1f3e14f63bd70d6c6bc6fba8172ec6d5a505cdab3927c0a9de60155565b611a988282611ec1565b5f90815261013d602052604081205550565b6001600160a01b038116611abc575f5ffd5b611ac6828261120b565b15611acf575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19166001179055565b5f54610100900460ff1680611b075750303b155b80611b1457505f5460ff16155b611b305760405162461bcd60e51b815260040161062c90612821565b5f805461ffff19811661010117909155610100900460ff166113c76301ffc9a760e01b6114ef565b5f6001600160a01b0384163b611b7057506001610d9c565b604051630a85bd0160e11b81525f906001600160a01b0386169063150b7a0290611ba49033908a90899089906004016128e9565b6020604051808303815f875af1158015611bc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be49190612925565b6001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b038316611c1582610a00565b6001600160a01b031614611c27575f5ffd5b6001600160a01b038216611c39575f5ffd5b611c4281611eec565b6001600160a01b0383165f908152606860205260409020611c6290611f25565b6001600160a01b0382165f908152606860205260409020611c8290611f36565b5f8181526066602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382165f908152609c6020526040812054611d00906001611f51565b5f838152609d6020526040902054909150808214611d9a576001600160a01b0384165f908152609c60205260408120805484908110611d4157611d416126f9565b5f9182526020808320909101546001600160a01b0388168352609c90915260409091208054919250829184908110611d7b57611d7b6126f9565b5f918252602080832090910192909255918252609d9052604090208190555b6001600160a01b0384165f908152609c60205260409020805480611dc057611dc0612940565b600190038181905f5260205f20015f9055905550505050565b6001600160a01b039091165f908152609c602081815260408084208054868652609d84529185208290559282526001810183559183529091200155565b6001600160a01b038216611e28575f5ffd5b5f818152606660205260409020546001600160a01b031615611e48575f5ffd5b5f81815260666020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260689091529020611e8690611f36565b60405181906001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611ecb8282611f69565b611ed58282611cdd565b5f818152609d602052604081205561063f8161200b565b5f818152606760205260409020546001600160a01b03161561053a575f90815260676020526040902080546001600160a01b0319169055565b8054611f32906001611f51565b9055565b6001815f015f828254611f4991906126e6565b909155505050565b5f82821115611f5e575f5ffd5b5f610d9c83856128ae565b6001600160a01b038216611f7c82610a00565b6001600160a01b031614611f8e575f5ffd5b611f9781611eec565b6001600160a01b0382165f908152606860205260409020611fb790611f25565b5f8181526066602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b609e545f9061201b906001611f51565b5f838152609f6020526040812054609e8054939450909284908110612042576120426126f9565b905f5260205f200154905080609e8381548110612061576120616126f9565b5f918252602080832090910192909255828152609f90915260409020829055609e80548061209157612091612940565b600190038181905f5260205f20015f905590555f609f5f8681526020019081526020015f208190555050505050565b6001600160e01b03198116811461053a575f5ffd5b5f602082840312156120e5575f5ffd5b81356107cf816120c0565b5f60208284031215612100575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6107cf6020830184612107565b80356001600160a01b038116811461215d575f5ffd5b919050565b5f5f60408385031215612173575f5ffd5b61217c83612147565b946020939093013593505050565b5f5f6040838503121561219b575f5ffd5b82359150610a3f60208401612147565b5f602082840312156121bb575f5ffd5b6107cf82612147565b5f5f5f606084860312156121d6575f5ffd5b6121df84612147565b92506121ed60208501612147565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561223a5761223a6121fe565b604052919050565b5f6001600160401b0382111561225a5761225a6121fe565b5060051b60200190565b5f82601f830112612273575f5ffd5b813561228661228182612242565b612212565b8082825260208201915060208360051b8601019250858311156122a7575f5ffd5b602085015b838110156122cb576122bd81612147565b8352602092830192016122ac565b5095945050505050565b5f5f604083850312156122e6575f5ffd5b8235915060208301356001600160401b03811115612302575f5ffd5b61230e85828601612264565b9150509250929050565b5f5f6001600160401b03841115612331576123316121fe565b50601f8301601f191660200161234681612212565b91505082815283838301111561235a575f5ffd5b828260208301375f602084830101529392505050565b5f82601f83011261237f575f5ffd5b6107cf83833560208501612318565b5f6020828403121561239e575f5ffd5b81356001600160401b038111156123b3575f5ffd5b610d9c84828501612370565b5f5f5f5f608085870312156123d2575f5ffd5b84356001600160401b038111156123e7575f5ffd5b6123f387828801612370565b94505060208501356001600160401b0381111561240e575f5ffd5b61241a87828801612370565b93505060408501356001600160401b03811115612435575f5ffd5b61244187828801612370565b92505060608501356001600160401b0381111561245c575f5ffd5b61246887828801612264565b91505092959194509250565b5f5f60408385031215612485575f5ffd5b61248e83612147565b9150602083013580151581146124a2575f5ffd5b809150509250929050565b5f5f5f5f608085870312156124c0575f5ffd5b6124c985612147565b93506124d760208601612147565b92506040850135915060608501356001600160401b038111156124f8575f5ffd5b8501601f81018713612508575f5ffd5b61246887823560208401612318565b5f5f5f60608486031215612529575f5ffd5b833592506020840135915061254060408501612147565b90509250925092565b5f5f6040838503121561255a575f5ffd5b61256383612147565b9150610a3f60208401612147565b5f5f60408385031215612582575f5ffd5b82356001600160401b03811115612597575f5ffd5b8301601f810185136125a7575f5ffd5b80356125b561228182612242565b8082825260208201915060208360051b8501019250878311156125d6575f5ffd5b6020840193505b828410156125f85783358252602093840193909101906125dd565b9450610a3f9250505060208401612147565b600181811c9082168061261e57607f821691505b60208210810361263c57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526012908201527110dbdb9d1c9858dd081a5cc814185d5cd95960721b604082015260600190565b60208082526013908201527229b2b73232b91034b9903737ba1020b236b4b760691b604082015260600190565b6020808252601a908201527f53656e646572206973206e6f74204576656e74204d696e746572000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106e0576106e06126d2565b634e487b7160e01b5f52603260045260245ffd5b601f8211156106cf57828211156106cf57805f5260205f20601f840160051c602085101561273857505f5b90810190601f840160051c035f5b8181101561275b575f83820155600101612746565b505050505050565b81516001600160401b0381111561277c5761277c6121fe565b6127908161278a845461260a565b8461270d565b6020601f8211600181146127c2575f83156127ab5750848201515b5f19600385901b1c1916600184901b17845561281a565b5f84815260208120601f198516915b828110156127f157878501518255602094850194600190920191016127d1565b508482101561280e57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b5f60018201612880576128806126d2565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f826128a9576128a9612887565b500490565b818103818111156106e0576106e06126d2565b5f826128cf576128cf612887565b500690565b5f816128e2576128e26126d2565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061291b90830184612107565b9695505050505050565b5f60208284031215612935575f5ffd5b81516107cf816120c0565b634e487b7160e01b5f52603160045260245ffd