solc-0.8.36-doubleshift20 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized

22414 bytes

608060405234801561000f575f5ffd5b50600436106103d5575f3560e01c80639f9b199011610200578063cc0e1c1c1161011f578063e840427d116100b4578063f701f06e11610084578063f701f06e14610cc5578063f8447aaf14610d95578063f899860514610da8578063f91ebd5214610dc2578063fce56a0b14610dca575f5ffd5b8063e840427d14610aca578063eac8f5b814610add578063efdba7c014610c9f578063f51f1a3514610cb2575f5ffd5b8063d6abe642116100ef578063d6abe6421461097f578063de079b5714610992578063de31ea9f146109ef578063e5c9274514610a8b575f5ffd5b8063cc0e1c1c1461091b578063ceb233b31461092e578063d3c6a11d14610941578063d5d15a1114610954575f5ffd5b8063b33454e511610195578063c04d164e11610165578063c04d164e1461088e578063c25d82fe146108a1578063c435e928146108b4578063c4d66de814610908575f5ffd5b8063b33454e51461083f578063b5f460c814610860578063be10528014610873578063bf7e214f14610886575f5ffd5b8063a436458d116101d0578063a436458d146107da578063a467cc59146107ed578063aab9eb0714610800578063b0745f2b14610813575f5ffd5b80639f9b199014610776578063a0aead4d1461079e578063a0b3d9d8146107a5578063a2763d29146107c7575f5ffd5b80633a445c4e116102f75780637658c6441161028c57806383e4bcb71161025c57806383e4bcb71461070957806387a7dc771461071c5780638accc4a31461072f5780638fb36037146107425780639c7ee64f14610763575f5ffd5b80637658c644146106a5578063771602f7146106d05780637a9e5e4b146106e357806380c099f4146106f6575f5ffd5b806358a54078116102c757806358a540781461062e5780635e39616d146106415780635ff1c482146106545780637333a3b414610692575f5ffd5b80633a445c4e146105c25780633c9a9ee5146105d5578063403d7778146105e857806341a009eb146105fb575f5ffd5b806321a3bebc1161036d5780632a5b38031161033d5780632a5b38031461053d5780633369706614610550578063341f7dcf1461056e5780633992163714610581575f5ffd5b806321a3bebc146104c3578063228e731f1461050457806324ba667f1461051757806324e4c1af1461052a575f5ffd5b8063132a8bea116103a8578063132a8bea1461044a578063152ee0d3146104755780631901057d1461049d5780631e83287e146104b0575f5ffd5b8063033a0695146103d9578063066dd830146103ff5780630752c44c146104145780630c90e7fe14610427575b5f5ffd5b6103ec6103e7366004614ccc565b610f0b565b6040519081526020015b60405180910390f35b61041261040d366004614ce3565b610f6f565b005b6103ec610422366004614ccc565b6110ce565b61043a610435366004614d19565b6110f5565b60405190151581526020016103f6565b61045d610458366004614ce3565b611125565b6040516001600160a01b0390911681526020016103f6565b610488610483366004614ccc565b611145565b604080519283526020830191909152016103f6565b61043a6104ab366004614d32565b61117f565b6103ec6104be366004614d9a565b611196565b6103ec6104d1366004614d32565b5f9182526002602090815260408084206001600160a01b039390931684529190529020600301546001600160c81b031690565b6103ec610512366004614ce3565b611806565b6103ec610525366004614ccc565b61181d565b610412610538366004614e22565b611833565b6103ec61054b366004614e99565b611beb565b61055a62ffffff81565b60405162ffffff90911681526020016103f6565b61041261057c366004614ecc565b611e1b565b61048861058f366004614ccc565b5f9081526001602052604090206003810154600290910154600160781b9091046001600160781b03169160189190910b90565b6103ec6105d0366004614ce3565b611edc565b6104886105e3366004614d32565b611ef3565b6103ec6105f6366004614ccc565b611f40565b6103ec610609366004614ccc565b5f9081526001602081905260409091200154600160781b90046001600160781b031690565b6103ec61063c366004614ccc565b611f7d565b6103ec61064f366004614ce3565b611f93565b6103ec610662366004614d32565b5f9182526002602090815260408084206001600160a01b039390931684529190529020546001600160781b031690565b6104126106a0366004614ce3565b611faa565b6103ec6106b3366004614ccc565b5f908152600160205260409020600301546001600160781b031690565b6103ec6106de366004614ce3565b612162565b6104126106f1366004614d19565b612381565b6103ec610704366004614ce3565b612401565b610412610717366004614ce3565b612418565b61041261072a366004614eee565b6124c1565b6103ec61073d366004614ccc565b61255a565b61074a61257c565b6040516001600160e01b031990911681526020016103f6565b6103ec610771366004614d32565b6125b2565b6103ec610784366004614ccc565b5f908152600160205260409020546001600160781b031690565b5f546103ec565b6107b164ffffffffff81565b60405164ffffffffff90911681526020016103f6565b6104126107d5366004614f17565b6125f4565b6103ec6107e8366004614eee565b612670565b6104126107fb366004614f5b565b612808565b6103ec61080e366004614ce3565b6128c4565b6103ec610821366004614ccc565b5f90815260016020819052604090912001546001600160781b031690565b610847600181565b60405167ffffffffffffffff90911681526020016103f6565b6103ec61086e366004614ccc565b6128db565b610488610881366004614eee565b6128f1565b61045d612b21565b6103ec61089c366004614ce3565b612b3c565b6104126108af366004614f17565b612b53565b6104886108c2366004614d32565b5f9182526002602090815260408084206001600160a01b0393909316845291905290208054600190910154600160781b9091046001600160781b03169160189190910b90565b610412610916366004614d19565b612bae565b610488610929366004614e99565b612ca3565b6103ec61093c366004614ce3565b612eab565b6103ec61094f366004614d32565b612ec2565b6103ec610962366004614ccc565b5f908152600160205260409020600901546001600160c81b031690565b6103ec61098d366004614d19565b612efd565b6109ce6109a0366004614ccc565b5f908152600160205260409020600581015490546001600160a01b0390911691600160f01b90910460ff1690565b604080516001600160a01b03909316835260ff9091166020830152016103f6565b610a7e6109fd366004614ccc565b604080516080810182525f808252602082018190529181018290526060810191909152505f90815260016020908152604091829020825160808101845260088201546001600160a01b0390811682526003830154600160f01b900461ffff169382019390935260068201548316938101939093526007015416606082015290565b6040516103f69190614fa3565b6103ec610a99366004614d32565b5f9182526002602081815260408085206001600160a01b03949094168552929052912001546001600160781b031690565b6103ec610ad8366004614eee565b612f3f565b610c92610aeb366004614ccc565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546001600160781b038082168352600160781b808304821695840195909552600160f01b9182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046001600160601b0316610140830152600160d81b90920464ffffffffff1661016082015260058201546001600160a01b03908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e08201526009909101546001600160c81b031661020082015290565b6040516103f69190614fe0565b6103ec610cad366004614d32565b6130c3565b6103ec610cc0366004614ccc565b613109565b610d88610cd3366004614d32565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8281526002602081815260408084206001600160a01b0386168552825292839020835160a08101855292015464ffffffffff600160781b820481168452600160a01b8204169183019190915262ffffff600160c81b8204169282019290925260ff600160e01b8304811615156060830152600160e81b9092049091161515608082015292915050565b6040516103f691906151a7565b6103ec610da3366004614ce3565b613145565b610db0601281565b60405160ff90911681526020016103f6565b610db0600681565b610efe610dd8366004614d32565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f8281526002602081815260408084206001600160a01b038616855282529283902083516101408101855281546001600160781b038082168352600160781b91829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff93820484166080840152600160a01b820490931660a083015262ffffff600160c81b82041660c083015260ff600160e01b82048116151560e0840152600160e81b9091041615156101008201526003909101546001600160c81b031661012082015292915050565b6040516103f691906151f7565b5f610f18335b5f3661315c565b5f548210610f395760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610f4f8161325c565b5f610f5a8285613331565b9050610f6682856134a9565b9150505b919050565b5f548210610f905760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610fa68161325c565b610fb1813384613552565b80546001600160781b03168080841115610fea5760405163c730333f60e01b8152600401610fe191815260200190565b60405180910390fd5b50610ffb8382036135a7565b6135a7565b82546001600160781b0319166001600160781b039190911617825561101f836135a7565b600183018054600f90611043908490600160781b90046001600160781b03166152f7565b92506101000a8154816001600160781b03021916908360881b60881c021790555061107784836134a990919063ffffffff16565b6005820154611090906001600160a01b031633856135de565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f8181526001602052604081206110ee6110e782613613565b82906136a7565b9392505050565b6001600160a01b039081165f81815260046020908152604080832054835260019091529020600501549091161490565b5f82815260036020526040812061113c90836136c6565b90505b92915050565b5f81815260016020526040812081908161115e82613613565b905061116a82826136d1565b61117483836136eb565b935093505050915091565b5f82815260036020526040812061113c9083613730565b5f6111a033610f11565b6001600160a01b038716158015906111c057506001600160a01b03851615155b80156111d457506001600160a01b03841615155b6111f15760405163e6c4247b60e01b815260040160405180910390fd5b60ff86166006118015906112095750601260ff871611155b6112265760405163e236476560e01b815260040160405180910390fd5b61122f876110f5565b1561124d5760405163603c058b60e01b815260040160405180910390fd5b5f8054818061125b83615316565b909155506001600160a01b03808a165f90815260046020819052604091829020849055905163a467cc5960e01b81529293509087169163a467cc59916112a79185918991899101615356565b5f604051808303815f87803b1580156112be575f5ffd5b505af11580156112d0573d5f5f3e3d5ffd5b5050604051637aff437760e11b8152600481018490525f6024820181905260448201819052606482018190526084820181905292506001600160a01b038816915063f5fe86ee9060a401602060405180830381865afa158015611335573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611359919061536f565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152909150676765c793fa10079d601b1b90429061012081016113c6846135a7565b6001600160781b031681526020016113dd85613751565b6001600160601b031681526020016113f483613784565b64ffffffffff1681526020018c60601b60601c81526020018960601b60601c81526020015f60601b60601c81526020018a60601b60601c81526020015f60381b60381c81525060015f8681526020019081526020015f205f820151815f015f6101000a8154816001600160781b03021916908360881b60881c02179055506020820151815f01600f6101000a8154816001600160781b03021916908360881b60881c02179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816001600160781b03021916908360881b60881c0217905550608082015181600101600f6101000a8154816001600160781b03021916908360881b60881c021790555060a0820151816002015f6101000a8154816001600160c81b03021916908360180b60381b60381c021790555060c0820151816003015f6101000a8154816001600160781b03021916908360881b60881c021790555060e082015181600301600f6101000a8154816001600160781b03021916908360881b60881c021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816001600160781b03021916908360881b60881c021790555061014082015181600401600f6101000a8154816001600160601b03021916908360a01b60a01c021790555061016082015181600401601b6101000a81548164ffffffffff021916908364ffffffffff160217905550610180820151816005015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101a0820151816006015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101c0820151816007015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101e0820151816008015f6101000a8154816001600160a01b03021916908360601b60601c0217905550610200820151816009015f6101000a8154816001600160c81b03021916908360381b60381c021790555090505061170f848a6137b5565b60405160ff8b1681526001600160a01b038c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080810182526001600160a01b03808c1682525f60208301819052908b16828401526060820152905185917fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974916117ad9190614fa3565b60405180910390a260408051838152602081018590525f81830152905185917fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350919081900360600190a250919998505050505050505050565b5f82815260016020526040812061113c90836137fb565b5f81815260016020526040812061113f9061380f565b61183c33610f11565b5f54841061185d5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8481526001602052604090206118738161325c565b6127106118866040860160208701615397565b61ffff1611156118a95760405163e15e46cb60e01b815260040160405180910390fd5b5f6118b76020860186614d19565b6001600160a01b0316148015906118e657505f6118da6060860160408701614d19565b6001600160a01b031614155b6119035760405163e6c4247b60e01b815260040160405180910390fd5b5f6119146080860160608701614d19565b6001600160a01b031614158061193c57506001810154600160781b90046001600160781b0316155b611959576040516391eaafa160e01b815260040160405180910390fd5b6119696040850160208601615397565b60038201805461ffff92909216600160f01b026001600160f01b0390921691909117905561199d6080850160608601614d19565b6007820180546001600160a01b0319166001600160a01b039283161790556008820154166119ce6020860186614d19565b6001600160a01b03828116911614611ab1576119ea8287613331565b506040805160a0810182525f808252602080830182905282840182905260608301828152608084018381528b845260028084528685206001600160a01b0389168087528186529786209091015460ff600160e01b8204811615159094529690945292909152600160e81b9093049092161515909152611a6a8783836138dc565b611a776020870187614d19565b6008840180546001600160a01b0319166001600160a01b0392909216919091179055611aaf87611aaa6020890189614d19565b6137b5565b505b60068201546001600160a01b0316611acf6060870160408801614d19565b6001600160a01b031614611b8257611aed6060860160408701614d19565b6006830180546001600160a01b0319166001600160a01b0392909216919091179055611b1f6060860160408701614d19565b60405163a467cc5960e01b81526001600160a01b039091169063a467cc5990611b5090899088908890600401615356565b5f604051808303815f87803b158015611b67575f5ffd5b505af1158015611b79573d5f5f3e3d5ffd5b50505050611ba1565b8215611ba157604051631c56bc9960e11b815260040160405180910390fd5b611bab82876134a9565b857fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b97486604051611bdb91906153b0565b60405180910390a2505050505050565b5f838152600160209081526040808320600283528184203385529092528220611c138261325c565b611c2382828787604001356139d7565b5f611c31610ff68488613ac8565b60038401805491925082915f90611c529084906001600160781b0316615417565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91611c8791859116615417565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611cb3838387613adc565b5f611cd38660400135676765c793fa10079d601b1b808204910615150190565b84549091505f908290611cf0908a906001600160781b0316615436565b611cfa9190615436565b60058601546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6b919061536f565b905080820382821015611d94576040516380561eeb60e01b8152600401610fe191815260200190565b50611d9e826135a7565b86546001600160781b0319166001600160781b0391909116178655611dc3868b6134a9565b60405133908b907f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b91290611dfd9088908d908f908a90615449565b60405180910390a35050506001600160781b03169695505050505050565b5f82815260016020908152604080832060028352818420338552909252909120611e448261325c565b6002810154600160e01b900460ff16611e7057604051637437d01960e11b815260040160405180910390fd5b604083013515611e935760405163a664e07560e01b815260040160405180910390fd5b611e9e828285613adc565b611ea882856134a9565b604051339085907f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c906110c090879061548c565b5f82815260016020526040812061113c9083613c34565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220829190611f288282613c48565b611f328383613c60565b9350935050505b9250929050565b5f818152600160205260408120600381015460028201546110ee91600160781b90046001600160781b03169060180b611f7884613613565b613c6e565b5f81815260036020526040812061113f90613c94565b5f82815260016020526040812061113c9083613c9d565b5f548210611fcb5760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020611fe18161325c565b611fec813384613552565b80545f906120049084906001600160781b0316615436565b60058301546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612051573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612075919061536f565b90508082038282101561209e576040516380561eeb60e01b8152600401610fe191815260200190565b506120a8826135a7565b83546001600160781b0319166001600160781b03919091161783556120cc846135a7565b600184018054600f906120f0908490600160781b90046001600160781b0316615417565b92506101000a8154816001600160781b03021916908360881b60881c021790555061212485846134a990919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f82815260016020908152604080832060028352818420338552909252822061218a8261325c565b612195828286613caa565b81545f906121ad9086906001600160781b0316615436565b60058401546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156121fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221e919061536f565b905080820382821015612247576040516380561eeb60e01b8152600401610fe191815260200190565b505f612256610ff68689613da4565b90506001600160781b03811661227f57604051636edcc52360e01b815260040160405180910390fd5b6001850180548291905f9061229e9084906001600160781b03166152f7565b82546101009290920a6001600160781b0381810219909316918316021790915560028601805484935090915f916122d7918591166152f7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612301836135a7565b85546001600160781b0319166001600160781b039190911617855561232685896134a9565b604080516001600160781b03831681526020810189905233918a917fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f30591015b60405180910390a36001600160781b0316979650505050505050565b3361238a612b21565b6001600160a01b038281169116146123bf5760405162d1953b60e31b81526001600160a01b0382166004820152602401610fe1565b6001600160a01b0382163b5f036123f4576040516361798f2f60e11b81526001600160a01b0383166004820152602401610fe1565b6123fd82613dc7565b5050565b5f82815260016020526040812061113c9083613e27565b5f8281526001602090815260408083206008810154600284528285206001600160a01b039091168086529352818420338552919093206124578461325c565b6124618186613e4a565b61246c818387613e96565b61247684876134a9565b6040518581526001600160a01b03841690339088907f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0906020015b60405180910390a4505050505050565b5f838152600160209081526040808320600283528184203385528084528285206001600160a01b0387168652935292206124fa8361325c565b61250683838388613f27565b612511828287613e96565b61251b83876134a9565b6040518581526001600160a01b03851690339088907f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0906020016124b1565b5f8181526001602052604081206110ee8361257483613613565b83919061404f565b5f51602061576e5f395f51905f5280545f9190600160a01b900460ff166125a3575f6125ac565b638fb3603760e01b5b91505090565b5f8281526002602081815260408084206001600160a01b0386168552825280842090920154858452600190915290822061113c916001600160781b0316614133565b6125fd33610f11565b5f54831061261e5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526003602052604090206126359083613730565b61265257604051630aa1b05f60e41b815260040160405180910390fd5b61266b8383612666368590038501856154e2565b6138dc565b505050565b5f8381526001602090815260408083206002835281842033855290925282206126988261325c565b6126a482828787614156565b81546001600160781b031680808711156126d45760405163c730333f60e01b8152600401610fe191815260200190565b505f6126e3610ff685896137fb565b60038501805491925082915f906127049084906001600160781b03166152f7565b82546101009290920a6001600160781b03818102199093169183160217909155845483925085915f91612739918591166152f7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612770610ff688846135a290919063ffffffff16565b84546001600160781b0319166001600160781b039190911617845561279584896134a9565b60058401546127ae906001600160a01b031687896135de565b604080516001600160781b03831681526020810189905233918a917fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc8517910160405180910390a36001600160781b0316979650505050505050565b61281133610f11565b5f5483106128325760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526001602052604090206128488161325c565b600681015460405163a467cc5960e01b81526001600160a01b039091169063a467cc599061287e90879087908790600401615356565b5f604051808303815f87803b158015612895575f5ffd5b505af11580156128a7573d5f5f3e3d5ffd5b505050506128be84826134a990919063ffffffff16565b50505050565b5f82815260016020526040812061113c9083613ac8565b5f81815260016020526040812061113f90613613565b5f806128fc33610f11565b5f858152600160209081526040808320600283528184203385528084528285206001600160a01b0389168652935292206129358361325c565b60038101546001600160c81b03165f676765c793fa10079d601b1b8083061515908304018910612965578161296e565b61296e896142b5565b905061297a84826142d1565b676765c793fa10079d601b1b8082049082061515015f61299d610ff6888461431d565b60018801805491925082915f906129be9084906001600160781b0316615417565b82546101009290920a6001600160781b0381810219909316918316021790915560028801805484935090915f916129f791859116615417565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612a2183614340565b6009880180545f90612a3d9084906001600160c81b031661557c565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612a6783614340565b6003860180545f90612a839084906001600160c81b031661557c565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612ab78c886134a990919063ffffffff16565b604080516001600160781b0383168152602081018590526001600160a01b038c169133918f917fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee910160405180910390a46001600160781b03169b909a5098505050505050505050565b5f51602061576e5f395f51905f52546001600160a01b031690565b5f82815260016020526040812061113c9083614133565b612b5c33610f11565b5f548310612b7d5760405163b77e1e0f60e01b815260040160405180910390fd5b6001600160a01b038216612ba45760405163e6c4247b60e01b815260040160405180910390fd5b6126528383614373565b60015f612bb96143e0565b8054909150600160401b900460ff1680612be15750805467ffffffffffffffff808416911610155b15612bff5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b1781556001600160a01b038316612c485760405163e6c4247b60e01b815260040160405180910390fd5b612c5183614408565b805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190612cce8261325c565b612cde828288886040013561441c565b5f612cec610ff68489613ac8565b60038401805491925082915f90612d0d9084906001600160781b0316615417565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91612d4291859116615417565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612d6e838388613adc565b60048301545f90604088013590612d92906001600160781b0390811690851661559b565b612d9c9190615436565b9050612da781614340565b6009850180545f90612dc39084906001600160c81b03166155b2565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612ded81614340565b6003840180545f90612e099084906001600160c81b03166155b2565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612e3d89856134a990919063ffffffff16565b60405133908a907f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf90612e759086908c9087906155d1565b60405180910390a36001600160781b0390911698676765c793fa10079d601b1b8083049206151591909101975095505050505050565b5f82815260016020526040812061113c9083613da4565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612ef482826144d7565b95945050505050565b5f612f07826110f5565b612f245760405163b77e1e0f60e01b815260040160405180910390fd5b506001600160a01b03165f9081526004602052604090205490565b5f838152600160209081526040808320600283528184203385529092528220612f678261325c565b612f72818686614502565b81546001600160781b03168080871115612fa25760405163c730333f60e01b8152600401610fe191815260200190565b505f612fb1610ff6858961431d565b60018501805491925082915f90612fd29084906001600160781b0316615417565b82546101009290920a6001600160781b0381810219909316918316021790915560028501805484935090915f9161300b91859116615417565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613042610ff688846135a290919063ffffffff16565b84546001600160781b0319166001600160781b039190911617845561306784896134a9565b6005840154613080906001600160a01b031687896135de565b604080516001600160781b03831681526020810189905233918a917f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b29101612365565b5f828152600160209081526040808320600283528184206001600160a01b038616855290925282206130f58282613c60565b6130ff8383613c48565b612ef49190615436565b5f81815260016020526040812061312961312282613613565b82906145a4565b81546110ee9190600160781b90046001600160781b0316615436565b5f82815260016020526040812061113c908361431d565b5f51602061576e5f395f51905f525f80613194613177612b21565b873061318660045f8a8c615610565b61318f91615637565b614683565b91509150816132545763ffffffff81161561323157825460ff60a01b1916600160a01b1783556131c2612b21565b604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee906131f39089908990899060040161566d565b5f604051808303815f87803b15801561320a575f5ffd5b505af115801561321c573d5f5f3e3d5ffd5b5050845460ff60a01b19168555506132549050565b60405162d1953b60e31b81526001600160a01b0387166004820152602401610fe1565b505050505050565b600481015442600160d81b90910464ffffffffff16036132795750565b5f61328382613613565b9050613292610ff683836145a4565b82548390600f906132b4908490600160781b90046001600160781b03166152f7565b92506101000a8154816001600160781b03021916908360881b60881c02179055506132de816135a7565b6004830180546001600160781b0319166001600160781b039290921691909117905561330942613784565b82600401601b6101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b81545f90600160781b90046001600160781b031681613353610ff68684613da4565b90506001600160781b0381165f0361336f575f9250505061113f565b60088501545f8581526002602081815260408084206001600160a01b039095168085529490915290912090810154600160e01b900460ff166133c457604051637437d01960e11b815260040160405180910390fd5b6001870180548491905f906133e39084906001600160781b03166152f7565b82546101009290920a6001600160781b0381810219909316918316021790915560028301805486935090915f9161341c918591166152f7565b82546101009290920a6001600160781b038181021990931691831602179091558854600160781b600160f01b0319168955604080519186168252602082018790526001600160a01b038516925088917fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c910160405180910390a350506001600160781b0316949350505050565b60048201546001600160781b03165f6134c384848461404f565b90506134ce81613751565b6004850180546bffffffffffffffffffffffff60781b1916600160781b6001600160601b0393909316830217905584546040805185815260208101859052929091046001600160781b03169082015283907fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f148833509060600160405180910390a250505050565b60078301546001600160a01b0383811691161461358257604051631e35bba360e11b815260040160405180910390fd5b5f811161266b5760405163162908e360e11b815260040160405180910390fd5b900390565b5f6001600160781b038211156135da576040516306dfcc6560e41b81526078600482015260248101839052604401610fe1565b5090565b6135eb8383836001614715565b61266b57604051635274afe760e01b81526001600160a01b0384166004820152602401610fe1565b60048101545f906001600160781b03811690600160d81b900464ffffffffff1642811480613669575060038401546001600160781b031615801561366957506003840154600160781b90046001600160781b0316155b15613675575092915050565b600484015461369f9061369890600160781b90046001600160601b031683614777565b83906147a4565b949350505050565b5f6136b283836136eb565b6136bc84846136d1565b61113c9190615436565b5f61113c83836147d2565b60038201545f9061113c906001600160781b0316836147a4565b600382015460028301545f9161113c9161371991600160781b90046001600160781b03169060180b85613c6e565b676765c793fa10079d601b1b808204910615150190565b6001600160a01b0381165f908152600183016020526040812054151561113c565b5f6001600160601b038211156135da576040516306dfcc6560e41b81526060600482015260248101839052604401610fe1565b5f64ffffffffff8211156135da576040516306dfcc6560e41b81526028600482015260248101839052604401610fe1565b6137bf8282614373565b6040805160a08101825264ffffffffff81525f602082018190529181018290526001606082015260808101919091526123fd90839083906138dc565b5f61113c61380884613613565b83906147f8565b5f5f61381a83613613565b6003840154600285015460098601549293505f9261385e926001600160781b0380821693600160781b909204169160189190910b906001600160c81b03168661483a565b905061386a84836145a4565b8454600160781b90046001600160781b0316676765c793fa10079d601b1b808406151590840401600187015487546138b5916001600160781b03600160781b909104811691166152f7565b6138c891906001600160781b0316615436565b6138d29190615691565b61369f9190615691565b5f8381526002602081815260408084206001600160a01b03871680865290835293819020855193810180549387015187840151606089015160808a015169ffffffffffffffffffff60781b19909716600160781b64ffffffffff998a160264ffffffffff60a01b191617600160a01b98909316979097029190911763ffffffff60c81b1916600160c81b62ffffff9092169190910260ff60e01b191617600160e01b951515959095029490941760ff60e81b1916600160e81b9315159390930292909217909255905190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e906110c09086906151a7565b5f8211806139e457505f81115b613a015760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff16613a2d57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff1615613a5a57604051639db9b35560e01b815260040160405180910390fd5b5f613a658585613c48565b90505f613a7286866144d7565b90508180851115613a99576040516325ecf23b60e11b8152600401610fe191815260200190565b508080841115613abf57604051636e43412360e11b8152600401610fe191815260200190565b50505050505050565b5f61113c613ad584613613565b8390614874565b6004830154600384015460028501546001600160781b0392831692613b12928492600160781b9091049091169060180b856148ae565b6002860180546001600160c81b0319166001600160c81b0392909216919091179055600385018054600160781b600160f01b031916600160781b6001600160781b0393841681029190911790915584546001860154613b7d9385939092049091169060180b856148ae565b6001850180546001600160c81b039092166001600160c81b031990921691909117905583546001600160781b03909116600160781b02600160781b600160f01b0319909116178355600283015462ffffff600160c81b909104811690811480613c1057508354613bfb906001600160781b031662ffffff831661493b565b8454600160781b90046001600160781b031611155b613c2d5760405163a664e07560e01b815260040160405180910390fd5b5050505050565b5f61113c613c4184613613565b8390614960565b80545f9061113c9084906001600160781b0316613c9d565b5f61113c61371984846144d7565b5f61369f83613c85613c80858861559b565b614986565b613c8f91906156a4565b6149b2565b5f61113f825490565b5f61113c61369884613613565b5f8111613cca5760405163162908e360e11b815260040160405180910390fd5b6002820154600160e01b900460ff16613cf657604051637437d01960e11b815260040160405180910390fd5b6002820154600160e81b900460ff1615613d2357604051639db9b35560e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613d82575060028301548290613d5c9086906001600160781b0316613e27565b613d669190615436565b8454600160f01b900460ff16600a0a613d7f908361559b565b10155b8190613c2d57604051636f1fe35760e11b8152600401610fe191815260200190565b5f61113c613db18461380f565b60018501548491906001600160781b03166149d7565b5f51602061576e5f395f51905f5280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f61113c613e348461380f565b60018501548491906001600160781b03166149fe565b6002820154600160e01b900460ff16613e7657604051637437d01960e11b815260040160405180910390fd5b5f81116123fd57604051636edcc52360e01b815260040160405180910390fd5b613e9f816135a7565b6002840180545f90613ebb9084906001600160781b0316615417565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613ee5816135a7565b6002830180545f90613f019084906001600160781b03166152f7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550505050565b6002830154600160e01b900460ff168015613f4d57506002820154600160e01b900460ff165b613f6a57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16158015613f9257506002820154600160e81b900460ff16155b613faf57604051639db9b35560e01b815260040160405180910390fd5b5f8111613fcf57604051636edcc52360e01b815260040160405180910390fd5b600282015464ffffffffff600160781b90910481169081148061402d575060028301546140119061400a9084906001600160781b0316615436565b8690613e27565b8554600160f01b900460ff16600a0a61402a908361559b565b10155b819061325457604051636f1fe35760e11b8152600401610fe191815260200190565b600683015483545f916001600160a01b03169063f5fe86ee9085906001600160781b031661407d88876136d1565b60098901546140a6906001600160c81b0316676765c793fa10079d601b1b808204910615150190565b60018a015460405160e087901b6001600160e01b031916815260048101959095526001600160781b03938416602486015260448501929092526064840152600160781b900416608482015260a401602060405180830381865afa15801561410f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369f919061536f565b5f61113c6141408461380f565b60018501548491906001600160781b0316614a26565b306001600160a01b0382160361417f5760405163e6c4247b60e01b815260040160405180910390fd5b5f821161419f5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166141cb57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16156141f857604051639db9b35560e01b815260040160405180910390fd5b6002830154600160a01b900464ffffffffff165f6142168686613c60565b6142208787613c48565b61422a9190615436565b905064ffffffffff82148061429357506003850154614263906001600160c81b0316676765c793fa10079d601b1b808204910615150190565b61426d8583615436565b6142779190615436565b8654600160f01b900460ff16600a0a614290908461559b565b10155b8290613abf576040516303ad30dd60e41b8152600401610fe191815260200190565b676765c793fa10079d601b1b8181029081048214610f6a575f5ffd5b6002820154600160e01b900460ff166142fd57604051637437d01960e11b815260040160405180910390fd5b5f81116123fd5760405163162908e360e11b815260040160405180910390fd5b5f61113c61432a8461380f565b60018501548491906001600160781b0316614a44565b5f6001600160c81b038211156135da576040516306dfcc6560e41b815260c8600482015260248101839052604401610fe1565b5f82815260036020526040902061438a9082614a62565b6143a7576040516304c9458360e01b815260040160405180910390fd5b6040516001600160a01b0382169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061113f565b614410614a76565b61441981614a9d565b50565b5f82118061442957505f81115b6144465760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661447257604051637437d01960e11b815260040160405180910390fd5b5f61447d8585613c48565b90505f61448a86866144d7565b905081808511156144b1576040516304ddd91f60e01b8152600401610fe191815260200190565b508080841115613abf576040516337f3f9b760e01b8152600401610fe191815260200190565b805460018201545f9161113c91600160781b9091046001600160781b03169060180b611f7886613613565b306001600160a01b0382160361452b5760405163e6c4247b60e01b815260040160405180910390fd5b5f821161454b5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661457757604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561266b57604051639db9b35560e01b815260040160405180910390fd5b60048201545f906001600160781b03168281036145c4575f91505061113f565b6003840154600160f01b900461ffff165f8190036145e6575f9250505061113f565b6003850154600286015460098701546001600160781b0380841693600160781b9004169160180b906001600160c81b03165f614625858585858d61483a565b90505f6146416001600160781b0380881690871686868c61483a565b90506146748761466e676765c793fa10079d601b1b80850481860615150190808704908706151501615691565b90614aae565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526001600160e01b0319821660648201525f908190819060840160408051601f19818403018152918152602080830180516001600160e01b031663b700961360e01b1781525f808052918290528351939450919290918a5afa1561470b575f516020805191945081901c150291505b5094509492505050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661476b57838315161561475f573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f42821115614784575f5ffd5b506301e1338042919091039190910204676765c793fa10079d601b1b0190565b5f815f19048311158215176147b7575f5ffd5b50676765c793fa10079d601b1b910281810491900615150190565b5f825f0182815481106147e7576147e76156c3565b905f5260205f200154905092915050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e0288411171561481d575f5ffd5b50676765c793fa10079d601b1b9190910281810491900615150190565b5f5f614847868685613c6e565b90508381614855858a61559b565b61485f9190615436565b6148699190615436565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715614899575f5ffd5b50676765c793fa10079d601b1b919091020490565b5f5f5f6148bc868689613c6e565b90505f6148ca878635614acb565b90505f6148db6020870135886156d7565b90505f6148e983838c613c6e565b9050836148fa604089013583615436565b146149185760405163a664e07560e01b815260040160405180910390fd5b614921836135a7565b61492a83614af7565b955095505050505094509492505050565b5f815f190483111582151761494e575f5ffd5b50612710910281810491900615150190565b5f815f1904831115821517614973575f5ffd5b50676765c793fa10079d601b1b91020490565b5f6001600160ff1b038211156135da5760405163123baf0360e11b815260048101839052602401610fe1565b5f5f8212156135da57604051635467221960e11b815260048101839052602401610fe1565b5f61369f6149e8620f424084615436565b6149f5620f424086615436565b8691905f614b26565b5f61369f614a0f620f424085615436565b614a1c620f424085615436565b8691906001614b26565b5f61369f614a37620f424085615436565b6149f5620f424085615436565b5f61369f614a55620f424084615436565b614a1c620f424086615436565b5f61113c836001600160a01b038416614b5e565b614a7e614baa565b614a9b57604051631afcd79f60e31b815260040160405180910390fd5b565b614aa5614a76565b61441981613dc7565b5f815f1904831115821517614ac1575f5ffd5b5061271091020490565b5f5f8212614ae457614add8284615436565b905061113f565b614aed826156fe565b61113c9084615691565b80601881900b8114610f6a5760405163327269a760e01b815260c8600482015260248101839052604401610fe1565b5f614b53614b3383614bc3565b8015614b4e57505f8480614b4957614b49615718565b868809115b151590565b6130ff868686614bef565b5f818152600183016020526040812054614ba357508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561113f565b505f61113f565b5f614bb36143e0565b54600160401b900460ff16919050565b5f6002826003811115614bd857614bd861572c565b614be29190615740565b60ff166001149050919050565b5f5f5f614bfc8686614c9f565b91509150815f03614c2057838181614c1657614c16615718565b04925050506110ee565b818411614c3757614c376003851502601118614cbb565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f60208284031215614cdc575f5ffd5b5035919050565b5f5f60408385031215614cf4575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114610f6a575f5ffd5b5f60208284031215614d29575f5ffd5b61113c82614d03565b5f5f60408385031215614d43575f5ffd5b82359150614d5360208401614d03565b90509250929050565b5f5f83601f840112614d6c575f5ffd5b50813567ffffffffffffffff811115614d83575f5ffd5b602083019150836020828501011115611f39575f5ffd5b5f5f5f5f5f5f60a08789031215614daf575f5ffd5b614db887614d03565b9550602087013560ff81168114614dcd575f5ffd5b9450614ddb60408801614d03565b9350614de960608801614d03565b9250608087013567ffffffffffffffff811115614e04575f5ffd5b614e1089828a01614d5c565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215614e36575f5ffd5b853594506080601f1982011215614e4b575f5ffd5b5060208501925060a085013567ffffffffffffffff811115614e6b575f5ffd5b614e7787828801614d5c565b95989497509550505050565b5f60608284031215614e93575f5ffd5b50919050565b5f5f5f60a08486031215614eab575f5ffd5b8335925060208401359150614ec38560408601614e83565b90509250925092565b5f5f60808385031215614edd575f5ffd5b82359150614d538460208501614e83565b5f5f5f60608486031215614f00575f5ffd5b8335925060208401359150614ec360408501614d03565b5f5f5f83850360e0811215614f2a575f5ffd5b84359350614f3a60208601614d03565b925060a0603f1982011215614f4d575f5ffd5b506040840190509250925092565b5f5f5f60408486031215614f6d575f5ffd5b83359250602084013567ffffffffffffffff811115614f8a575f5ffd5b614f9686828701614d5c565b9497909650939450505050565b81516001600160a01b03908116825260208084015161ffff1690830152604080840151821690830152606092830151169181019190915260800190565b81516001600160781b031681526102208101602083015161500c60208401826001600160781b03169052565b506040830151615021604084018260ff169052565b50606083015161503c60608401826001600160781b03169052565b50608083015161505760808401826001600160781b03169052565b5060a083015161506c60a084018260180b9052565b5060c083015161508760c08401826001600160781b03169052565b5060e08301516150a260e08401826001600160781b03169052565b506101008301516150ba61010084018261ffff169052565b506101208301516150d76101208401826001600160781b03169052565b506101408301516150f46101408401826001600160601b03169052565b5061016083015161510f61016084018264ffffffffff169052565b5061018083015161512c6101808401826001600160a01b03169052565b506101a08301516151496101a08401826001600160a01b03169052565b506101c08301516151666101c08401826001600160a01b03169052565b506101e08301516151836101e08401826001600160a01b03169052565b506102008301516151a06102008401826001600160c81b03169052565b5092915050565b5f60a08201905064ffffffffff835116825264ffffffffff602084015116602083015262ffffff604084015116604083015260608301511515606083015260808301511515608083015292915050565b81516001600160781b031681526101408101602083015161522360208401826001600160781b03169052565b506040830151615238604084018260180b9052565b50606083015161525360608401826001600160781b03169052565b50608083015161526c608084018264ffffffffff169052565b5060a083015161528560a084018264ffffffffff169052565b5060c083015161529c60c084018262ffffff169052565b5060e08301516152b060e084018215159052565b506101008301516152c661010084018215159052565b506101208301516151a06101208401826001600160c81b03169052565b634e487b7160e01b5f52601160045260245ffd5b6001600160781b03818116838216019081111561113f5761113f6152e3565b5f60018201615327576153276152e3565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f612ef460408301848661532e565b5f6020828403121561537f575f5ffd5b5051919050565b803561ffff81168114610f6a575f5ffd5b5f602082840312156153a7575f5ffd5b61113c82615386565b608081016001600160a01b036153c584614d03565b16825261ffff6153d760208501615386565b1660208301526001600160a01b036153f160408501614d03565b1660408301526001600160a01b0361540b60608501614d03565b16606083015292915050565b6001600160781b03828116828216039081111561113f5761113f6152e3565b8082018082111561113f5761113f6152e3565b6001600160781b038516815260c0810161547a60208301868035825260208082013590830152604090810135910152565b608082019390935260a0015292915050565b8135815260208083013590820152604080830135908201526060810161113f565b803564ffffffffff81168114610f6a575f5ffd5b803562ffffff81168114610f6a575f5ffd5b80358015158114610f6a575f5ffd5b5f60a08284031280156154f3575f5ffd5b5060405160a0810167ffffffffffffffff8111828210171561552357634e487b7160e01b5f52604160045260245ffd5b60405261552f836154ad565b815261553d602084016154ad565b602082015261554e604084016154c1565b604082015261555f606084016154d3565b6060820152615570608084016154d3565b60808201529392505050565b6001600160c81b03828116828216039081111561113f5761113f6152e3565b808202811582820484141761113f5761113f6152e3565b6001600160c81b03818116838216019081111561113f5761113f6152e3565b6001600160781b038416815260a0810161560260208301858035825260208082013590830152604090810135910152565b826080830152949350505050565b5f5f8585111561561e575f5ffd5b8386111561562a575f5ffd5b5050820193919092039150565b80356001600160e01b031981169060048410156151a0576001600160e01b031960049490940360031b84901b1690921692915050565b6001600160a01b03841681526040602082018190525f90612ef4908301848661532e565b8181038181111561113f5761113f6152e3565b8181035f8312801583831316838312821617156151a0576151a06152e3565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f8312801582168215821617156156f6576156f66152e3565b505092915050565b5f600160ff1b8201615712576157126152e3565b505f0390565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff83168061575e57634e487b7160e01b5f52601260045260245ffd5b8060ff8416069150509291505056fef3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00