solc-0.8.36-doubleshift20 0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d via-ir

9844 bytes

60806040526004361015610011575f80fd5b5f3560e01c8063018a2c371461026457806301ffc9a71461025f57806306fdde031461025a578063081812fc14610255578063095ea7b314610250578063109695231461024b57806318160ddd1461024657806318e20a381461024157806323b872dd1461023c5780632f745c591461023757806334918dfd146102325780633ccfd60b1461022d57806342842e0e146102285780634f6ccce71461022357806355f804b31461021e578063571dff3b14610219578063607e20e3146102145780636352211e1461020f5780636c0360eb1461020a57806370a0823114610205578063715018a6146102005780637a3f451e146101fb5780637d17fcbe146101f65780638da5cb5b146101f157806395d89b41146101ec578063a22cb465146101e7578063a723533e146101e2578063b0f67427146101dd578063b88d4fde146101d8578063bb8a16bd146101d3578063c87b56dd146101ce578063cb774d47146101c9578063e36d6498146101c4578063e985e9c5146101bf578063e9866550146101ba578063eb8d2444146101b55763f2fde38b146101b0575f80fd5b611413565b6113f1565b611329565b6112cd565b6112b0565b611293565b611260565b611243565b6111e3565b61118d565b6110ce565b610ff1565b610f4c565b610f24565b610eed565b610ecb565b610e6f565b610dcf565b610d2a565b610d0c565b610c67565b610aac565b6109b7565b61092b565b610902565b6108b2565b610876565b6107c8565b61079f565b610748565b61072b565b61062a565b610456565b6103fa565b610320565b6102a8565b346102925760203660031901126102925760043561028d60018060a01b03600a541633146114fb565b601055005b5f80fd5b6001600160e01b031981160361029257565b34610292576020366003190112610292576004356102c581610296565b63ffffffff60e01b165f525f602052602060ff60405f2054166040519015158152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602061031d9281815201906102e8565b90565b34610292575f366003190112610292576040515f60065461034081610ada565b80845290600181169081156103d65750600114610378575b610374836103688185038261057a565b6040519182918261030c565b0390f35b60065f9081527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f939250905b8082106103bc57509091508101602001610368610358565b9192600181602092548385880101520191019092916103a4565b60ff191660208086019190915291151560051b840190910191506103689050610358565b34610292576020366003190112610292576020610418600435611546565b6040516001600160a01b039091168152f35b600435906001600160a01b038216820361029257565b602435906001600160a01b038216820361029257565b346102925760403660031901126102925761046f61042a565b60243561047b81611787565b916001600160a01b0380841690821681146104f6576104b0936104ab91339081149182156104b2575b50506115d4565b611bba565b005b6001600160a01b03165f9081526005602052604090206104ef92506104e891905b9060018060a01b03165f5260205260405f2090565b5460ff1690565b5f806104a4565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761057557604052565b610545565b90601f8019910116810190811067ffffffffffffffff82111761057557604052565b67ffffffffffffffff811161057557601f01601f191660200190565b9291926105c48261059c565b916105d2604051938461057a565b829481845281830111610292578281602093845f960137010152565b6020600319820112610292576004359067ffffffffffffffff821161029257806023830112156102925781602461031d936004013591016105b8565b3461029257610638366105ee565b61064d60018060a01b03600a541633146114fb565b805167ffffffffffffffff8111610575576106728161066d600b54610ada565b611663565b602091601f82116001146106b0576106a0925f91836106a5575b50508160011b915f199060031b1c19161790565b600b55005b015190505f8061068c565b600b5f52601f198216927f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9915f5b858110610713575083600195106106fb575b505050811b01600b55005b01515f1960f88460031b161c191690555f80806106f0565b919260206001819286850151815501940192016106de565b34610292575f366003190112610292576020600254604051908152f35b34610292575f366003190112610292576020601054604051908152f35b6060906003190112610292576004356001600160a01b038116810361029257906024356001600160a01b0381168103610292579060443590565b34610292576104b06107b036610765565b916107c36107be8433611c21565b611721565b611d5e565b34610292576040366003190112610292576107e161042a565b6024359060018060a01b03165f52600160205260405f208181541115610826576103749161080e91612287565b90549060031b1c604051918291829190602083019252565b60405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608490fd5b34610292575f3660031901126102925761089b60018060a01b03600a541633146114fb565b600f5460ff80821615169060ff191617600f555f80f35b34610292575f366003190112610292576108d760018060a01b03600a541633146114fb565b5f808080478181156108f9575b3390f1156108ee57005b6040513d5f823e3d90fd5b506108fc6108e4565b34610292576104b061091336610765565b906040519261092360208561057a565b5f84526119fa565b3461029257602036600319011261029257600435806002541115610967576109556103749161229c565b50546040519081529081906020820190565b60405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608490fd5b34610292576109c5366105ee565b6109da60018060a01b03600a541633146114fb565b805167ffffffffffffffff8111610575576109ff816109fa600954610ada565b6116c2565b602091601f8211600114610a3157610a2c925f91836106a55750508160011b915f199060031b1c19161790565b600955005b60095f52601f198216927f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af915f5b858110610a9457508360019510610a7c575b505050811b01600955005b01515f1960f88460031b161c191690555f8080610a71565b91926020600181928685015181550194019201610a5f565b34610292575f36600319011261029257602060405160148152f35b634e487b7160e01b5f525f60045260245ffd5b90600182811c92168015610b08575b6020831014610af457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610ae9565b604051905f8260095491610b2583610ada565b8083529260018116908115610baa5750600114610b4b575b610b499250038361057a565b565b5060095f90815290917f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b818310610b8e575050906020610b4992820101610b3d565b6020919350806001915483858901015201910190918492610b76565b60209250610b4994915060ff191682840152151560051b820101610b3d565b9060405191825f825492610bdc84610ada565b8084529360018116908115610c455750600114610c01575b50610b499250038361057a565b90505f9291925260205f20905f915b818310610c29575050906020610b49928201015f610bf4565b6020919350806001915483858901015201910190918492610c10565b905060209250610b4994915060ff191682840152151560051b8201015f610bf4565b34610292575f366003190112610292576040515f600b54610c8781610ada565b80845290600181169081156103d65750600114610cae57610374836103688185038261057a565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610cf257509091508101602001610368610358565b919260018160209254838588010152019101909291610cda565b34610292576020366003190112610292576020610418600435611787565b34610292575f366003190112610292576040515f600954610d4a81610ada565b80845290600181169081156103d65750600114610d7157610374836103688185038261057a565b60095f9081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af939250905b808210610db557509091508101602001610368610358565b919260018160209254838588010152019101909291610d9d565b34610292576020366003190112610292576001600160a01b03610df061042a565b168015610e17575f52600160205261037460405f2054604051918291829190602083019252565b60405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608490fd5b34610292575f36600319011261029257600a545f6001600160a01b038216610e983382146114fb565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36001600160a01b031916600a55005b34610292575f36600319011261029257602060405167011c37937e0800008152f35b34610292575f36600319011261029257610f1260018060a01b03600a541633146114fb565b610f1e600d5415611833565b43600c55005b34610292575f36600319011261029257600a546040516001600160a01b039091168152602090f35b34610292575f366003190112610292576040515f600754610f6c81610ada565b80845290600181169081156103d65750600114610f9357610374836103688185038261057a565b60075f9081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688939250905b808210610fd757509091508101602001610368610358565b919260018160209254838588010152019101909291610fbf565b346102925760403660031901126102925761100a61042a565b6024358015158103610292576001600160a01b0382169133831461108957335f90815260056020526040902061105791839161104691906104d3565b9060ff801983541691151516179055565b604051901515815233907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190602090a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b6020366003190112610292576004356110f16110ec600f5460ff1690565b61187f565b6110fe60148211156118cb565b61111761110d82600254611ecb565b600e541015611921565b61112b61112382611edf565b34101561197e565b5f5b81811061116657600c54158061114d575b61114457005b6104b043600c55565b50600254600e54148061113e575060105442101561113e565b600190600254600e54811061117d575b500161112d565b6111879033611f54565b5f611176565b34610292575f366003190112610292576111b260018060a01b03600a541633146114fb565b6002545f5b601e81106111c157005b808201908183116111de576111d860019233611f54565b016111b7565b6119ca565b34610292576080366003190112610292576111fc61042a565b611204610440565b906044356064359267ffffffffffffffff841161029257366023850112156102925761123d6104b09436906024816004013591016105b8565b926119fa565b34610292575f366003190112610292576020600e54604051908152f35b346102925760203660031901126102925761037461127f600435611a38565b6040519182916020835260208301906102e8565b34610292575f366003190112610292576020600d54604051908152f35b34610292575f366003190112610292576020600c54604051908152f35b3461029257604036600319011261029257602060ff61131d6112ed61042a565b6112f5610440565b6001600160a01b039182165f9081526005865260408082209290931681526020919091522090565b54166040519015158152f35b34610292575f36600319011261029257611345600d5415611833565b600c5480156113ad5761135f61136491600e549040611b3b565b600d55565b60ff611372600c5443612219565b1161138f575b600d54801561138357005b61135f6104b091611e71565b6113a861135f61139e43611b59565b40600e5490611b3b565b611378565b606460405162461bcd60e51b815260206004820152602060248201527f5374617274696e6720696e64657820626c6f636b206d757374206265207365746044820152fd5b34610292575f36600319011261029257602060ff600f54166040519015158152f35b346102925760203660031901126102925761142c61042a565b600a54906114446001600160a01b03831633146114fb565b6001600160a01b03811680156114a7576104b0926001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360018060a01b03166bffffffffffffffffffffffff60a01b600a541617600a55565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b1561150257565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b61155b815f52600360205260405f2054151590565b1561157a575f908152600460205260409020546001600160a01b031690565b60405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608490fd5b156115db57565b60405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608490fd5b9161165f9183549060031b91821b915f19901b19161790565b9055565b90601f8211611670575050565b80821161167b575050565b600b5f5260205f206020601f830160051c92106116ba575b81601f9101920160051c03905f5b8281106116ad57505050565b5f828201556001016116a1565b5f9150611693565b90601f82116116cf575050565b8082116116da575050565b60095f5260205f206020601f830160051c9210611719575b81601f9101920160051c03905f5b82811061170c57505050565b5f82820155600101611700565b5f91506116f2565b1561172857565b60405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b6064820152608490fd5b6040519061179660608361057a565b602982527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460208301526832b73a103a37b5b2b760b91b60408301525f52600360205260405f205490811561180b57505f1981019081116111de576117fa9061229c565b50600101546001600160a01b031690565b60405162461bcd60e51b81526020600482015290819061182f9060248301906102e8565b0390fd5b1561183a57565b60405162461bcd60e51b815260206004820152601d60248201527f5374617274696e6720696e64657820697320616c7265616479207365740000006044820152606490fd5b1561188657565b60405162461bcd60e51b815260206004820152601f60248201527f53616c65206d7573742062652061637469766520746f206d696e7420417065006044820152606490fd5b156118d257565b60405162461bcd60e51b815260206004820152602160248201527f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d6044820152606560f81b6064820152608490fd5b1561192857565b60405162461bcd60e51b815260206004820152602860248201527f507572636861736520776f756c6420657863656564206d617820737570706c79604482015267206f66204170657360c01b6064820152608490fd5b1561198557565b60405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b60300190816030116111de57565b90600182018092116111de57565b91610b499391611a2193611a116107be8433611c21565b611a1c838383611d5e565b6123a9565b6120b6565b805191908290602001825e015f815290565b611a4d815f52600360205260405f2054151590565b15611ade57611a6c611a67825f52600860205260405f2090565b610bc9565b90611a75610b12565b91825115611ad8578051611abb5750611aa791611aad611a9761031d9361215e565b6040519485936020850190611a26565b90611a26565b03601f19810183528261057a565b61031d915091611aad611aa7936040519485936020850190611a26565b91505090565b60405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608490fd5b8115611b45570690565b634e487b7160e01b5f52601260045260245ffd5b5f198101919082116111de57565b5f81815260046020526040812080546001600160a01b03191690556001600160a01b03611b9383611787565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258280a4565b5f82815260046020526040902080546001600160a01b0319166001600160a01b0383811691909117909155611bee83611787565b6001600160a01b0390921691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4565b611c36825f52600360205260405f2054151590565b15611cac57611c4482611787565b6001600160a01b038281169082168114938415611c8e575b50508215611c6957505090565b6001600160a01b03165f90815260056020526040902061031d92506104e891906104d3565b611c9a91929450611546565b6001600160a01b031614915f80611c5c565b60405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608490fd5b15611d0d57565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b90611d6883611787565b6001600160a01b03838116929116829003611e1a57611df390611dc485611dbf60018060a01b03841696611d9d881515611d06565b611da683611b67565b6001600160a01b03165f90815260016020526040902090565b612420565b506001600160a01b0381165f908152600160205260409020611dec9086906124be565b6124be565b5084612272565b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608490fd5b60018101908181116111de578110611e865790565b60405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606490fd5b908101908181116111de578110611e865790565b8067011c37937e080000029067011c37937e08000082048082036111de5703611f055790565b60405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608490fd5b90604051611f6360208261057a565b5f81526001600160a01b03831691821561203257611f8c815f52600360205260405f2054151590565b611fed578381611a2194611fb782611de7610b499960018060a01b03165f52600160205260405f2090565b50611fc28383612272565b505f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4612336565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b60207131b2b4bb32b91034b6b83632b6b2b73a32b960711b917f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581520152565b156120bd57565b60405162461bcd60e51b815260206004820152603260248201526084906120e660448201612076565bfd5b5f1981146111de5760010190565b906121008261059c565b61210d604051918261057a565b828152809261211e601f199161059c565b0190602036910137565b80156111de575f190190565b634e487b7160e01b5f52603260045260245ffd5b908151811015612159570160200190565b612134565b9081156121f8575f82805b6121dd575061218061217a826120f6565b91611b59565b92805b61218c57509150565b6121d7906121b86121a86121a2600a84066119de565b60ff1690565b60f81b6001600160f81b03191690565b946121cf6121c582612128565b965f1a9185612148565b53600a900490565b80612183565b906121ea6121f2916120e8565b91600a900490565b80612169565b905060405161220860408261057a565b60018152600360fc1b602082015290565b9081811161222d5781039081116111de5790565b60405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606490fd5b61031d916001600160a01b0316906002612528565b8054821015612159575f5260205f2001905f90565b6002548110156121595760025f5260205f209060011b01905f90565b8054821015612159575f5260205f209060011b01905f90565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261031d929101906102e8565b6040519061231160608361057a565b60328252610b4960208301612076565b90816020910312610292575161031d81610296565b9091813b156123a15761236761237593611aad604051938492630a85bd0160e11b60208501525f33602486016122d1565b61236f612302565b916125c4565b8051630a85bd0160e11b916001600160e01b03199161239c91602091810182019101612321565b161490565b505050600190565b92919091823b156123dc5761237593611aad61236792604051948593630a85bd0160e11b602086015233602486016122d1565b50505050600190565b8054801561240c575f1901906123fb8282612287565b8154905f199060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b906001820190805f528160205260405f2054918215155f146124b6575f1983019283116111de5783545f1981019081116111de57846124b09461249d61248e61246d6124a3955f9a612287565b90549060031b1c92612489846124838388612287565b90611646565b6119ec565b9185905f5260205260405f2090565b556123e5565b905f5260205260405f2090565b55600190565b505050505f90565b6001810190825f528160205260405f2054155f14612521578054600160401b8110156105755761250e6124f8826001879401855584612287565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b5050505f90565b91906001830192815f528360205260405f205480155f146125a1575060405161255081610559565b828152602081019384528154600160401b8110156105755780600161257892018455836122b8565b91909161259c576124b094600191518355519101555492905f5260205260405f2090565b610ac7565b92935090505f1982019182116111de576001916125bd916122b8565b5001555f90565b9190823b15612613575f8161031d948260208195519301915af13d1561260b573d906125ef8261059c565b916125fd604051938461057a565b82523d5f602084013e612658565b606090612658565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b90919015612664575090565b81511561180b5750805190602001fd