solc-0.8.36-fakeopcode 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized
22450 bytes
608060405234801561000f575f5ffd5b50600436106103d5575f3560e01c80639f9b199011610200578063cc0e1c1c1161011f578063e840427d116100b4578063f701f06e11610084578063f701f06e14610cc5578063f8447aaf14610d95578063f899860514610da8578063f91ebd5214610dc2578063fce56a0b14610dca575f5ffd5b8063e840427d14610aca578063eac8f5b814610add578063efdba7c014610c9f578063f51f1a3514610cb2575f5ffd5b8063d6abe642116100ef578063d6abe6421461097f578063de079b5714610992578063de31ea9f146109ef578063e5c9274514610a8b575f5ffd5b8063cc0e1c1c1461091b578063ceb233b31461092e578063d3c6a11d14610941578063d5d15a1114610954575f5ffd5b8063b33454e511610195578063c04d164e11610165578063c04d164e1461088e578063c25d82fe146108a1578063c435e928146108b4578063c4d66de814610908575f5ffd5b8063b33454e51461083f578063b5f460c814610860578063be10528014610873578063bf7e214f14610886575f5ffd5b8063a436458d116101d0578063a436458d146107da578063a467cc59146107ed578063aab9eb0714610800578063b0745f2b14610813575f5ffd5b80639f9b199014610776578063a0aead4d1461079e578063a0b3d9d8146107a5578063a2763d29146107c7575f5ffd5b80633a445c4e116102f75780637658c6441161028c57806383e4bcb71161025c57806383e4bcb71461070957806387a7dc771461071c5780638accc4a31461072f5780638fb36037146107425780639c7ee64f14610763575f5ffd5b80637658c644146106a5578063771602f7146106d05780637a9e5e4b146106e357806380c099f4146106f6575f5ffd5b806358a54078116102c757806358a540781461062e5780635e39616d146106415780635ff1c482146106545780637333a3b414610692575f5ffd5b80633a445c4e146105c25780633c9a9ee5146105d5578063403d7778146105e857806341a009eb146105fb575f5ffd5b806321a3bebc1161036d5780632a5b38031161033d5780632a5b38031461053d5780633369706614610550578063341f7dcf1461056e5780633992163714610581575f5ffd5b806321a3bebc146104c3578063228e731f1461050457806324ba667f1461051757806324e4c1af1461052a575f5ffd5b8063132a8bea116103a8578063132a8bea1461044a578063152ee0d3146104755780631901057d1461049d5780631e83287e146104b0575f5ffd5b8063033a0695146103d9578063066dd830146103ff5780630752c44c146104145780630c90e7fe14610427575b5f5ffd5b6103ec6103e7366004614d00565b610f0b565b6040519081526020015b60405180910390f35b61041261040d366004614d17565b610f6f565b005b6103ec610422366004614d00565b6110ce565b61043a610435366004614d4d565b6110f5565b60405190151581526020016103f6565b61045d610458366004614d17565b611125565b6040516001600160a01b0390911681526020016103f6565b610488610483366004614d00565b611145565b604080519283526020830191909152016103f6565b61043a6104ab366004614d66565b61117f565b6103ec6104be366004614dce565b611196565b6103ec6104d1366004614d66565b5f9182526002602090815260408084206001600160a01b039390931684529190529020600301546001600160c81b031690565b6103ec610512366004614d17565b611806565b6103ec610525366004614d00565b61181d565b610412610538366004614e56565b611833565b6103ec61054b366004614ecd565b611beb565b61055a62ffffff81565b60405162ffffff90911681526020016103f6565b61041261057c366004614f00565b611e1b565b61048861058f366004614d00565b5f9081526001602052604090206003810154600290910154600160781b9091046001600160781b03169160189190910b90565b6103ec6105d0366004614d17565b611edc565b6104886105e3366004614d66565b611ef3565b6103ec6105f6366004614d00565b611f40565b6103ec610609366004614d00565b5f9081526001602081905260409091200154600160781b90046001600160781b031690565b6103ec61063c366004614d00565b611f7d565b6103ec61064f366004614d17565b611f93565b6103ec610662366004614d66565b5f9182526002602090815260408084206001600160a01b039390931684529190529020546001600160781b031690565b6104126106a0366004614d17565b611faa565b6103ec6106b3366004614d00565b5f908152600160205260409020600301546001600160781b031690565b6103ec6106de366004614d17565b612162565b6104126106f1366004614d4d565b61238e565b6103ec610704366004614d17565b61240e565b610412610717366004614d17565b612425565b61041261072a366004614f22565b6124ce565b6103ec61073d366004614d00565b612567565b61074a612589565b6040516001600160e01b031990911681526020016103f6565b6103ec610771366004614d66565b6125bf565b6103ec610784366004614d00565b5f908152600160205260409020546001600160781b031690565b5f546103ec565b6107b164ffffffffff81565b60405164ffffffffff90911681526020016103f6565b6104126107d5366004614f4b565b612601565b6103ec6107e8366004614f22565b61267d565b6104126107fb366004614f8f565b612815565b6103ec61080e366004614d17565b6128d1565b6103ec610821366004614d00565b5f90815260016020819052604090912001546001600160781b031690565b610847600181565b60405167ffffffffffffffff90911681526020016103f6565b6103ec61086e366004614d00565b6128e8565b610488610881366004614f22565b6128fe565b61045d612b3b565b6103ec61089c366004614d17565b612b56565b6104126108af366004614f4b565b612b6d565b6104886108c2366004614d66565b5f9182526002602090815260408084206001600160a01b0393909316845291905290208054600190910154600160781b9091046001600160781b03169160189190910b90565b610412610916366004614d4d565b612bc8565b610488610929366004614ecd565b612cbd565b6103ec61093c366004614d17565b612ec5565b6103ec61094f366004614d66565b612edc565b6103ec610962366004614d00565b5f908152600160205260409020600901546001600160c81b031690565b6103ec61098d366004614d4d565b612f17565b6109ce6109a0366004614d00565b5f908152600160205260409020600581015490546001600160a01b0390911691600160f01b90910460ff1690565b604080516001600160a01b03909316835260ff9091166020830152016103f6565b610a7e6109fd366004614d00565b604080516080810182525f808252602082018190529181018290526060810191909152505f90815260016020908152604091829020825160808101845260088201546001600160a01b0390811682526003830154600160f01b900461ffff169382019390935260068201548316938101939093526007015416606082015290565b6040516103f69190614fd7565b6103ec610a99366004614d66565b5f9182526002602081815260408085206001600160a01b03949094168552929052912001546001600160781b031690565b6103ec610ad8366004614f22565b612f59565b610c92610aeb366004614d00565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546001600160781b038082168352600160781b808304821695840195909552600160f01b9182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046001600160601b0316610140830152600160d81b90920464ffffffffff1661016082015260058201546001600160a01b03908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e08201526009909101546001600160c81b031661020082015290565b6040516103f69190615014565b6103ec610cad366004614d66565b6130ea565b6103ec610cc0366004614d00565b613130565b610d88610cd3366004614d66565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8281526002602081815260408084206001600160a01b0386168552825292839020835160a08101855292015464ffffffffff600160781b820481168452600160a01b8204169183019190915262ffffff600160c81b8204169282019290925260ff600160e01b8304811615156060830152600160e81b9092049091161515608082015292915050565b6040516103f691906151db565b6103ec610da3366004614d17565b61316c565b610db0601281565b60405160ff90911681526020016103f6565b610db0600681565b610efe610dd8366004614d66565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f8281526002602081815260408084206001600160a01b038616855282529283902083516101408101855281546001600160781b038082168352600160781b91829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff93820484166080840152600160a01b820490931660a083015262ffffff600160c81b82041660c083015260ff600160e01b82048116151560e0840152600160e81b9091041615156101008201526003909101546001600160c81b031661012082015292915050565b6040516103f6919061522b565b5f610f18335b5f36613183565b5f548210610f395760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610f4f81613283565b5f610f5a8285613358565b9050610f6682856134dd565b9150505b919050565b5f548210610f905760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610fa681613283565b610fb1813384613586565b80546001600160781b03168080841115610fea5760405163c730333f60e01b8152600401610fe191815260200190565b60405180910390fd5b50610ffb8382036135db565b6135db565b82546001600160781b0319166001600160781b039190911617825561101f836135db565b600183018054600f90611043908490600160781b90046001600160781b031661532b565b92506101000a8154816001600160781b03021916908360881b60881c021790555061107784836134dd90919063ffffffff16565b6005820154611090906001600160a01b03163385613612565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f8181526001602052604081206110ee6110e782613647565b82906136db565b9392505050565b6001600160a01b039081165f81815260046020908152604080832054835260019091529020600501549091161490565b5f82815260036020526040812061113c90836136fa565b90505b92915050565b5f81815260016020526040812081908161115e82613647565b905061116a8282613705565b611174838361371f565b935093505050915091565b5f82815260036020526040812061113c9083613764565b5f6111a033610f11565b6001600160a01b038716158015906111c057506001600160a01b03851615155b80156111d457506001600160a01b03841615155b6111f15760405163e6c4247b60e01b815260040160405180910390fd5b60ff86166006118015906112095750601260ff871611155b6112265760405163e236476560e01b815260040160405180910390fd5b61122f876110f5565b1561124d5760405163603c058b60e01b815260040160405180910390fd5b5f8054818061125b8361534a565b909155506001600160a01b03808a165f90815260046020819052604091829020849055905163a467cc5960e01b81529293509087169163a467cc59916112a7918591899189910161538a565b5f604051808303815f87803b1580156112be575f5ffd5b505af11580156112d0573d5f5f3e3d5ffd5b5050604051637aff437760e11b8152600481018490525f6024820181905260448201819052606482018190526084820181905292506001600160a01b038816915063f5fe86ee9060a401602060405180830381865afa158015611335573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135991906153a3565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152909150676765c793fa10079d601b1b90429061012081016113c6846135db565b6001600160781b031681526020016113dd85613785565b6001600160601b031681526020016113f4836137b8565b64ffffffffff1681526020018c60601b60601c81526020018960601b60601c81526020015f60601b60601c81526020018a60601b60601c81526020015f60381b60381c81525060015f8681526020019081526020015f205f820151815f015f6101000a8154816001600160781b03021916908360881b60881c02179055506020820151815f01600f6101000a8154816001600160781b03021916908360881b60881c02179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816001600160781b03021916908360881b60881c0217905550608082015181600101600f6101000a8154816001600160781b03021916908360881b60881c021790555060a0820151816002015f6101000a8154816001600160c81b03021916908360180b60381b60381c021790555060c0820151816003015f6101000a8154816001600160781b03021916908360881b60881c021790555060e082015181600301600f6101000a8154816001600160781b03021916908360881b60881c021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816001600160781b03021916908360881b60881c021790555061014082015181600401600f6101000a8154816001600160601b03021916908360a01b60a01c021790555061016082015181600401601b6101000a81548164ffffffffff021916908364ffffffffff160217905550610180820151816005015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101a0820151816006015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101c0820151816007015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101e0820151816008015f6101000a8154816001600160a01b03021916908360601b60601c0217905550610200820151816009015f6101000a8154816001600160c81b03021916908360381b60381c021790555090505061170f848a6137e9565b60405160ff8b1681526001600160a01b038c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080810182526001600160a01b03808c1682525f60208301819052908b16828401526060820152905185917fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974916117ad9190614fd7565b60405180910390a260408051838152602081018590525f81830152905185917fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350919081900360600190a250919998505050505050505050565b5f82815260016020526040812061113c908361382f565b5f81815260016020526040812061113f90613843565b61183c33610f11565b5f54841061185d5760405163b77e1e0f60e01b815260040160405180910390fd5b5f84815260016020526040902061187381613283565b61271061188660408601602087016153cb565b61ffff1611156118a95760405163e15e46cb60e01b815260040160405180910390fd5b5f6118b76020860186614d4d565b6001600160a01b0316148015906118e657505f6118da6060860160408701614d4d565b6001600160a01b031614155b6119035760405163e6c4247b60e01b815260040160405180910390fd5b5f6119146080860160608701614d4d565b6001600160a01b031614158061193c57506001810154600160781b90046001600160781b0316155b611959576040516391eaafa160e01b815260040160405180910390fd5b61196960408501602086016153cb565b60038201805461ffff92909216600160f01b026001600160f01b0390921691909117905561199d6080850160608601614d4d565b6007820180546001600160a01b0319166001600160a01b039283161790556008820154166119ce6020860186614d4d565b6001600160a01b03828116911614611ab1576119ea8287613358565b506040805160a0810182525f808252602080830182905282840182905260608301828152608084018381528b845260028084528685206001600160a01b0389168087528186529786209091015460ff600160e01b8204811615159094529690945292909152600160e81b9093049092161515909152611a6a878383613910565b611a776020870187614d4d565b6008840180546001600160a01b0319166001600160a01b0392909216919091179055611aaf87611aaa6020890189614d4d565b6137e9565b505b60068201546001600160a01b0316611acf6060870160408801614d4d565b6001600160a01b031614611b8257611aed6060860160408701614d4d565b6006830180546001600160a01b0319166001600160a01b0392909216919091179055611b1f6060860160408701614d4d565b60405163a467cc5960e01b81526001600160a01b039091169063a467cc5990611b509089908890889060040161538a565b5f604051808303815f87803b158015611b67575f5ffd5b505af1158015611b79573d5f5f3e3d5ffd5b50505050611ba1565b8215611ba157604051631c56bc9960e11b815260040160405180910390fd5b611bab82876134dd565b857fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b97486604051611bdb91906153e4565b60405180910390a2505050505050565b5f838152600160209081526040808320600283528184203385529092528220611c1382613283565b611c238282878760400135613a0b565b5f611c31610ff68488613afc565b60038401805491925082915f90611c529084906001600160781b0316615448565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91611c8791859116615448565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611cb3838387613b10565b5f611cd38660400135676765c793fa10079d601b1b808204910615150190565b84549091505f908290611cf0908a906001600160781b0316615467565b611cfa9190615467565b60058601546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6b91906153a3565b905080820382821015611d94576040516380561eeb60e01b8152600401610fe191815260200190565b50611d9e826135db565b86546001600160781b0319166001600160781b0391909116178655611dc3868b6134dd565b60405133908b907f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b91290611dfd9088908d908f908a9061547a565b60405180910390a35050506001600160781b03169695505050505050565b5f82815260016020908152604080832060028352818420338552909252909120611e4482613283565b6002810154600160e01b900460ff16611e7057604051637437d01960e11b815260040160405180910390fd5b604083013515611e935760405163a664e07560e01b815260040160405180910390fd5b611e9e828285613b10565b611ea882856134dd565b604051339085907f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c906110c09087906154bd565b5f82815260016020526040812061113c9083613c68565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220829190611f288282613c7c565b611f328383613c94565b9350935050505b9250929050565b5f818152600160205260408120600381015460028201546110ee91600160781b90046001600160781b03169060180b611f7884613647565b613ca2565b5f81815260036020526040812061113f90613cc8565b5f82815260016020526040812061113c9083613cd1565b5f548210611fcb5760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020611fe181613283565b611fec813384613586565b80545f906120049084906001600160781b0316615467565b60058301546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612051573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207591906153a3565b90508082038282101561209e576040516380561eeb60e01b8152600401610fe191815260200190565b506120a8826135db565b83546001600160781b0319166001600160781b03919091161783556120cc846135db565b600184018054600f906120f0908490600160781b90046001600160781b0316615448565b92506101000a8154816001600160781b03021916908360881b60881c021790555061212485846134dd90919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f82815260016020908152604080832060028352818420338552909252822061218a82613283565b612195828286613cde565b81545f906121ad9086906001600160781b0316615467565b60058401546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156121fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221e91906153a3565b905080820382821015612247576040516380561eeb60e01b8152600401610fe191815260200190565b505f612256610ff68689613dd8565b90506001600160781b03811661227f57604051636edcc52360e01b815260040160405180910390fd5b6001850180548291905f9061229e9084906001600160781b031661532b565b92506101000a8154816001600160781b03021916908360881b60881c021790555080846002015f8282829054906101000a90046001600160781b03166122e4919061532b565b92506101000a8154816001600160781b03021916908360881b60881c021790555061230e836135db565b85546001600160781b0319166001600160781b039190911617855561233385896134dd565b604080516001600160781b03831681526020810189905233918a917fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f30591015b60405180910390a36001600160781b0316979650505050505050565b33612397612b3b565b6001600160a01b038281169116146123cc5760405162d1953b60e31b81526001600160a01b0382166004820152602401610fe1565b6001600160a01b0382163b5f03612401576040516361798f2f60e11b81526001600160a01b0383166004820152602401610fe1565b61240a82613dfb565b5050565b5f82815260016020526040812061113c9083613e5b565b5f8281526001602090815260408083206008810154600284528285206001600160a01b0390911680865293528184203385529190932061246484613283565b61246e8186613e7e565b612479818387613eca565b61248384876134dd565b6040518581526001600160a01b03841690339088907f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0906020015b60405180910390a4505050505050565b5f838152600160209081526040808320600283528184203385528084528285206001600160a01b03871686529352922061250783613283565b61251383838388613f5b565b61251e828287613eca565b61252883876134dd565b6040518581526001600160a01b03851690339088907f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0906020016124be565b5f8181526001602052604081206110ee8361258183613647565b839190614083565b5f5160206157925f395f51905f5280545f9190600160a01b900460ff166125b0575f6125b9565b638fb3603760e01b5b91505090565b5f8281526002602081815260408084206001600160a01b0386168552825280842090920154858452600190915290822061113c916001600160781b0316614167565b61260a33610f11565b5f54831061262b5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526003602052604090206126429083613764565b61265f57604051630aa1b05f60e41b815260040160405180910390fd5b612678838361267336859003850185615513565b613910565b505050565b5f8381526001602090815260408083206002835281842033855290925282206126a582613283565b6126b18282878761418a565b81546001600160781b031680808711156126e15760405163c730333f60e01b8152600401610fe191815260200190565b505f6126f0610ff6858961382f565b60038501805491925082915f906127119084906001600160781b031661532b565b82546101009290920a6001600160781b03818102199093169183160217909155845483925085915f916127469185911661532b565b92506101000a8154816001600160781b03021916908360881b60881c021790555061277d610ff688846135d690919063ffffffff16565b84546001600160781b0319166001600160781b03919091161784556127a284896134dd565b60058401546127bb906001600160a01b03168789613612565b604080516001600160781b03831681526020810189905233918a917fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc8517910160405180910390a36001600160781b0316979650505050505050565b61281e33610f11565b5f54831061283f5760405163b77e1e0f60e01b815260040160405180910390fd5b5f83815260016020526040902061285581613283565b600681015460405163a467cc5960e01b81526001600160a01b039091169063a467cc599061288b9087908790879060040161538a565b5f604051808303815f87803b1580156128a2575f5ffd5b505af11580156128b4573d5f5f3e3d5ffd5b505050506128cb84826134dd90919063ffffffff16565b50505050565b5f82815260016020526040812061113c9083613afc565b5f81815260016020526040812061113f90613647565b5f8061290933610f11565b5f858152600160209081526040808320600283528184203385528084528285206001600160a01b03891686529352922061294283613283565b60038101546001600160c81b03165f676765c793fa10079d601b1b8083061515908304018910612972578161297b565b61297b896142e9565b90506129878482614305565b676765c793fa10079d601b1b8082049082061515015f6129aa610ff68884614351565b60018801805491925082915f906129cb9084906001600160781b0316615448565b92506101000a8154816001600160781b03021916908360881b60881c021790555080866002015f8282829054906101000a90046001600160781b0316612a119190615448565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612a3b83614374565b6009880180545f90612a579084906001600160c81b03166155ad565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612a8183614374565b6003860180545f90612a9d9084906001600160c81b03166155ad565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612ad18c886134dd90919063ffffffff16565b604080516001600160781b0383168152602081018590526001600160a01b038c169133918f917fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee910160405180910390a46001600160781b03169b909a5098505050505050505050565b5f5160206157925f395f51905f52546001600160a01b031690565b5f82815260016020526040812061113c9083614167565b612b7633610f11565b5f548310612b975760405163b77e1e0f60e01b815260040160405180910390fd5b6001600160a01b038216612bbe5760405163e6c4247b60e01b815260040160405180910390fd5b61265f83836143a7565b60015f612bd3614414565b8054909150600160401b900460ff1680612bfb5750805467ffffffffffffffff808416911610155b15612c195760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b1781556001600160a01b038316612c625760405163e6c4247b60e01b815260040160405180910390fd5b612c6b8361443c565b805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190612ce882613283565b612cf88282888860400135614450565b5f612d06610ff68489613afc565b60038401805491925082915f90612d279084906001600160781b0316615448565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91612d5c91859116615448565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612d88838388613b10565b60048301545f90604088013590612dac906001600160781b039081169085166155cc565b612db69190615467565b9050612dc181614374565b6009850180545f90612ddd9084906001600160c81b03166155e3565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612e0781614374565b6003840180545f90612e239084906001600160c81b03166155e3565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612e5789856134dd90919063ffffffff16565b60405133908a907f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf90612e8f9086908c908790615602565b60405180910390a36001600160781b0390911698676765c793fa10079d601b1b8083049206151591909101975095505050505050565b5f82815260016020526040812061113c9083613dd8565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612f0e828261450b565b95945050505050565b5f612f21826110f5565b612f3e5760405163b77e1e0f60e01b815260040160405180910390fd5b506001600160a01b03165f9081526004602052604090205490565b5f838152600160209081526040808320600283528184203385529092528220612f8182613283565b612f8c818686614536565b81546001600160781b03168080871115612fbc5760405163c730333f60e01b8152600401610fe191815260200190565b505f612fcb610ff68589614351565b60018501805491925082915f90612fec9084906001600160781b0316615448565b92506101000a8154816001600160781b03021916908360881b60881c021790555080836002015f8282829054906101000a90046001600160781b03166130329190615448565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613069610ff688846135d690919063ffffffff16565b84546001600160781b0319166001600160781b039190911617845561308e84896134dd565b60058401546130a7906001600160a01b03168789613612565b604080516001600160781b03831681526020810189905233918a917f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b29101612372565b5f828152600160209081526040808320600283528184206001600160a01b0386168552909252822061311c8282613c94565b6131268383613c7c565b612f0e9190615467565b5f81815260016020526040812061315061314982613647565b82906145d8565b81546110ee9190600160781b90046001600160781b0316615467565b5f82815260016020526040812061113c9083614351565b5f5160206157925f395f51905f525f806131bb61319e612b3b565b87306131ad60045f8a8c615641565b6131b691615668565b6146b7565b915091508161327b5763ffffffff81161561325857825460ff60a01b1916600160a01b1783556131e9612b3b565b604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee9061321a90899089908990600401615696565b5f604051808303815f87803b158015613231575f5ffd5b505af1158015613243573d5f5f3e3d5ffd5b5050845460ff60a01b191685555061327b9050565b60405162d1953b60e31b81526001600160a01b0387166004820152602401610fe1565b505050505050565b600481015442600160d81b90910464ffffffffff16036132a05750565b5f6132aa82613647565b90506132b9610ff683836145d8565b82548390600f906132db908490600160781b90046001600160781b031661532b565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613305816135db565b6004830180546001600160781b0319166001600160781b0392909216919091179055613330426137b8565b82600401601b6101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b81545f90600160781b90046001600160781b03168161337a610ff68684613dd8565b90506001600160781b0381165f03613396575f9250505061113f565b60088501545f8581526002602081815260408084206001600160a01b039095168085529490915290912090810154600160e01b900460ff166133eb57604051637437d01960e11b815260040160405180910390fd5b6001870180548491905f9061340a9084906001600160781b031661532b565b92506101000a8154816001600160781b03021916908360881b60881c021790555082816002015f8282829054906101000a90046001600160781b0316613450919061532b565b82546101009290920a6001600160781b038181021990931691831602179091558854600160781b600160f01b0319168955604080519186168252602082018790526001600160a01b038516925088917fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c910160405180910390a350506001600160781b0316949350505050565b60048201546001600160781b03165f6134f7848484614083565b905061350281613785565b6004850180546bffffffffffffffffffffffff60781b1916600160781b6001600160601b0393909316830217905584546040805185815260208101859052929091046001600160781b03169082015283907fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f148833509060600160405180910390a250505050565b60078301546001600160a01b038381169116146135b657604051631e35bba360e11b815260040160405180910390fd5b5f81116126785760405163162908e360e11b815260040160405180910390fd5b900390565b5f6001600160781b0382111561360e576040516306dfcc6560e41b81526078600482015260248101839052604401610fe1565b5090565b61361f8383836001614749565b61267857604051635274afe760e01b81526001600160a01b0384166004820152602401610fe1565b60048101545f906001600160781b03811690600160d81b900464ffffffffff164281148061369d575060038401546001600160781b031615801561369d57506003840154600160781b90046001600160781b0316155b156136a9575092915050565b60048401546136d3906136cc90600160781b90046001600160601b0316836147ab565b83906147d8565b949350505050565b5f6136e6838361371f565b6136f08484613705565b61113c9190615467565b5f61113c8383614806565b60038201545f9061113c906001600160781b0316836147d8565b600382015460028301545f9161113c9161374d91600160781b90046001600160781b03169060180b85613ca2565b676765c793fa10079d601b1b808204910615150190565b6001600160a01b0381165f908152600183016020526040812054151561113c565b5f6001600160601b0382111561360e576040516306dfcc6560e41b81526060600482015260248101839052604401610fe1565b5f64ffffffffff82111561360e576040516306dfcc6560e41b81526028600482015260248101839052604401610fe1565b6137f382826143a7565b6040805160a08101825264ffffffffff81525f6020820181905291810182905260016060820152608081019190915261240a9083908390613910565b5f61113c61383c84613647565b839061482c565b5f5f61384e83613647565b6003840154600285015460098601549293505f92613892926001600160781b0380821693600160781b909204169160189190910b906001600160c81b03168661486e565b905061389e84836145d8565b8454600160781b90046001600160781b0316676765c793fa10079d601b1b808406151590840401600187015487546138e9916001600160781b03600160781b9091048116911661532b565b6138fc91906001600160781b0316615467565b61390691906156b5565b6136d391906156b5565b5f8381526002602081815260408084206001600160a01b03871680865290835293819020855193810180549387015187840151606089015160808a015169ffffffffffffffffffff60781b19909716600160781b64ffffffffff998a160264ffffffffff60a01b191617600160a01b98909316979097029190911763ffffffff60c81b1916600160c81b62ffffff9092169190910260ff60e01b191617600160e01b951515959095029490941760ff60e81b1916600160e81b9315159390930292909217909255905190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e906110c09086906151db565b5f821180613a1857505f81115b613a355760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff16613a6157604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff1615613a8e57604051639db9b35560e01b815260040160405180910390fd5b5f613a998585613c7c565b90505f613aa6868661450b565b90508180851115613acd576040516325ecf23b60e11b8152600401610fe191815260200190565b508080841115613af357604051636e43412360e11b8152600401610fe191815260200190565b50505050505050565b5f61113c613b0984613647565b83906148a8565b6004830154600384015460028501546001600160781b0392831692613b46928492600160781b9091049091169060180b856148e2565b6002860180546001600160c81b0319166001600160c81b0392909216919091179055600385018054600160781b600160f01b031916600160781b6001600160781b0393841681029190911790915584546001860154613bb19385939092049091169060180b856148e2565b6001850180546001600160c81b039092166001600160c81b031990921691909117905583546001600160781b03909116600160781b02600160781b600160f01b0319909116178355600283015462ffffff600160c81b909104811690811480613c4457508354613c2f906001600160781b031662ffffff831661496f565b8454600160781b90046001600160781b031611155b613c615760405163a664e07560e01b815260040160405180910390fd5b5050505050565b5f61113c613c7584613647565b8390614994565b80545f9061113c9084906001600160781b0316613cd1565b5f61113c61374d848461450b565b5f6136d383613cb9613cb485886155cc565b6149ba565b613cc391906156c8565b6149e6565b5f61113f825490565b5f61113c6136cc84613647565b5f8111613cfe5760405163162908e360e11b815260040160405180910390fd5b6002820154600160e01b900460ff16613d2a57604051637437d01960e11b815260040160405180910390fd5b6002820154600160e81b900460ff1615613d5757604051639db9b35560e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613db6575060028301548290613d909086906001600160781b0316613e5b565b613d9a9190615467565b8454600160f01b900460ff16600a0a613db390836155cc565b10155b8190613c6157604051636f1fe35760e11b8152600401610fe191815260200190565b5f61113c613de584613843565b60018501548491906001600160781b0316614a0b565b5f5160206157925f395f51905f5280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f61113c613e6884613843565b60018501548491906001600160781b0316614a32565b6002820154600160e01b900460ff16613eaa57604051637437d01960e11b815260040160405180910390fd5b5f811161240a57604051636edcc52360e01b815260040160405180910390fd5b613ed3816135db565b6002840180545f90613eef9084906001600160781b0316615448565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613f19816135db565b6002830180545f90613f359084906001600160781b031661532b565b92506101000a8154816001600160781b03021916908360881b60881c0217905550505050565b6002830154600160e01b900460ff168015613f8157506002820154600160e01b900460ff165b613f9e57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16158015613fc657506002820154600160e81b900460ff16155b613fe357604051639db9b35560e01b815260040160405180910390fd5b5f811161400357604051636edcc52360e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480614061575060028301546140459061403e9084906001600160781b0316615467565b8690613e5b565b8554600160f01b900460ff16600a0a61405e90836155cc565b10155b819061327b57604051636f1fe35760e11b8152600401610fe191815260200190565b600683015483545f916001600160a01b03169063f5fe86ee9085906001600160781b03166140b18887613705565b60098901546140da906001600160c81b0316676765c793fa10079d601b1b808204910615150190565b60018a015460405160e087901b6001600160e01b031916815260048101959095526001600160781b03938416602486015260448501929092526064840152600160781b900416608482015260a401602060405180830381865afa158015614143573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d391906153a3565b5f61113c61417484613843565b60018501548491906001600160781b0316614a5a565b306001600160a01b038216036141b35760405163e6c4247b60e01b815260040160405180910390fd5b5f82116141d35760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166141ff57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561422c57604051639db9b35560e01b815260040160405180910390fd5b6002830154600160a01b900464ffffffffff165f61424a8686613c94565b6142548787613c7c565b61425e9190615467565b905064ffffffffff8214806142c757506003850154614297906001600160c81b0316676765c793fa10079d601b1b808204910615150190565b6142a18583615467565b6142ab9190615467565b8654600160f01b900460ff16600a0a6142c490846155cc565b10155b8290613af3576040516303ad30dd60e41b8152600401610fe191815260200190565b676765c793fa10079d601b1b8181029081048214610f6a575f5ffd5b6002820154600160e01b900460ff1661433157604051637437d01960e11b815260040160405180910390fd5b5f811161240a5760405163162908e360e11b815260040160405180910390fd5b5f61113c61435e84613843565b60018501548491906001600160781b0316614a78565b5f6001600160c81b0382111561360e576040516306dfcc6560e41b815260c8600482015260248101839052604401610fe1565b5f8281526003602052604090206143be9082614a96565b6143db576040516304c9458360e01b815260040160405180910390fd5b6040516001600160a01b0382169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061113f565b614444614aaa565b61444d81614ad1565b50565b5f82118061445d57505f81115b61447a5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166144a657604051637437d01960e11b815260040160405180910390fd5b5f6144b18585613c7c565b90505f6144be868661450b565b905081808511156144e5576040516304ddd91f60e01b8152600401610fe191815260200190565b508080841115613af3576040516337f3f9b760e01b8152600401610fe191815260200190565b805460018201545f9161113c91600160781b9091046001600160781b03169060180b611f7886613647565b306001600160a01b0382160361455f5760405163e6c4247b60e01b815260040160405180910390fd5b5f821161457f5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166145ab57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561267857604051639db9b35560e01b815260040160405180910390fd5b60048201545f906001600160781b03168281036145f8575f91505061113f565b6003840154600160f01b900461ffff165f81900361461a575f9250505061113f565b6003850154600286015460098701546001600160781b0380841693600160781b9004169160180b906001600160c81b03165f614659858585858d61486e565b90505f6146756001600160781b0380881690871686868c61486e565b90506146a8876146a2676765c793fa10079d601b1b808504818606151501908087049087061515016156b5565b90614ae2565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526001600160e01b0319821660648201525f908190819060840160408051601f19818403018152918152602080830180516001600160e01b031663b700961360e01b1781525f808052918290528351939450919290918a5afa1561473f575f516020805191945081901c150291505b5094509492505050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661479f578383151615614793573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f428211156147b8575f5ffd5b506301e1338042919091039190910204676765c793fa10079d601b1b0190565b5f815f19048311158215176147eb575f5ffd5b50676765c793fa10079d601b1b910281810491900615150190565b5f825f01828154811061481b5761481b6156e7565b905f5260205f200154905092915050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715614851575f5ffd5b50676765c793fa10079d601b1b9190910281810491900615150190565b5f5f61487b868685613ca2565b90508381614889858a6155cc565b6148939190615467565b61489d9190615467565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e028841117156148cd575f5ffd5b50676765c793fa10079d601b1b919091020490565b5f5f5f6148f0868689613ca2565b90505f6148fe878635614aff565b90505f61490f6020870135886156fb565b90505f61491d83838c613ca2565b90508361492e604089013583615467565b1461494c5760405163a664e07560e01b815260040160405180910390fd5b614955836135db565b61495e83614b2b565b955095505050505094509492505050565b5f815f1904831115821517614982575f5ffd5b50612710910281810491900615150190565b5f815f19048311158215176149a7575f5ffd5b50676765c793fa10079d601b1b91020490565b5f6001600160ff1b0382111561360e5760405163123baf0360e11b815260048101839052602401610fe1565b5f5f82121561360e57604051635467221960e11b815260048101839052602401610fe1565b5f6136d3614a1c620f424084615467565b614a29620f424086615467565b8691905f614b5a565b5f6136d3614a43620f424085615467565b614a50620f424085615467565b8691906001614b5a565b5f6136d3614a6b620f424085615467565b614a29620f424085615467565b5f6136d3614a89620f424084615467565b614a50620f424086615467565b5f61113c836001600160a01b038416614b92565b614ab2614bde565b614acf57604051631afcd79f60e31b815260040160405180910390fd5b565b614ad9614aaa565b61444d81613dfb565b5f815f1904831115821517614af5575f5ffd5b5061271091020490565b5f5f8212614b1857614b118284615467565b905061113f565b614b2182615722565b61113c90846156b5565b80601881900b8114610f6a5760405163327269a760e01b815260c8600482015260248101839052604401610fe1565b5f614b87614b6783614bf7565b8015614b8257505f8480614b7d57614b7d61573c565b868809115b151590565b613126868686614c23565b5f818152600183016020526040812054614bd757508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561113f565b505f61113f565b5f614be7614414565b54600160401b900460ff16919050565b5f6002826003811115614c0c57614c0c615750565b614c169190615764565b60ff166001149050919050565b5f5f5f614c308686614cd3565b91509150815f03614c5457838181614c4a57614c4a61573c565b04925050506110ee565b818411614c6b57614c6b6003851502601118614cef565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f60208284031215614d10575f5ffd5b5035919050565b5f5f60408385031215614d28575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114610f6a575f5ffd5b5f60208284031215614d5d575f5ffd5b61113c82614d37565b5f5f60408385031215614d77575f5ffd5b82359150614d8760208401614d37565b90509250929050565b5f5f83601f840112614da0575f5ffd5b50813567ffffffffffffffff811115614db7575f5ffd5b602083019150836020828501011115611f39575f5ffd5b5f5f5f5f5f5f60a08789031215614de3575f5ffd5b614dec87614d37565b955060208701358060ff168114614e01575f5ffd5b9450614e0f60408801614d37565b9350614e1d60608801614d37565b9250608087013567ffffffffffffffff811115614e38575f5ffd5b614e4489828a01614d90565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215614e6a575f5ffd5b853594506080601f1982011215614e7f575f5ffd5b5060208501925060a085013567ffffffffffffffff811115614e9f575f5ffd5b614eab87828801614d90565b95989497509550505050565b5f60608284031215614ec7575f5ffd5b50919050565b5f5f5f60a08486031215614edf575f5ffd5b8335925060208401359150614ef78560408601614eb7565b90509250925092565b5f5f60808385031215614f11575f5ffd5b82359150614d878460208501614eb7565b5f5f5f60608486031215614f34575f5ffd5b8335925060208401359150614ef760408501614d37565b5f5f5f83850360e0811215614f5e575f5ffd5b84359350614f6e60208601614d37565b925060a0603f1982011215614f81575f5ffd5b506040840190509250925092565b5f5f5f60408486031215614fa1575f5ffd5b83359250602084013567ffffffffffffffff811115614fbe575f5ffd5b614fca86828701614d90565b9497909650939450505050565b81516001600160a01b03908116825260208084015161ffff1690830152604080840151821690830152606092830151169181019190915260800190565b81516001600160781b031681526102208101602083015161504060208401826001600160781b03169052565b506040830151615055604084018260ff169052565b50606083015161507060608401826001600160781b03169052565b50608083015161508b60808401826001600160781b03169052565b5060a08301516150a060a084018260180b9052565b5060c08301516150bb60c08401826001600160781b03169052565b5060e08301516150d660e08401826001600160781b03169052565b506101008301516150ee61010084018261ffff169052565b5061012083015161510b6101208401826001600160781b03169052565b506101408301516151286101408401826001600160601b03169052565b5061016083015161514361016084018264ffffffffff169052565b506101808301516151606101808401826001600160a01b03169052565b506101a083015161517d6101a08401826001600160a01b03169052565b506101c083015161519a6101c08401826001600160a01b03169052565b506101e08301516151b76101e08401826001600160a01b03169052565b506102008301516151d46102008401826001600160c81b03169052565b5092915050565b5f60a082019050825164ffffffffff168252602083015164ffffffffff166020830152604083015162ffffff16604083015260608301511515606083015260808301511515608083015292915050565b81516001600160781b031681526101408101602083015161525760208401826001600160781b03169052565b50604083015161526c604084018260180b9052565b50606083015161528760608401826001600160781b03169052565b5060808301516152a0608084018264ffffffffff169052565b5060a08301516152b960a084018264ffffffffff169052565b5060c08301516152d060c084018262ffffff169052565b5060e08301516152e460e084018215159052565b506101008301516152fa61010084018215159052565b506101208301516151d46101208401826001600160c81b03169052565b634e487b7160e01b5f52601160045260245ffd5b6001600160781b03818116818416019081111561113f5761113f615317565b5f6001820161535b5761535b615317565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f612f0e604083018486615362565b5f602082840312156153b3575f5ffd5b5051919050565b803561ffff81168114610f6a575f5ffd5b5f602082840312156153db575f5ffd5b61113c826153ba565b608081016153f183614d37565b6001600160a01b03168252615408602084016153ba565b61ffff16602083015261541d60408401614d37565b6001600160a01b0316604083015261543760608401614d37565b60601b60601c606083015292915050565b6001600160781b03808316828216039081111561113f5761113f615317565b8082018082111561113f5761113f615317565b6001600160781b038516815260c081016154ab60208301868035825260208082013590830152604090810135910152565b608082019390935260a0015292915050565b8135815260208083013590820152604080830135908201526060810161113f565b803564ffffffffff81168114610f6a575f5ffd5b803562ffffff81168114610f6a575f5ffd5b80358015158114610f6a575f5ffd5b5f60a0828403128015615524575f5ffd5b5060405160a0810167ffffffffffffffff8111828210171561555457634e487b7160e01b5f52604160045260245ffd5b604052615560836154de565b815261556e602084016154de565b602082015261557f604084016154f2565b604082015261559060608401615504565b60608201526155a160808401615504565b60808201529392505050565b6001600160c81b03808316828216039081111561113f5761113f615317565b808202811582820484141761113f5761113f615317565b6001600160c81b03818116818416019081111561113f5761113f615317565b6001600160781b038416815260a0810161563360208301858035825260208082013590830152604090810135910152565b826080830152949350505050565b5f5f8585111561564f575f5ffd5b8386111561565b575f5ffd5b5050820193919092039150565b6001600160e01b0319813516600483101561113f576001600160e01b0319600484900360031b1b1692915050565b8360601b60601c8152604060208201525f612f0e604083018486615362565b8181038181111561113f5761113f615317565b8181035f8312801583831316838312821617156151d4576151d4615317565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f83128015821682158216171561571a5761571a615317565b505092915050565b5f600160ff1b820161573657615736615317565b505f0390565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f8260ff168061578257634e487b7160e01b5f52601260045260245ffd5b808360ff16069150509291505056fef3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00